모든 것이 올바르게 작동한다면 컨테이너 내부에 호스트에서 실행되는 것과 동일한 nvidia-smi 출력이 표시되어야 합니다(프로세스 목록 제외).
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi
docker-compose
vi docker-compose.yml
version: '3.9'
services:
whisper:
build: .
# gpu를 사용하기 위해서는 꼭 이 내용이 필요합니다.
deploy:
resources:
reservations:
devices:
- driver: 'nvidia'
capabilities: [gpu]
count: 1
cd /data/git
git clone git@github.com:teamsmiley/my-whisper.git
cd my-whisper
docker-compose up --build
잘 실행됨을 알고 있습니다.
gpu 사용량
gpu가 사용됨을 확인하시려면 main.py에 다음 코드를 추가합니다.
import whisper
import torch
import time
if torch.cuda.is_available():
device = torch.device("cuda")
print("Using GPU:", torch.cuda.get_device_name(0))
else:
device = torch.device("cpu")
print("Using CPU")
cpu를 사용하는지 gpu를 사용하는지 확인할수 있습니다.
실제 gpu사용량이 보고 싶었습니다.
nvidia-smi
위 명령어를 실행해보면 gpu실 사용량이 보입니다. 한가지 주의하셔야할점은 현재 코드는 인터넷에서 모델을 다운받고 로드하고 하는부분이 있는데 이부분이 오래 걸립니다. 그래서 프로그램을 실행해도 한참을 0% 사용량을 보일것입니다. 실제로 연산하는 부분에서만 gpu가 올라가는걸 보실수 있을겁니다.
성능테스트
모델을 이것저것 바꿔가면서 정확성과 성능을 테스트해보시기 바랍니다. 저의 경우에는
3분짜리 mp3파일로 테스트해봣는데 다음과 같았습니다.
model
model size
transcribe
tiny
72M
5 sec
base
140M
6 sec
small
460M
7 sec
medium
1.4G
13 sec
large-v2
2.9G
17 sec
모델 다운로드시간은 뺀 결과입니다.
하시다보면 매번 모델 다운로드에 더 오래 걸리는걸 아실수 있습니다. 그래서 다음처럼 docker-compose.yml을 수정하시면 한번 다운받은 모델을 캐시하여 사용하실수 있습니다.
vi docker-compose.yaml
version: '3.9'
services:
whisper:
build: .
# 이부분을 추가해주면 됩니다.
volumes:
- ./cache:/root/.cache/whisper:rw
# for gpu
deploy:
resources:
reservations:
devices:
- driver: 'nvidia'
capabilities: [gpu]
count: 1 # we need this
이제 프로젝트폴더에 cache폴더를 만들어주시면 모델들이 이 폴더에 저장이 되어 다음번에 실행할때 이 파일을 사용하는것을 알수 있습니다.
현재 릴리스된 Nvidia 드라이버는 dkms/rpm을 통해 배포되므로 사용자 지정 실행 스크립트를 통해 설치할 필요가 없습니다. dkms 덕분에 프로세스가 훨씬 쉬워졌으며 향후 커널 업데이트 시 모듈이 자동으로 다시 컴파일됩니다. (참고 )