» »

CUDA: kako distribuirati program?

CUDA: kako distribuirati program?

mojca ::

V Cudi sem spisala manjso dll knjiznico za Windows (za prevajanje uporabljam CMake + VS 2019), vendar mi ne uspe ugotoviti, kako program spraviti do uporabnikov, ne da bi si moral vsak izmed njih z neta sneti se celoten 3 GB CUDA Toolkit (kar je edini zanesljiv recept, ki sem ga doslej nasla, da bo stvar delala).

Uradni viri pravijo, da mora uporabnik imeti namesceno zadnjo verzijo gonilnikov. Pri kolegu sem pred meseci namestila CUDA Toolkit 10.2. Ko sem pri sebi upgrade-ala na verzijo 11, sem mu dala svoj nov dll + dva dll-ja iz SDK-ja, vendar to ni pomagalo. DLL se je sicer naloadal, pri izvajanju kode pa je prislo do napak. Uporabniku bi dala installer, vendar ne vem, kaj je sploh potrebno namestiti, da bi stvari delale out-of-the-box. Sploh po update-ih Toolkita, ko je vajo verjetno potrebno ponoviti.

Nisem gejmer. Ce ne drugega, me zanima, kaksna je ponavadi izkusnja pri igricah. Se uporabniki dejansko potrudijo in na roke namestijo zadnjo verzijo gonilnikov, da jim igrica sploh dela?

pegasus ::

mojca je izjavil:

moral vsak izmed njih z neta sneti se celoten 3 GB CUDA Toolkit (kar je edini zanesljiv recept, ki sem ga doslej nasla, da bo stvar delala).
In tudi edini pravilni. Dobrodošla v svet nvidie ...
Btw, iz firbca, kaj pa počne ta cuda koda?

Senitel ::

mojca je izjavil:

Pri kolegu sem pred meseci namestila CUDA Toolkit 10.2. Ko sem pri sebi upgrade-ala na verzijo 11, sem mu dala svoj nov dll + dva dll-ja iz SDK-ja, vendar to ni pomagalo. DLL se je sicer naloadal, pri izvajanju kode pa je prislo do napak. Uporabniku bi dala installer, vendar ne vem, kaj je sploh potrebno namestiti, da bi stvari delale out-of-the-box. Sploh po update-ih Toolkita, ko je vajo verjetno potrebno ponoviti.

Appi prevedeni za CUDA 11 rabijo vsaj 451.22 driver. Ne rabiš celega toolkita in ne brezglavo kopirat nekih DLL-jev vsepovprek.

mojca ::

pegasus je izjavil:

In tudi edini pravilni.


Je to prvoaprilska šala?
Če bo nekdo namestil tri verzije mojega knjižnice, nekako ne morem zahtevati, da bo imel pri sebi še 3 verzije toolkita, vsak od njih težak več gigabajtov? (Na leto izdajo cca. tri verzije, torej lahko z vsako posodobitvijo moje kode pričakujem tudi novo verzijo toolkita.) Prav tako si ne predstavljam, da bi si moral sleherni gejmer za vsako igrico namestiti drugo verzijo toolkita. Tole se enostavno ne sešteje. ???

Dobrodošla v svet nvidie ...


Neke alternative CUDI baš ni? OpenCL je braindead za pisanje in napol mrtev (Apple jim je obrnil hrbet). V nekih plenicah je na vidiku HIP, ampak to je praktično "CUDA, ki jo lahko z nekaj sreče poženeš na AMD-ju", pri čemer za razliko od NVIDIAe nimaš niti magičnega knofa, da bi downloadal par giga in bi kar delalo.

GPU uporabljam za DSP.

pegasus ::

Za cuda ekosistem imaš na voljo cele tabelce kombinacij kartica/driver/cuda. Ko prevajaš cuda kodo, moraš specificirati compute capabilities, s čimer določiš, koliko star hardver in cuda knjižnico podpiraš. To potem navedeš v dokumentaciji, ki jo priložiš in od userja pričakuješ, da ima najman to nameščeno.

HIP prihaja, da ... poletel bo ko bo Frontier online naslednje leto, nakar bo rabil nekaj let da se "prime". Pričakujem da bo resno konkurenčen cudi nekje čez 3-5 let.

mojca ::

Senitel je izjavil:

Appi prevedeni za CUDA 11 rabijo vsaj 451.22 driver. Ne rabiš celega toolkita in ne brezglavo kopirat nekih DLL-jev vsepovprek.


