Per usare ctranslate2, ad esempio con faster-whisper, alla massima velocità con una GPU AMD MI210 è necessario ricompilare la libreria. Vediamo la procedura.
Installiamo i pacchetti necessari per la compilazione:
apt install -y build-essential cmake git libopenblas-devInstalliamo i pacchetti rocm, se non l’abbiamo già fatto:
apt install -y rocm-dev rocm-libsScarichiamo i sorgenti:
cd ~
git clone --recursive https://github.com/OpenNMT/CTranslate2.gitOra avviamo la compilazione:
cd CTranslate2
rm -rf build && mkdir build && cd build # azzera la cache di CMake
cmake .. \
-DWITH_HIP=ON \
-DCMAKE_HIP_ARCHITECTURES=gfx90a \
-DWITH_MKL=OFF -DWITH_DNNL=OFF -DWITH_OPENBLAS=ON \
-DOPENMP_RUNTIME=COMP \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/opt/rocm \
-DCMAKE_HIP_COMPILER=/opt/rocm/lib/llvm/bin/clang++ \
-DCMAKE_CXX_COMPILER=/opt/rocm/lib/llvm/bin/clang++ \
-DCMAKE_C_COMPILER=/opt/rocm/lib/llvm/bin/clang \
-DBUILD_CLI=OFF
make -j$(nproc)
make installCreiamo un ambiene venv per la nostra installazione ed installiamo faster-whisper
python -m venv ~/venv
source ~/venv/bin/activate
pip install faster-whisperRimuoviamo il supporto per ctranslate2 che viene autoinstallato:
pip uninstall -y ctranslate2ATTENZIONE: Se in futuro aggiorni faster-whisper, usa
pip install -U --no-deps faster-whisperaltrimenti pip può reinstallare la wheel ufficiale senza gfx90a.
Possiamo ora installare ctranslate2 nel nostro venv:
cd ../python
pip install -r install_requirements.txt
CTRANSLATE2_ROOT=/usr/local python setup.py bdist_wheel
pip install --no-deps dist/*.whl
export LD_LIBRARY_PATH=/usr/local/lib:/opt/rocm/lib:$LD_LIBRARY_PATHEffettuiamo le ultime configurazioni:
echo "/usr/local/lib" | tee /etc/ld.so.conf.d/ctranslate2.conf
echo "/opt/rocm/lib/llvm/lib" | tee /etc/ld.so.conf.d/rocm-llvm.conf
ldconfigOra eseguiamo:
ldd /usr/local/lib/libctranslate2.so.4 | grep "not found"e non deve essere stampato nulla, altrimenti c’è un errore.
Verifichiamo se ctranslate è installato nel venv:
ls ~/venv/lib/python3.12/site-packages | grep -i ctranslate2proviamo un import con ambiente pulito:
env -i ~/venv/bin/python -c "import ctranslate2; from faster_whisper import WhisperModel; print('ok', ctranslate2.file)"Benissimo ora simuliamo una trascrizione per vedere se funziona tutto correttamente:
timeout 120 ~/venv/bin/python -c " import time, numpy as np from faster_whisper import WhisperModel m = WhisperModel('tiny', device='cuda', compute_type='float16') t=time.time() segs, info = m.transcribe(np.zeros(16000*5, dtype=np.float32)) print(list(segs), 'trascrizione ok', round(time.time()-t,1), 's') "Se stampa la riga finale senza segfault, la GPU funziona correttamente. La prima esecuzione può essere più lenta perché carica i kernel.
Se hai più GPU e ne vuoi utilizzarne una solo una, ricordati di esportare la seguente variabile d’ambiente:
export HIP_VISIBLE_DEVICES=0enjoy!
Ti interessa acquistare un dominio a prezzi ultraconvenienti? clicca qui
Se hai trovato utili le informazioni su questo blog,
Fai una donazione!
Clicca sul bottone qui sotto o almeno clicca sul banner pubblicitario 🙂
Commenta