【GPGPU】くだすれCUDAスレ part8【NVIDIA】 [無断転載禁止]©2ch.net
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
CUDA使いが優しくコメントを返しますが、
お礼はCUDAの布教と初心者の救済をお願いします。
CUDA・HomePage
ttp://developer.nvidia.com/category/zone/cuda-zone
関連スレ
GPGPU#5
http://peace.2ch.net/test/read.cgi/tech/1281876470/
前スレ
【GPGPU】くだすれCUDAスレ【NVIDIA】
ttp://pc12.2ch.net/test/read.cgi/tech/1206152032/
【GPGPU】くだすれCUDAスレ pert2【NVIDIA】
ttp://pc12.2ch.net/test/read.cgi/tech/1254997777/
【GPGPU】くだすれCUDAスレ pert3【NVIDIA】
ttp://hibari.2ch.net/test/read.cgi/tech/1271587710/
【GPGPU】くだすれCUDAスレ pert4【NVIDIA】
ttp://hibari.2ch.net/test/read.cgi/tech/1291467433/
【GPGPU】くだすれCUDAスレ part5【NVIDIA】
http://toro.2ch.net/test/read.cgi/tech/1314104886/
【GPGPU】くだすれCUDAスレ part6【NVIDIA】
ttp://peace.2ch.net/test/read.cgi/tech/1348409867/
【GPGPU】くだすれCUDAスレ part7【NVIDIA】
http://echo.2ch.net/test/read.cgi/tech/1416492886/ cudaはグラボ2枚差し使えますか?
コンシューマ向きのグラボだとvramが24Gですが
48Gになれば購入したいです。
そもそもvram24Gもってる人でどんな処理をしてるのか
知りたいです。例えば深層学習で〇時間を▽というグラボで
こんだけ時間がかかるとか。
そういうデータがほしいです!
よろしく! >>252
A6000 (48GB) 使ってるけど pix2pix とかやったら画像1000枚でも数日かかるよ。
vgg16 とか mobilenet で数時間の学習が多いけど、画像集めるのに一週間かかる。 積分する関数をCUDAで書こうと思っています
リストのIntegrateのように関数テンプレートにすることで,
通常のC++であれば
呼び出し時に
被積分関数(ここではSinc)として
関数へのポインタでも,
ラムダ式でも
直接関数名を書いてもうまく動作させることができるのですが,
CUDAではうまくいかないようです.
もちろんIntegrateの中で被積分関数を直接記述すれば問題なく動作するのですが,
これだと毎回エディタでIntegrateの修正が必要になってきます.
呼び出し時の引数として被積分関数を与えるにはどーすればいいんでしょうか? プログラム リストです
__global__
void
//__device__
//float
Sinc() {
printf("Ahyahya\n");
//return start;
}
template< typename Functor>
__global__
void
Integrate(Functor func){
func <<<1, 1024>>> ();
//Sinc << <1, 1024 >> > ();
__syncthreads();
}
int
main() {
Integrate <<<1, 1>>> (0, 10, Sinc);
//Sinc << <1, 1024 >> > ();
} main 中
誤 Integrate <<<1, 1>>> (0, 10, Sinc);
正 Integrate <<<1, 1>>> ( Sinc );
プログラムリストのコピペ時 0,10, を消すの忘れてました すまんが、MacやdGPUのないWindowsノートでコード書けたらいいなと思うんだけどさ
CUDAを扱えるオンラインIDEとかエミュレーターとかなんかないもんなのかな? >>256
最近CUDA使ってないから間違ってるかもしれんが、__global__がついた関数からは__device__しか呼べなかったきがする。__global__関数から__global__が呼べるかちゃんとマニュアルで確認しよう。 >>258
google colaboratoryのGPUインスタンスで昔ちょっとしたCudaのコードを動かしたことはある。
基本はpythonで動かすことが前提なのでちょっと面倒なことしないとCのコードは動かせなかった。
後有料アカウントしないとGPUインスタンスに制限時間がつくかも。 >>259
いや__global__から__global__を呼ぶことは何も問題ない
>>256のリストにある関数Integrateの中でコメントアウトしてる部分がそれ,
直接呼ぶのは何も問題ないのに, ファンクタとして間接的に呼べないんで困ってる せんきゅー!
Colaboratoryは怪しいことをしてると警告が出てビビっちゃうし、AWSは高いし、コードを書く時点で契約するには勇気がいるな・・・・ >>264
Linux使うのでもよかったら一万円ぐらいのjetson nano買えばCuda使えるよ んなもん使うぐらいならふつーにx64でコード書いたほうがよっぽどいい
エンベ用途でもないのに何を好んでわざわざワンボードマイコンで計算せにゃならんのだ >>266
小さいものを愛でる気持ちがないのかな?
お金が掛からないしGPIO使えるし。
GPUの性能が今売ってるGPUよりかだいぶ低いけど。
普通のPCからクロスコンパイルもできるらしいよ。 文脈から想像するに>>264はCPUよりGPU計算が速いことを期待して
ノートからGPUを使ってみたいんだろうよ
それを単にCUDAが乗ってるだけでx64のマルチコアに遠く及ばないワンボードマイコンごときのGPUを何のためにわざわざ使う必要があるんだ?
組込用途とかでこれまでFPGA起こしたりASIC起こしたりしてた部分で
ワンボードマイコンのGPUが代わることもあるだろう.
実際、産業機械にRasPiをまんま組込む用途も増えてる
しかし、どーかんがえてもそっち系じゃない>>264にワンボードマイコンすすめてどーすんだって話 コードを手元で書いて、実際に計算する際は実機を用意するかAWSを借りるつもりでいます
ただコードを書くだけの段階でAWSを借りると負担なので、何かいい方法があればいいなと思った次第です >>270
https://www.%61mazon.co.jp/dp/B085TH77RT
カードに安いやつかっても10万円コース
AWSなくてもいけるが電気代要るわな
それとThunderboltがボトルネックになることはほぼ確定 sharedメモリは
https://zukaaax.com/archives/530
ここの最後に書いてる
>シェアードメモリを使用しなくても高速にできるようにする方針
これホント? Dynamic Parallelism で親スレッドと子スレッドの属するブロックを
同一ブロックに属するような指定はできますか?
同一ブロックにして親スレッドが確保したShared Memory を子スレッドからアクセスしたいんだですが. 訂正です
○同一ブロックにして親スレッドが確保したShared Memory を親スレッドからアクセスしたいんですが.
myKernel<<<gridSize, blockSize, nI*sizeof(int))>>>(...);
親スレッドで確保して子スレッドに引き渡すnI*sizeof(int)サイズのshared memoryですが
この領域を親スレッドからアクセスできないんでしょーか? 事故レスです
そもそも親子スレッド間でグローバルメモリのローカル変数の参照渡しが無理らしい
ローカル変数なんかやめにして、大域変数にして__device__つけろとorz
当然のごとくshared memoryもだめっぽい
C++でUser I/Fを使いやすく仕上げたいと思ってたけど
そーゆーおしゃれなことは
いろんな制限が頭に入っるまでは素直にゴリゴリCで書いてたほうがよさそう __global__のなかでnew,delete使えるので
もしやと思ってmake_unique使おうとしたらだめだった make_unique以前にstd::unique_ptrの時点でだめだったわ
cudaMalloc使ったunique_ptrバージョンはネットで公開してる人いるのめっけた
https://proc-cpuinfo.fixstars.com/2019/02/cuda_smart_pointer/
host側からgpuメモリ確保したいならコレでいいけど
__global__の中で使うmalloc,freeはGPUメモリを使うバージョンが正しくリンクされるので
malloc, free使って各関数は__device__指定すれば,
cuda::unique_ptrで正しく使えるのかな? cudaMallocやcudaFreeってのはホスト側からGPUとのインターフェース用として
プログラムの中で1度呼ぶだけなんだよね
GPUへの初期設定メモリ inmem
GPUの計算結果 outmem
として
ホスト側で
kernel<<<1,1>>>(inmem, outmem);
を立ち上げる際 この前後でcudaMalloc, cudaMemcpy, cudaFreeを使うだけ
kernel関数で一旦制御をGP側に移したあと
おもむろにDynamic Parallelism を使ってkernel関数の中からマルチスレッドを起動する方がよっぽど書きやすい
new/deleteは__global__関数のなかで自由に使えるので
cudaMalloc/cudaFreeにuniqu_ptr使えてもあんま有り難みは少ないな 質問です。
cpuは64コア、gpuは年末のvram48ギガ2つ、メモリはddr5 256g
これ以上は経済的事情により無理ですw
vram48ギガ二つで深層学習したいんですけど
どの規模でどのくらいのデータ処理ができますか?
マルチcudaで処理速度はどれくらい高速化できますか?
CUDA Python (Numba) を使用して気象分析の分野で 200,000 倍高速化する
こういう記事がありました。
このようなデータがありましたが20万倍以上の高速化ってできますか?
きになります。もしグラボがvram48一つと二つで差がなければ
vram一つにしたいと思います。 >>279
VRAM48Gもあれば、相当の大きさのモデルでも、バッチサイズある程度取れると思う。
2枚にするなら、NVLINKやったかのボード間通信できるやつやらないと、
同時に使ってバッチサイズ倍にするぜってやつが遅い。
一枚でもいいんでない?って気はする。
何と比較して速くしたいのか分からんけど、3090ti(24GBメモリ)1枚でも普通のモデルなら
ちゃんと学習できる。長いと数日学習に時間がかかるけど。
爆速学習したいなら、クラウドで大富豪するしかないぞ。
具体的に動かしたいモデルとかあるの? >>282
返信サンキュー!情報ありがとさん!!
気象予測がしたくて(とある記事に20万倍の高速化と書いてあった)
クラウドいいですね〜!
どうしてもpythonのnumbaがやりたくて!
ちなみにpycharmかgoogle coalb pro plusはどちらが良いのでしょうか? >>254
cudaつかっても1週間もかかるんですか? 気象予測て流体力学だろ
学習とかの前に基礎方程式がわかってるものは
粒子フィルタで検討したほうがいいんじゃないの?
もっぱら線形微分方程式に使われるカルマンフィルタを拡張した
アンサンブルカルマンフィルタで見たことあるけど
今だと線形非線形にかかわらず利用可能な粒子フィルタに頼るほうが簡単だと思うけど RTX 4090 Ti
48GB
GDDR6X
これ買う人いますか? >>289
その辺のが一般化してきたら
albertを使った実装例とかがもっと増えるか
ま、もっと高性能なのがクラウドに多数デプロイされそうだけど RTX 4090 Tiを複数差せばおもしろそうやん? 600WのTBPで動作すると予想されます。
だそう。つまり3枚差せば1800wですね。
つまり電源ユニットを2枚で4000ワット以上必要ですね。
電源ユニットが3000wとか4000wとかでないのかな?
困るよね。 .cuファイルで何とか普通のメモリと
GPUのVRAMを同居させて使えるなら
容量の大き過ぎる計算でもスピードは落ちるが
普通のCPUだけの時より速く計算できる、
とか出来たらいいんだけど、まず無理なんだろうなあ
(沖電気はそういうのを上手くやったらしいが詳細が分からない) 何を問題視してるのかよくわからんけど
例えばmkl入れるとかじゃ駄目なのか? >>294
LinuxならUnifiedMemoryでできるな。 ホスト側のメモリをピンして使うことはできるけど多分そういう用途ではないよなあ >>294が言ってるのはOversubscriptionだろ。 C#でCUDAを使おうとして悪戦苦闘してようやくこのスレにたどり着いたのだが・・・
GPUで計算した結果をCPUに取り出すには結局どうやったらいいんだ?
検索してもサンプルプログラムはほとんど出てこないし、GPU動かして終わりでその結果を使うやり方が示されてない。
教えろくださいお願いしますだ CUDAでdll作成してC#に読み込ませる
こんだけ >>268
C言語で普通にCuda使うときだったら、GPU側にメモリ確保してGPUで計算した結果をそこに書き込む。
GPUでの計算が終わったらGPU側のメモリをCPU側のメモリにコピーするみたいな感じだ。
後unified memoryとかいうのでGPUから直接CPU側のメモリに書き込めるらしい。
C言語だったらCUDA sdkにサンプルコードがたくさん入ってるだけどね。
どういう関数使えばいいかはCUDAのドキュメントをちゃんと読めば見つけられるでしょう。 ありがとうございます。
昨日はとりあえず↓を参考にして以下のように書き換えてみたんですが、これじゃダメってことですよね?
(textBox1の結果は0のままです)
double temp = 0;
var gpu = Gpu.Default; // GPUインスタンス取得
gpu.For(0, 10, i =>
{
temp = 10;
});
gpu.Synchronize(); // ここで同期する
textBox1.Text = temp.ToString();
Alea GPUライブラリを使ってC#で簡単GPU並列プログラミング ? Crow's eye
https://kzmmtmt.pgw.jp/?p=1170
Alea GPUで簡単C# GPUプログラミング - Qiita
https://qiita.com/y_miyoshi/items/921903e3499abf18abdd Alea GPUなんて知らなかったな
で、もう使われてなくね?
それでやる必要ある? GPU使って並列計算できるってのを昨日知った初心者なんで、すいません。
「gpu 並列計算 C#」で検索してもこれしか出てこないんです。 で、あればGPUの使い方、CUDAの使い方を、まず勉強した方が良いのでは?
まだGPUとホストのメモリ間のデータ転送とか、さっぱりわからないよね cudaは別にコンパイルしてC#から呼べば?このほうが調べやすそう 趣味でやっているだけなので調べてすぐにできればいいと思ったんですよ。
>>304でGPU側で計算した結果を渡すだけなのにそれを乗せてるウェブサイトが見つからないなんて、そんな手間な作業なの? >>309
cpuとgpuで別々のメモリを見てるんで >>302 のようなことが必要です CUDA本体はC言語かC++言語で使う前提なのでそれらの言語ならサンプルコードや情報がたくさん見つかるんだけど。
C#からCUDA使うとなるとマイナーなライブラリを使うことになって情報を見つけづらいかもしれない。英語の情報までくまなく調べればそうじゃないのかもしれないが。 C#から使う場合は上にも書いた通り、cuda でdllを作成して
C#からはDllImportで読み込む そうなんですね。ありがとうございます。
ライブラリが用意されているのでそれでできないのなら何のためのライブラリなのかと素人的には感じてしまいました。 出来ないかどうかはちゃんと調べないとわからないだろう
簡単に出来るかどうかはライブラリは保証しないよ、特にC#とCUDAみたいな組み合わせだったら。
めちゃくちゃ沢山のグルーコードをC++/CLIで書かなきゃいけないのを省略してくれる、ぐらいなもんでCUDAに対する理解なしに使える代物じゃないと思うけどな。 すいません、↓にテストコードが載っていたのでそれを動かしたところ、GPUの計算結果を取り出せました。
お騒がせしました。
Alea GPUで簡単C# GPUプログラミング - Qiita
https://qiita.com/y_miyoshi/items/921903e3499abf18abdd CUDA初心者です。RTX2060 superでCUDA環境構築したいのですが、どうしてもcuda.is_availableの結果がFalseとなってしまいます。(Nvidiaのドライバ、Python・CUDA・Pytorchのバージョンを新しくしたり古くして見たり、CUDNN入れてもダメでした。)
python -m torch.utils.collect_envで読み込みした現在の環境は下記の通りとなります。Trueとさせる方法がわからず、もう自分では完全に手詰まりとなっておりますので、ご教授頂けますと大変有難いです。
C:\Users\●●●>python -m torch.utils.collect_env
Collecting environment information...
PyTorch version: 1.13.0+cu116
Is debug build: False
CUDA used to build PyTorch: 11.6
ROCM used to build PyTorch: N/A
OS: Microsoft Windows 10 Pro
GCC version: Could not collect
Clang version: Could not collect
CMake version: Could not collect
Libc version: N/A
Python version: 3.9.13 (tags/v3.9.13:6de2ca5, May 17 2022, 16:36:42) [MSC v.1929 64 bit (AMD64)] (64-bit runtime)
Python platform: Windows-10-10.0.19045-SP0
Is CUDA available: False
CUDA runtime version: 11.6.124
CUDA_MODULE_LOADING set to: N/A
GPU models and configuration: GPU 0: NVIDIA GeForce RTX 2060 SUPER
Nvidia driver version: 511.65
cuDNN version: Could not collect
HIP runtime version: N/A
MIOpen runtime version: N/A
Is XNNPACK available: True
Versions of relevant libraries:
[pip3] numpy==1.23.5
[pip3] torch==1.13.0+cu116
[pip3] torchaudio==0.13.0+cu116
[pip3] torchvision==0.14.0+cu116
[conda] Could not collect pytorchはよく知らんけど
toolkit入れた?
cuda.is_availableてtorchのメッセージだよね?
てな感じで全然情報不足だわな そうです。Torchのメッセージです。
CUDA Toolkitなら入れてますね。
現在は11.6.2をインストールしています。
以下コマンドプロンプトの出力結果。
■Nvcc -V で表示される内容
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Tue_Mar__8_18:36:24_Pacific_Standard_Time_2022
Cuda compilation tools, release 11.6, V11.6.124
Build cuda_11.6.r11.6/compiler.31057947_0
■print(torch.__version__)で表示される内容
1.13.0+cu116
■torch.cuda.is_available()で表示される内容
False
過去にcuda_11.3.1とか10.2をツールキットからインストールした事もありますが、それでもダメでした。 まずcudaは動いてるの?
devicequeryとかsampleのプログラムが動くかどうか確認して問題なければ
torch周りの問題かと ありがとうございます!
サンプル試したことなかったのでやってみました。
https://github.com/NVIDIA/cuda-samples/releases
上記サイトからCUDA Samples v11.6をダウンロードして、VisualStudio2017.slnをビルド
ビルド結果:ビルド: 175 正常終了、11 失敗、0 更新不要、0 スキップ(ただしビルド文書の中にいくつか失敗という文字あり)
deviceQueryをコマンドプロンプトから実行したところ・・・。
cudaGetDeviceCount returned 100
-> no CUDA-capable device is detected
Result = FAIL
という結果だったので、CUDA対応デバイスが検出されていないようです・・・。 あっ、ビルド結果、11個失敗しているって意味なんですね・・・。 GPUがちゃんと刺さって無いとか、電源不足とかドライバがちゃんとインストールされてないとか。 ん〜、GPU自体は認識されてるみたいなんですよね。
GPU-Zで調べてみたらCUDAのところチェック外れてたので、やはりCUDAは認識されていないみたいです。
https://gpuz.techpowerup.com/22/11/27/e6p.png
現在の電源は550Wなのですが、もうちょっと大きい容量のに変えてみて、それでダメならやはりドライバが合っていないという事でしょうか・・・。 gpu-zはハードウェア情報なのでcudaのチェックが外れてるって
何かがかなりおかしい
20年前のgeforceなら分からんでもないがRTXなら
偽物をつかまされたか、ハードウェア故障を疑った方が良い気がする まずはsystem32にnvcuda.dll があるかどうか確認するかな 316です。
Sytem32にnvcuda.dll入ってました。
やはりハードウェアの故障でしょうか? (今のGPUは約2年前にドスパラで買いました)
とりあえず電源ユニット注文しちゃったんで、電源交換&GPUも付け直してみて、それでダメだったら新しいGPU購入ですかね(T_T) グラボを3060TIに変えてみましたが、それでもGPU-ZでCUDAにチェックが入っていませんでした・・・。 接続するPCIEスロットも変えてみましたが・・・ダメでした。
グラボ上部にある補助電源?用のケーブルはちゃんと繋いでるはずなのですが、他に必要な接続とかあるんでしょうか?
現状のGPU-Zでの結果
https://gpuz.techpowerup.com/22/12/02/pn6.png OpenGL, DirectX, vulkanとかのグラフィッ関係のAPIを使ったプログラムやゲームも動かないの?
本当にハードウェア関係に問題があるんならそういうプログラムも動かないだろうけど。 他のGPU全部殺してドライバアンインストール
3060Tiのドライバ入れなおせ 316です。
思い切ってCドライブ初期化してみたらCUDA認識されました。
皆さんありがとうございました。 経験上、一番難しいと感じたのはpython
listとかタプルとかデータ型が沢山あってこの変換がやたら発生
pandaとnumpyでも型が違うとか
torchは経験ないけどtensorflowは理屈が分かればそれほど難しくないと思う >>338
普通にC++の方が難しいと思うけど、どんな言語を試した経験上なの? もしかしてCUDAでC++を覚えようとしてるの?
CUDAはCの知識でもできるけどCは? C++は変態過ぎて
経験豊富ならべつにC++かまわんが
経験無いならCからやった方が良い >>341
Cは便利じゃないけど、確実だよね。マイコンとかでC++を使うのは、開発時間が十分に取れるなら(慣れてるなら)いいけど、処理系の変な制限にハマりそうで怖くて使えないわ。 >>343
お気持ちC++実装でフル規格満たしてないとか普通にある。調べるのが手間すぎる。 フル規格を満たしてない事が普通にあるのはCも同じ
恐くて使えないのは経験が少ないからだな MSVCで作っておけば大体オッケー
g++依存は死ぬ 当然
高速処理が要求されるようなところはC/C++だよ 質問です。
cudaの9.0バージョンで
nvcc -V
このようなことをうっても、一切反応しないです。
誰か教えてえらいひとーー!