To pomeni, da bo pri uporabniku z GeForce-em in driver-jem 451.22 delal katerikoli app, preveden s Cudo 11 ali starejšo (recimo vsaj do 10.0 ali 9.0)? DLL-jev seveda ni potrebno kopirati vsepovprek, vendar jih nekaj nedvomno potrebujem. Vsaj dokler NVIDIA pise, da "Static libraries are not supported on Windows." S Toolkitom pridejo, ce uporabnik nima toolkita, pa moram DLL-je, s katerimi linkam, menda priskrbeti sama?

To odpira naslednja vprasanja:

  • Obstaja kaksen dober nacin, da npr. v C/C++ preverim, ce je namescen dovolj nov driver, da lahko uporabniku vsaj sporocim, naj gre na to-in-to spletno strani in si sname novejsega?

  • Kam lahko uporabnika usmerim? Sem? https://www.nvidia.com/Download/index.a...

  • Lahko kje dobim listo, kateri driver je potreben za doloceno graficno kartico (GeForce, Quadro) in doloceno verzijo toolkita?

Randomness ::

Obstaja kaksen dober nacin, da npr. v C/C++ preverim, ce je namescen dovolj nov driver, da lahko uporabniku vsaj sporocim, naj gre na to-in-to spletno strani in si sname novejsega?
Možnosti imaš nebroj. Če uporabljaš CUDA Runtime API, lahko pokličeš cudaGetDeviceCount(...) in preveriš, kaj vrne. V primeru ne dovolj novega driverja, klic rezultira v cudaErrorInsufficientDriver napaki.

Lahko kje dobim listo, kateri driver je potreben za doloceno graficno kartico (GeForce, Quadro) in doloceno verzijo toolkita?
Vsaka verzija CUDA toolkita predpiše minimalno verzijo driverja, ki pa načeloma ni odvisna od grafikulje.

Zgodovina sprememb…

Randomness ::

Vsaj dokler NVIDIA pise, da "Static libraries are not supported on Windows."
Kje to piše? Jaz sem še vedno statično linkal stvari. Potem user ne rabi nič posebej instalirat, razen driverja, ki pa ga seveda že ima.

mojca ::

pegasus je izjavil:

Za cuda ekosistem imaš na voljo cele tabelce kombinacij kartica/driver/cuda.


Kul, hvala, uporabno. Je pa to precej linux-centrično. In moja mašina pravi, da ima verzijo gonilnika 27.21.14.5182 (Quadro, Pascal), česar recimo v teh tabelcah nikjer ne najdem.

Nekje sem našla navodila, naj poženem
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi" --query-gpu=driver_version --format=csv
, pa tega sploh nimam.

Ko prevajaš cuda kodo, moraš specificirati compute capabilities, s čimer določiš, koliko star hardver in cuda knjižnico podpiraš. To potem navedeš v dokumentaciji, ki jo priložiš in od userja pričakuješ, da ima najman to nameščeno.


Compute capabilities sem že določila in je recimo OK (52 60 61 75: ostale verzije verjetno nimajo smisla, karkoli starejšega je že deprecate-ano, ...), ampak to je ortogonalno in nepovezano z mojo dilemo. Pač uporabniku poveš, da starejše kartice ne delajo in je to to.

Poanta je v tem, da tudi ko mu bo enkrat že vse delalo in bo samo nedolžno posodobil knjižnico, bo morda potreben upgrade driverjev. Nekam v logiko moram verjetno vgraditi funkcijo, ki bo uporabnika prijazno opozorila, da si mora namestiti novejšo verzijo gonilnikov. Ampak za začetek moram vedeti, kako sploh ugotoviti, ali ima uporabnik primerne gonilnike (in to npr. preveriti ob posodobitvi).

HIP prihaja, da ... poletel bo ko bo Frontier online naslednje leto, nakar bo rabil nekaj let da se "prime". Pričakujem da bo resno konkurenčen cudi nekje čez 3-5 let.


Jaz rešitev potrebujem "malenkost" prej :)

Hvala za vse hinte doslej.

Randomness ::

27.21.14.5182
Aha, verjetno imaš Quadro. A to imaš Linux ali Windows mašino? Na Linuxu poženi nvidia-smi, na Windowsih pa nvidia-smi.exe. Mogoče ne iščeš v pravem direktoriju.

Zgodovina sprememb…

Senitel ::

Randomness je izjavil:

27.21.14.5182
Kje si to našla? To ne more biti verzija gonilnika? A to imaš Linux ali Windows mašino? Na Linuxu poženi nvidia-smi, na Windowsih pa nvidia-smi.exe. Mogoče ne iščeš v pravem direktoriju.

