Circa sei mesi fa, per esigenze di gaming di mio figlio, ho deciso di cambiare la scheda video e giร che c’ero ho pensato di comprarne una che sia supportata come acceleratore negli apprendimenti di machine learning tra cui keras.
Potevo scegliere una scheda Nvidia con cuda, come la precedente, ma ho optato per una scheda AMD per non avere tra i piedi driver proprietari. Dedicherรฒ una riflessione su questo tipo di scelta, opensource vs proprietario. Le recenti recensione ne parlavano bene e sembrava che il driver rocm funzionasse bene out-of-the-box anche su Ubuntu. Nulla di piรน sbagliato, nemmeno la versione su docker, quella che doveva essere pronta all’uso, funzionava. Ci ho messo sei mesi per far sistemare tutto correttamente, ovviamente non a tempo pieno, solo nei ritagli di tempo e finalmente tutto funziona.
Step 1: Disinstallare tutti i driver video
sa nvidia con cuda che amd, facendo questo passo ho perso metร del sistema operativo perchรฉ tramite il meccanismo delle dipendenze ha disinstallato quasi tutto. Per la mia esperienza รจ l’unico modo per evitare di rimanere letteralmente incastrati con le dipendenze del driver AMD
Step2: Installazione dei driver AMD
Processo non รจ banale, o meglio lo รจ seguendo il processo indicato sul sito, ma rocm non funziona. Almeno per la mia scheda video “AMD Radeon RX 6650 XT”. Dopo lโinstallazione dell’installer dell’AMD ho modificato a mano i repository da cui scarica i pacchetti, dalla versione 5.7.2 alla versione 6.0.0 “deb https://repo.radeon.com/amdgpu/6.0/ubuntu jammy main”. Le altre versioni non si agganciavano a Keras/tensorflow
Step 3: Installazione di tensorflow
Trovare il giuso match รจ stata la cosa piรน complicata. Tensorflow va installato compatibile con la versione rocm presente. Anche qui ho dovuto disinstallare tutte le precedenti versioni e, non so come mai, avevo una libreria pip installata come root, che ovviamente mi ha dato problemi. Anche quella rimossa. La libreria Pythn da installare รจ tensorflow-rocm 2.13.1.600. Il numero finale 600 indica la versione del driver rocm (600=rocm-6.0.0). L’ultima versione 2.14.0.600 di tensorflow non va con la mia scheda.
Step 4: Configurazione
Siamo alla fine. Il mio รจ una scheda 6650 con deviceid gfx1032, rocm riconosce solo la scheda 6600 con deviceid gfx1030, quindi รจ stato necessario forzare il device id. Si puรฒ fare o con le variabili d’ambiente o direttamente in pyton con “os.environ[‘HSA_OVERRIDE_GFX_VERSION’] = ‘10.3.0’”, anche qui 10.3.0 indica la versione che corrisponde a gfx1030.
Finalmente la calcolatrice
Per provare ho usato una semplice calcolatrice, ma prima imposto l variabile e verifico che tutto si carichi correttamente
import os
import tensorflow as tf
from tensorflow.python.client import device_lib
os.environ['HSA_OVERRIDE_GFX_VERSION'] = '10.3.0'
print(f'tensorflow version: {tf.version.VERSION}')
tf.config.list_physical_devices('GPU')
device_lib.list_local_devices()
Il risultato mostra i dispositivi che tensorflow puรฒ utilizzare e quindi:
name: "/device:CPU:0"
name: "/device:GPU:0"
Ora il codice della calcolatrice:
import numpy as np
import tensorflow as tf
from tensorflow import keras
import time
start_time = time.time()
with tf.device('gpu:0'):
# Genera dati di training
input_data = np.random.rand(50000, 2)
target_data = np.sum(input_data, axis=1)
# Creo un modello semplice
model = keras.Sequential([
keras.layers.Dense(20, activation='relu', input_shape=(2,)),
keras.layers.Dense(20, activation='relu'),
keras.layers.Dense(1)
])
# Compila il modello
model.compile(optimizer='adam', loss='mean_squared_error')
# Addestra il modello
model.fit(input_data, target_data, epochs=5)
Infine faccio un po’ di somme
# Testa il modello con nuovi dati
test_data = np.array([[0.3, 0.7], [0.05, 0.10],[5, 10], [1.2, 2.3]])# Testa il modello con nuovi dati
predictions = model.predict(test_data)
# Stampa i risultati
for i, prediction in enumerate(predictions):
print(f"{test_data[i]} = {prediction[0]:.2f}")
1/1 [==============================] - 0s 28ms/step
[0.3 0.7] = 1.00
[0.05 0.1 ] = 0.15
[ 5. 10.] = 14.38
[1.2 2.3] = 3.50
Il risultato della calcolatrice non รจ preciso, come accde sui modelli di reti neurali su cui non รจ stato fatto tuning, ma serviva per testare la scheda video.
Effetti collaterali
La scheda video รจ montata sul mio hmetheater-TV come si usava negli anni 2000, monta 2 ricevitori sattelitari, 2 tuner per DVB e controller dei giochi perchรฉ viene usato anche come postazione gaming e un device touch per rendere il monitor TV touchscreen. Usare la scheda video per tensorflow fa saltare i buffer video e la tv puรฒ essere vsta solo a a una risoluzione HD-rady di 1280ร720…. Dedicherรฒ una riflessione sulla scelta dell’opensource
Lascia un commento