🐳

WhipserをGPUで動かす環境をDocker Conposeでつくる

2022/10/06に公開

概要

OpenAIがオープンソースとして公開したSpeech to Textを行う深層学習モデルのWhisperをPython+GPUで動かす環境をDocker Composeで作成するまでの手順です。

想定環境

Windows11
GPU:GeForce RTX 2080 Ti
GPUはドライバや後述するdockerfileでベースとするイメージに影響します。

ディレクトリ構成

.
├── main
│   └── recognize.py # whisperを動かすプログラム
├── audio
│   └── input.mp3 # 解析する音声ファイル
├── Dockerfile
├── docker-compose.yml
└── requirements.txt

DockerでGPUを使用するための環境構築は以下の記事を参考にさせていただきました。
https://qiita.com/ksasaki/items/ee864abd74f95fea1efa

Pythonのコード
https://github.com/openai/whisper#python-usage

Dockerfile

作成したDockerfileは以下の通りです。
以下の記事のDockerfileを参考にさせていただきました。
https://zenn.dev/kento1109/articles/d7d8f512802935#環境構築(cpu)

FROM pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime

ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y \
    build-essential \
    gcc \
    git \
    python3-tk \
    portaudio19-dev \
    ffmpeg \
    && rm -rf /var/lib/apt/lists/*  

RUN pip install --upgrade pip
COPY requirements.txt /root/
WORKDIR /root/
RUN pip install -r requirements.txt

改変部分について

参考にさせていただいたDockerfileに以下の変更を加えました。

ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Dockerコンテナを作成する際に、timezoneの設定でビルドが進まなくなってしまう事例に遭遇したため、対策としてDockerfile内にtimezoneの設定を記述しています。

RUN pip install --upgrade pip
COPY requirements.txt /root/
WORKDIR /root/
RUN pip install -r requirements.txt

Whisperを使用してアプリケーションを作成する場合、他のライブラリと組み合わせることになるため、依存関係を管理しやすいようにrequirements.txtに記述しました。

requirements.txt

git+https://github.com/openai/whisper.git 

docker-compose.yml

作成したdocker-compose.ymlは以下の通りです。

version: '3'
services:
  whisper_gpu:
    build:
      context: .
      dockerfile: ./Dockerfile
    container_name: 'whisper-gpu'
    working_dir: '/root/'
    tty: true
    volumes:
      - ./main:/root/main/
      - ./audio:/root/audio/
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              capabilities: [gpu]
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all

whisper_gpuやvolumesに関しては適宜環境に合わせて変更してください。
使用するGPUを選択したり個数を制限する場合は以下のドキュメントを確認してください。
https://docs.docker.jp/compose/gpu-support.html

実行

カレントディレクトリに作成したdocker-compose.ymlがあることを確認し、PowerShellでdocker-compose up -dを実行します。

dockerコンテナの作成が完了したらコンテナに入りPythonプログラムを実行すると、GPUを使用して推論を行うことができます。

さいごに

先人の記事を参考にしつつ環境構築から実行までの手順をまとめてみました。

Discussion