To je verzija direkt iz DLL-ov od driverja. 451.82.

In ne rabiš nvidia-smi... Kater runtime je na mašini preveriš z klicem cudaRuntimeGetVersion.

Zgodovina sprememb…

  • spremenil: Senitel ()

mojca ::

Randomness je izjavil:

Če uporabljaš CUDA Runtime API, lahko pokličeš cudaGetDeviceCount(...) in preveriš, kaj vrne. V primeru ne dovolj novega driverja, klic rezultira v cudaErrorInsufficientDriver napaki.


Perfektno, hvala! Ta hip ne morem preveriti (potrebujem eno mašino s prestarim driverjem za testiranje), ampak mislim, da natanko to reši mojo dilemo.

Vsaka verzija CUDA toolkita predpiše minimalno verzijo driverja, ki pa načeloma ni odvisna od grafikulje.


Nekaj časa sem potrebovala, da sem poštekala, da 27.21.14.5182 zares pomeni verzijo 451.82.
Mislila sem, da je malenkost odvisno od serije in da imam pač "verzijo 27".

Ampak če lahko to informacijo izvem iz cudaErrorInsufficientDriver, me sama verzija dejansko ne zanima več.

Randomness je izjavil:

A to imaš Linux ali Windows mašino? Na Linuxu poženi nvidia-smi, na Windowsih pa nvidia-smi.exe. Mogoče ne iščeš v pravem direktoriju.


DLL-je imam samo na Windowsih :)
Strange. Direktorija, kjer je nvidia-smi, ne bi našla, ga imam pa očitno v PATH-u.

Randomness je izjavil:

Jaz sem še vedno statično linkal stvari. Potem user ne rabi nič posebej instalirat, razen driverja, ki pa ga seveda že ima.


Vidim, da obstaja nekaj po imenu cudart_static.lib. Bom stestirala. Ampak kako statično zlinkaš cuFFT?

Randomness ::

Vidim, da obstaja nekaj po imenu cudart_static.lib. Bom stestirala. Ampak kako statično zlinkaš cuFFT?
Ja, vidim da statično linkanje cuFFT na Windowsih očitno res ni podprto (https://docs.nvidia.com/cuda/cufft/inde.... Kaj moreš, Windowsi so pač kar se CUDA-e tiče drugorazredna platforma. Očitno moraš v tem primeru userju priložiti pač še pripadajoč cuFFT dll. Medtem ko cudart statično linkaš tudi na Windowsih preizkušeno brez problema.

mojca ::

Hvala za hint za staticno linkanje s cudart-jem. Razlika velikosti v moji knjiznici je samo 100 kB in en problem manj, ce tole zlinkam zraven (dll je 4x vecji :) Zdaj moram samo se ugotoviti, kako tistih 160 MB za FFT malce "skompresirat" 8-) in NVidio prepricat, da vlozi nekaj developerskega casa za podporo staticni knjiznici. Ne gre samo za staticno/dinamicno. Tudi callbacki, ki bi jih potrebovala za boljso optimizacijo kode, na Windowsih niso podprti.

Morda pa na Jetsonu dela kaj bolje :)

pegasus ::

mojca je izjavil:

NVidio prepricat, da vlozi nekaj developerskega casa za podporo staticni knjiznici.
Haha, dobra šala :D

mojca ::

Zanimivo. Če linkam s cudart_static, gredo nekateri unit testi (oz. sploh rezultati) po gobe (v bufferjih so kar ničle namesto pričakovanega rezultata).
Bom drugič razhroščevala in se zaenkrat zadovoljila z dvema knjižnicama.

Randomness ::

Verjetno cufft dinamično nalaga cuda knjižnico in ti statično linkanje v tem primeru nič ne pomaga. Drugače pa ti svetujem - če se tega še ne poslužuješ - da skrbno preverjaš statuse, ki ti jih vračajo cuda klici.
error handling


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

AMD z GPUOpen odpira orodja in gonilnike za svoje grafične čipe

Oddelek: Novice / Grafične kartice
4811438 (9369) matijadmin
»

AMD je predstavil novi zverini

Oddelek: Novice / Grafične kartice
4919857 (17380) Nummy
»

Matrix multiplication program Pycuda in Mathlab

Oddelek: Programiranje
292586 (2161) Senitel
»

"display driver AMD stopped responding an has ben succefully recovered"

Oddelek: Pomoč in nasveti
474239 (3862) Machiavelli
»

Nvidia zanika podkupovanje razvijalcev iger (strani: 1 2 )

Oddelek: Novice / Grafične kartice
5818662 (17046) Bor H

Več podobnih tem