- ROCm je odprt sklad za IA in HPC s HIP, RCCL in pospešenimi knjižnicami.
- ROCm 7 pospešuje učenje in sklepanje s FP4/FP6 ter izboljšano komunikacijo.
- Neposredna namestitev na Ubuntu; WSL2 in več grafičnih procesorjev na voljo od različice 6.1.3.
- Prenos iz CUDA zahteva HIPify in prilagoditve; znatni prihranki z izogibanjem licenčninam.
Če delate s pospeševanjem GPU za umetno inteligenco ali visokozmogljivo računalništvo, ste verjetno že slišali za ROCm, odprto platformo podjetja AMD, ki vam omogoča, da njihove kartice izkoristite za resno računalništvo v Linux in vse bolj tudi v drugih okoljih. ROCm se je rodil za učinkovito integracijo CPU in GPU in reševati resnične računalniške obremenitve z odprtim pristopom, brez licenčnih omejitev.
V zadnjih nekaj ciklih je AMD pospešil razvoj: ROCm 7 je prinesel znatne izboljšave v zmogljivosti in združljivosti, prejšnje izdaje 6.x pa so odprle vrata scenarijem, kot sta WSL2 in nastavitve z več grafičnimi procesorji. Zanimivo je, da ne govorimo več o nenehni demonstraciji., temveč ekosistem, ki dozori, se razširi in začne privabljati tiste, ki iščejo alternative CUDA, ne da bi pri tem zastavili svoj sklad.
Kaj je AMD ROCm in zakaj je pomemben?
ROCm (Radeon Open Compute) je odprtokodni programski paket, ki vključuje gonilnike, orodja, knjižnice in API-je za programiranje grafičnih procesorjev AMD od nizke ravni (jedro) do uporabniško definiranih aplikacij. Ideja je ponuditi enotno, visoko zmogljivo osnovo za generativni AI in visokozmogljivo računalništvo (HPC) z relativno enostavno migracijo iz obstoječih ekosistemov.
Platforma podpira intenzivno izvajanje delovnih obremenitev v Linuxu in se osredotoča na kar najboljši izkoristek grafičnega procesorja z optimiziranim okoljem izvajanja, prevajalniki in knjižnicami. Komponente, kot je HIP, so integrirane za prenos kode CUDA, knjižnice za kolektivno komunikacijo, kot je RCCL, pospeševalniki linearne algebre ter orodja za profiliranje in odpravljanje napak.
Poleg zmogljivosti je vrednost ROCm tudi v njegovi odprti naravi: brez zaprtih licenc in s široko usklajenostjo z ekosistemi umetne inteligence in podatkovne znanosti kot so PyTorch, TensorFlow in ONNX. Zaradi tega je zelo privlačna možnost za univerze, mala in srednje velika podjetja ter laboratorije, ki želijo doseči rast brez dodatnih stroškov programske opreme.
Kaj prinaša ROCm 7: zmogljivost, lahka oblika in večja združljivost
Z različico 7 je platforma naredila pomemben korak naprej. AMD poroča, da je v določenih scenarijih do 3,5-krat hitrejša pri sklepanju in 3-krat hitrejša pri učenju. poganja ga podpora za nizko natančne podatkovne tipe, kot sta FP4 in FP6 in izboljšave porazdeljenega izvajanja in komunikacijskega sklada.
Ti zmanjšani formati omogočajo shranjevanje več podatkov v manj pomnilnika in pospešujejo prepustnost brez opaznega poslabšanja kakovosti pri ustreznih obremenitvah. kaj je ključnega pomena za LLM in generativno umetno inteligencoTrend k nižji natančnosti (od FP32/FP16 do FP8/FP6/FP4) je v skladu z najsodobnejšim stanjem tehnike.
Druga kritična točka je komunikacija med grafičnimi procesorji. Z integracijo RCCL (AMD-jevega ekvivalenta NCCL) ROCm 7 izboljšuje orkestracijo prometa med grafičnimi procesorji (GPU-GPU), kar zmanjšuje ozka grla pri skaliranju na več pospeševalcev. To omogoča stabilnejše in učinkovitejše porazdeljeno usposabljanje.
Napredek je bil tudi pri združljivosti: poleg Linuxa še Delamo na podpori za Windows (še vedno omejeno, vendar z napredkom) in obseg strojna oprema, vključno z Instinct MI300X, novejšimi Radeon in celo platformami z umetno inteligenco Ryzen. Za razvijalce namiznih računalnikov, to odpira možnosti zunaj podatkovnega centra.
Programski sklad in ključne komponente v ROCm
ROCm je več kot le gonilnik: je celoten sklad. Vključuje razvojna orodja, prevajalnike, numerične knjižnice, komunikacijske API-je in pripomočke za upravljanjeNa splošno so njeni najpomembnejši deli:
- KOLK: Plast prenosljivosti, ki omogoča prilagoditev jeder CUDA grafičnim procesorjem AMD. HIPify avtomatizira velik del postopka prevajanja.
- RCCLKnjižnica za kolektivno komunikacijo, optimizirana za grafične procesorje AMD, zelo uporabna pri porazdeljenem učenju.
- MIOpenprimitivi za nevronske mreže Pospešeno z grafičnim procesorjem.
- ROCM BLAS, FFT, redki in MAGMAKljučne algebrske knjižnice za delovanje umetne inteligence/HPC.
- Orodja kot so rocminfo, rocm-smi, pripomočki za profiliranje, odpravljanje napak in orkestracijo (vključno s podporo za Kubernetes prek operaterja GPU).
S tem kompletom, celoten razvojni cikel je zajet, od pisanja in prenosa jeder do modelov učenja in delovanja gruč z vidnostjo in nadzorom.
Razlike od CUDA: Katere spremembe se pojavijo v praksi?
Od koga prihaja NVIDIA in CUDA ve, da je zmogljivost prisotna, vendar tudi vezava na prodajalca. ROCm si prizadeva prekiniti to zastoje z odprtim in ekonomsko dostopnejšim predlogom. V praksi:
- Sklad je odprt in prost, idealno za grozde umetne inteligence z nadzorovanimi stroški.
- HIP olajša prenos jeder CUDA, vendar Ni vse samodejno ali 1:1.
- Združljivost strojne opreme je bolj selektivna: Vse potrošniške Radeon kartice niso uradno podprte.
- Podpora za Windows napreduje in WSL2 se zdaj pojavlja v vejah 6.x kot beta različica, ki širi razvojne scenarije.
Če vaš delovni tok temelji na zaprtih orodjih, osredotočenih na CUDA, lahko naletite na omejitve. Če pa uporabljate PyTorch ali TensorFlow in se lotite odprtokodne programske opreme, ROCm 7 začenja zagotavljati resno produkcijsko izkušnjo.
Združljivost strojne opreme in zahteve, ki jih morate upoštevati
Pomemben odtenek je seznam uradno podprtih grafičnih procesorjev. NVIDIA omogoča CUDA v večjem delu svojega portfelja, medtem ko AMD uradno omejuje ROCm na določene čipe (Instinct in nekatere Radeone). To ne pomeni, da druge grafične kartice ne bodo delovale, vendar bodo morda zahtevale prilagoditve ali pa ne bodo podprte.
V prejšnjih generacijah je bila podpora za modele, kot je Instinct MI25, ki ponudil ~12,5 TFLOPS FP32 in 768 GFLOPS FP64, vendar od različice ROCm 5.0 naprej ni bil več naveden kot podprt. Kljub temu pa je pri nekaterih Tricks lahko deluje za eksperimentiranje.
Zgoraj lebdi Instinct MI50 ~13,3 TFLOP-ov FP32 in ~6,6 TFLOP-ov FP64, trenutni modeli, kot je MI300X, pa z veliko pomnilnika in zmogljivosti dvigujejo standarde za LLM-je. Za profesionalno uporabo je primeren 48GB Radeon Pro W7900. Zanimivo je za LLM-je, ki zahtevajo 35 GB ali več na grafični procesor..
Pogosto spregledana zahteva je podpora PCIe Atomics s strani procesorja/plošče. Če je vaša platforma starejša od leta ~2017, lahko pride do zrušitev.Dobro je, da ga preverite, preden se odpravite po nakupih ali se lotite ambicioznih uvedb.
ROCm 6.1.3: Več grafičnih procesorjev in WSL2 na radarju
Pred ROCm 7 je veja 6.1.3 prinesla praktične stvari: podpora za konfiguracije z več grafičnimi procesorji (ključ do skaliranja storitev) in beta podpora za podsistem Windows za Linux (WSL2). To vam omogoča zagon orodij umetne inteligence, ki temeljijo na Linuxu, iz sistema Windows, Zelo uporabna novica za mešane delovne postaje.
Poleg tega je bila dodana združljivost TensorFlow s PyTorch in ONNX, kar širi možnosti za tiste, ki krožijo med ogrodji. Če delate v sistemu Windows, vendar je vaša dejanska namestitev Linux, je WSL2 lahko priročen most za razvoj.
Osnovna namestitev v Linux (Ubuntu) in preverjanje
Za osebni računalnik z nameščenim Ubuntu 20.04/22.04 LTS je uradna namestitev preprosta. Priporočeni postopek je dodajanje repozitorija AMD, namestitev razvojnega metapaketa in preverjanje grafičnega procesorja.:
Priprava sistema z osnovnimi orodji in ključ repozitorija AMD:
sudo apt update && sudo apt install -y wget gnupg2
wget https://repo.radeon.com/rocm/rocm.gpg.key
sudo gpg --dearmor -o /etc/apt/keyrings/rocm.gpg < rocm.gpg.key
Dodajte seznam repozitorij in ga posodobite indeks paketa:
echo 'deb [signed-by=/etc/apt/keyrings/rocm.gpg] https://repo.radeon.com/rocm/apt/debian/ ubuntu main' | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt update
Namestite razvojni sklad in glavna orodja:
sudo apt install -y rocm-dev
Za potrditev namestitve lahko preverite stanje zaznane grafične kartice in gonilnika. Ti pripomočki so del paketa ROCm.:
rocminfo
rocm-smi
S tem bi morali biti pripravljeni na prevajanje kode v HIP ali zagon PyTorcha z AMD backendom. Če delate v Kubernetes, vam GPU Operator olajša delo oskrbovalna vozlišča z vozniki in pripravljen za izvajanje.
Ali obstaja samodejna pretvorba iz CUDA? Kaj v resnici obstaja?
Ponavljajoče se vprašanje je, ali je mogoče pretvoriti projekt CUDA v ROCm, ne da bi se dotaknili kode. Kratek odgovor: ni 100-odstotno samodejnega čarobnega gumbaObstajata pa HIP in orodja hipify, ki pomagajo prevajati številne CUDA API-je in jedra.
V resničnih projektih, Običajna stvar je polavtomatska migracija z ročnimi pregledi, zlasti na področjih, kjer obstajajo odvisnosti, specifične za CUDA, nestandardne razširitve ali subtilna vedenja. Napor se razlikuje glede na velikost kode in uporabo knjižnic tretjih oseb.
Za razliko od drugih pobud je ta izkušnja zasnovana tako, da se zbliža s kodo C++/HIP, kar olajša vzdrževanje skupne bazeKljub temu je priporočljivo izdelati prototip s kritičnimi moduli, preden se odločite za popolno migracijo.
Napredni vodnik: Izvajanje ROCm na Vega iGPU (Ryzen APU)
V nepodprtih scenarijih je prostor za spreminjanje. Zanimiv primer je Ryzen 2200G z integrirano grafično kartico Vega 8, zmogljiv z ~1,8 TFLOP-ov FP32 pri 1,6 GHzNi zver, ampak zabavno je eksperimentirati z majhnimi modeli.
Cilj je, da sistem zazna vgrajeno grafično kartico (iGPU) prek ROCm-a, namestite najnovejšo možno različico in preizkusite PyTorch. Da bi PyTorch prepoznal grafični procesor, je v teh primerih običajno potrebno prevedite PyTorch iz izvorne kode z določenimi parametri.
Najprej ne pozabite, da vgrajena grafična kartica uporablja skupni pomnilnik z RAM-om. Dodelite čim več BIOS (na primer, 2 GB) tako da je pri sklepanju manevrski prostor.
1. korak: Namestite ROCm in preverite grafični procesor
Uporabite zgornji postopek za Ubuntu. Preverite z rocminfo in openclinfo da sistem vidi grafični procesor:
sudo rocminfo
sudo openclinfo
Če so agenti navedeni in se grafični procesor prikaže v ustreznem razdelku, imaš pripravljeno osnovo za preostanek postopka.
2. korak: Odvisnosti za prevajanje PyTorcha z ROCm
Potrebovali boste dodatna orodja in knjižnice za gradnjo, ki niso vključene v privzeti namestitveni program. Namestite orodjarno in pripomočke iz gradnje:
sudo apt install -y python3 python3-pip gcc g++ libatomic1 make \
cmake doxygen graphviz texlive-full
In dodaja ROCm pakete in knjižnice, ki jih bo PyTorch zahteval med prevajanjem. Vključuje gonilnike, MIOpen, RCCL in ekosistem HIP:
sudo apt install -y libstdc++-12-dev rock-dkms rocm-dev rocm-libs \
miopen-hip rccl rocthrust hipcub roctracer-dev cmake
Za MAGMA je priporočljivo uporabiti Condo kot ponudnika MKL. Namestite Minicondo v svojo uporabniško mapo in pustite pot pri roki:
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash
Znova zaženite terminal za nalaganje okolja. To vam bo dalo potreben MKLROOT ko povežete MAGMA.
3. korak: Zgradite in namestite MAGMA za ROCm
Pred prevajanjem določite cilj LLVM vašega grafičnega procesorja z uporabo rocminfo ali dokumentacije LLVM za AMDGPU. Na Vegi 8 običajno vidite gfx902, vendar praktično podporo Za te poskuse smo kot tarčo uporabili približno gfx900 (MI25).
S to referenco, prilagodi PYTORCH_ROCM_ARCH in MKLROOT in zažene gradnjo MAGMA:
export PYTORCH_ROCM_ARCH=gfx900
# Clona el repo
git clone https://bitbucket.org/icl/magma.git
pushd magma
# Branch con corrección de memory leak
git checkout 5959b8783e45f1809812ed96ae762f38ee701972
cp make.inc-examples/make.inc.hip-gcc-mkl make.inc
# Añade linkers y objetivos de GPU al make.inc
echo 'LIBDIR += -L$(MKLROOT)/lib' >> make.inc
echo 'LIB += -Wl,--enable-new-dtags -Wl,--rpath,/opt/rocm/lib -Wl,--rpath,$(MKLROOT)/lib -Wl,--rpath,/opt/rocm/magma/lib' >> make.inc
echo 'DEVCCFLAGS += --gpu-max-threads-per-block=256' >> make.inc
export PATH="${PATH}:/opt/rocm/bin"
if [[ -n "$PYTORCH_ROCM_ARCH" ]]; then
amdgpu_targets=`echo $PYTORCH_ROCM_ARCH | sed 's/;/ /g'`
else
amdgpu_targets=`rocm_agent_enumerator | grep -v gfx000 | sort -u | xargs`
fi
for arch in $amdgpu_targets; do
echo "DEVCCFLAGS += --amdgpu-target=$arch" >> make.inc
done
# Evita conflictos con OpenMP en hipcc
sed -i 's/^FOPENMP/#FOPENMP/g' make.inc
make -f make.gen.hipMAGMA -j $(nproc)
LANG=C.UTF-8 make lib/libmagma.so -j $(nproc) MKLROOT=~/miniconda3
make testing/testing_dgemm -j $(nproc) MKLROOT=~/miniconda3
popd
sudo mv magma /opt/rocm
Ta korak zagotavlja, da imate Ključna linearna algebra za PyTorchČe to ne uspe, prilagodite poti ali ponovno preverite cilj GPU-ja.
4. korak: Zgradite PyTorch z zalednim okoljem ROCm
Klonira repozitorij in razreši odvisnosti Python. Vključuje dodatne pakete ki običajno preprečijo napake pri prevajanju:
git clone https://github.com/pytorch/pytorch.git
cd pytorch
git submodule update --init --recursive
sudo pip3 install -r requirements.txt
sudo pip3 install enum34 numpy pyyaml setuptools typing cffi future \
hypothesis typing_extensions CppHeaderParser argparse
Pretvorite kodo CUDA v HIP z orodjem, ki ga je vključil AMD. Ta korak prilagodi jedra do AMD-jevega zaledja:
sudo python3 tools/amd_build/build_amd.py
Na koncu prevedite kompilacijo z uporabo cilja gfx900 in omogočite ROCm. Prilagodite MAX_JOBS glede na vaša jedra/niti da se izognete preobremenitvi stroja:
sudo PYTORCH_ROCM_ARCH=gfx900 USE_ROCM=1 MAX_JOBS=4 python3 setup.py install
Bodi potrpežljiv: sestavljanje lahko traja ure in ni nujno, da je na končnem računalniku, če odvisnosti podvajate na drugem računalniku.
5. korak: Stabilnost gonilnika in testiranje z MNIST
Za izboljšanje stabilnosti vgrajene grafične kartice (iGPU) je priporočljivo prilagoditi pravilnike o porabi energije gonilnika AMDGPU. Preverite trenutne parametre in poiščite ppfeaturemask:
find /sys/module/amdgpu/parameters/ -type f -name '*' -exec sh -c 'filename=${1%.*}; echo "File: ${filename##*/}"; cat "$1"' sh {} \;
Nato naložite modul z dovoljeno vrednostjo za ppfeaturemask. Ta vrednost običajno zagotavlja stabilnost v opisanih primerih:
sudo modprobe amdgpu ppfeaturemask=0xfff73fff
Znova zaženite in klonirajte primere PyTorch. Namestitev odvisnosti primera MNIST in uporabite preglasitev, da bo PyTorch obravnaval vgrajeno grafično kartico kot gfx 9.0.0 (MI25):
git clone https://github.com/pytorch/examples.git
cd examples/mnist
sudo pip3 install -r requirements.txt
sudo HSA_OVERRIDE_GFX_VERSION=9.0.0 python3 main.py --verbose
Če zaledni sistem PyTorch označi grafični procesor kot razpoložljivega (tudi če interno ime uporablja »cuda«), uporablja pot HIP. V PyTorchu je "cuda" zgodovinska oznaka za zaledni del grafičnega procesorja., ne glede na to, ali je ponudnik NVIDIA ali AMD.
Windows, WSL2 in pot do mešanih delovnih postaj
Čeprav ROCm še vedno podpira predvsem Linux, Podpora za Windows je na potiVeja 6.1.3 je zdaj usmerjena na beta različico WSL2, ki omogoča razvoj v sistemu Windows z orodji umetne inteligence za Linux.
Za tiste, ki delajo v podjetniških ali izobraževalnih okoljih z operacijskim sistemom Windows, To močno poenostavi posvojitevManj trenja pri testiranju, pripravi okolij in nato prehodu na produkcijo v izvornem Linuxu ali Kubernetes.
Skaliranje: več grafičnih procesorjev, RCCL in orkestracija
Če je vaš cilj porazdeljeno usposabljanje, bodite pozorni na RCCL in konfiguracijo z več grafičnimi procesorji. ROCm 6.1.3 je uvedel natančnejšo podporo za več grafičnih procesorjev, ROCm 7 pa dodatno izpopolnjuje komunikacijsko plast za zmanjšanje latenc.
Pri uvajanju Kubernetes operater GPU pomaga z gonilniki, izvajalnim okoljem in vozlišči, pripravljenimi za delovno obremenitev. To zmanjša ročno delo v gručah in zagotavlja ponovljivost za ekipe in okolja CI/CD.
Stroški, licence in scenariji uporabe
Ena od prednosti ROCm je enačba stroškov in koristi. Pomanjkanje zaprtih licenc, je izvedljivo vzpostaviti bolj ekonomične grozde umetne inteligence s strojno opremo AMD in odprtokodno programsko opremo, kar je zelo privlačno za laboratorije, univerze in mala in srednje velika podjetja.
To ne pomeni, da je ROCm veljaven za kateri koli tok. Če ste odvisni od lastniških orodij z ekskluzivno podporo za CUDANaleteli boste na ovire. Če pa se vaš sklad vrti okoli PyTorcha, TensorFlowa, ONNX-a in ekosistema Python, je teren ugoden.
Praktični nasveti za začetek in izogibanje pastem
Če ste novi pri AMD-ju, najprej poskusite z manjšimi modeli. Potrdi, da se grafična kartica in gonilniki dobro odzivajo in da so knjižnice (MIOpen, RCCL, BLAS/FFT) prisotne.
Če že uporabljate PyTorch ali TensorFlow, poskusite prenesti nekritične module s HIP, preden premaknete vse. Zazna odvisnosti, specifične za CUDA ki zahtevajo ročno prilagajanje in merijo učinkovitost z zmanjšanimi formati in brez njih (FP16/FP8/FP6/FP4).
Za grozde načrtujte topologijo in komunikacijo že od samega začetka. RCCL in dobra medsebojna povezovalna struktura naredite razliko v velikem obsegu. Če delate na velikih LLM-jih, razmislite o grafičnih procesorjih z veliko VRAM-a.
Skupnost odprte kode raste, mesta, kot je r/StableDiffusion, pa so stalen vir idej in orodij. Izkoristite tehnične niti in repozitorije s skripti da pospešite svojo uvedbo ali odpravite redke težave.
Glede na vse zgoraj navedeno je slika jasna: ROCm se je iz mlade alternative razvil v zmogljivo platformo, z različico 7, ki močno izboljšuje zmogljivost (FP4/FP6), komunikacijo in podporo, različico 6.1.3, ki je odprla vrata več grafičnim procesorjem in WSL2, ter dokaj preprosto namestitveno potjo v Ubuntu. Pri prenosu iz CUDA ali na neuradne grafične procesorje obstajajo omejitve združljivosti in nekaj ročnega dela, vendar v zameno ponuja svobodo, prihranke in izkušnjo, ki že tako diši po pravi produkciji.
Strasten pisec o svetu bajtov in tehnologije nasploh. Rad delim svoje znanje s pisanjem in to je tisto, kar bom počel v tem blogu, saj vam bom pokazal vse najbolj zanimive stvari o pripomočkih, programski opremi, strojni opremi, tehnoloških trendih in še več. Moj cilj je, da vam pomagam krmariti po digitalnem svetu na preprost in zabaven način.