Ricompilare libctranslate2 per usare AMD MI210 (gfx90a)

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-dev

Installiamo i pacchetti rocm, se non l’abbiamo già fatto:

apt install -y rocm-dev rocm-libs

Scarichiamo i sorgenti:

cd ~
git clone --recursive https://github.com/OpenNMT/CTranslate2.git

Ora 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 install

Creiamo un ambiene venv per la nostra installazione ed installiamo faster-whisper

python -m venv ~/venv
source ~/venv/bin/activate
pip install faster-whisper

Rimuoviamo il supporto per ctranslate2 che viene autoinstallato:

pip uninstall -y ctranslate2

ATTENZIONE: Se in futuro aggiorni faster-whisper, usa

pip install -U --no-deps faster-whisper

altrimenti 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_PATH

Effettuiamo 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
ldconfig

Ora 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 ctranslate2

proviamo 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=0

enjoy!

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