WhipserをGPUで動かす環境をDocker Conposeでつくる
概要
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を使用するための環境構築は以下の記事を参考にさせていただきました。
Pythonのコード
Dockerfile
作成したDockerfileは以下の通りです。
以下の記事のDockerfileを参考にさせていただきました。
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を選択したり個数を制限する場合は以下のドキュメントを確認してください。
実行
カレントディレクトリに作成したdocker-compose.ymlがあることを確認し、PowerShellでdocker-compose up -d
を実行します。
dockerコンテナの作成が完了したらコンテナに入りPythonプログラムを実行すると、GPUを使用して推論を行うことができます。
さいごに
先人の記事を参考にしつつ環境構築から実行までの手順をまとめてみました。
Discussion