十字砲火を浴びる翻訳者たち
[Edit 3/4/24 11:30am PT: この条項はNvidiaのEULAのオンラインリストで入手可能であるが、ダウンロードしたソフトウェアに含まれるEULAテキストファイルには記載されていないことを反映するため、記事を修正した。この警告文は、インストールされたCUDAドキュメントの11.6およびそれ以降のバージョンに追加されました]。
Nvidiaは、2021年以来、オンラインに記載されているライセンス条項の翻訳レイヤーを使用して、他のハードウェアプラットフォーム上でCUDAベースのソフトウェアを実行することを禁止していますが、おそらく見落としにより、以前は警告がインストールプロセス中にホストシステムに置かれたドキュメントに含まれていませんでした。
この文言は、CUDA 11.6およびそれ以降のバージョンをインストールする際に含まれるEULAに追加された。
この制限は、インテルとAMDの両社が最近参加したZLUDAのような取り組みや、おそらくより重大なこととして、一部の中国GPUメーカーが翻訳レイヤーを持つCUDAコードを利用することを防ぐように設計されているようだ。
私たちはNvidiaにコメントを求めたが、回答が得られ次第、追加情報や説明を更新する予定だ。
ソフトウェア・エンジニアであるLonghornは、この条項に気づきました。「インストールされたEULAテキストファイルの条項には、「あなたは、SDKエレメントを使用して生成されたアウトプットのいかなる部分も、非NVIDIAプラットフォームをターゲットとするために、そのようなアウトプットの成果物を翻訳する目的で、リバースエンジニアリング、逆コンパイル、または逆アセンブルすることはできません。
この条項は、CUDA 11.4および11.5リリース、そしておそらくそれ以前のすべてのバージョンにインストールされているEULAドキュメントにはありませんでした。しかし、バージョン11.6以降にインストールされたドキュメントにはこの条項があります。
リーダーには良い面と悪い面がある。一方では、誰もがあなたを頼りにし、他方では、誰もがあなたの肩の上に立ちたがる。
CUDAで起こったことは、明らかに後者だ。CUDAとNvidiaハードウェアの組み合わせは信じられないほど効率的であることが証明されているため、大量のプログラムがCUDAに依存している。
しかし、より競争力のあるハードウェアが市場に参入するにつれて、より多くのユーザーがCUDAプログラムを競合プラットフォーム上で実行したがるようになっている。それには2つの方法がある:コードを再コンパイルするか(各プログラムの開発者が利用可能)、翻訳レイヤーを使用する。
明らかな理由から、ZLUDAのようなトランスレーション・レイヤーを使用することが、非Nvidiaハードウェア上でCUDAプログラムを実行する最も簡単な方法である。
すでにコンパイルされたバイナリを、ZLUDAや他のトランスレーション・レイヤーを使って実行するだけだ。
ZLUDAは現在、AMDとIntelの両社がさらなる開発の機会を逸しているため、低迷しているように見えるが、翻訳が実行不可能というわけではない。
中国政府が出資しているGPUメーカーを含め、中国のGPUメーカー数社がCUDAコードを実行できると主張している。
Denglin Technologyは、"CUDA/OpenCLのようなプログラミングモデルと互換性のあるコンピューティングアーキテクチャ "を特徴とするプロセッサを設計している。
Nvidia GPUのリバースエンジニアリングが難しいことを考えると(Nvidia GPUのアーキテクチャに関する低レベルの詳細をすべて把握している場合を除き)、おそらくここでも何らかの翻訳レイヤーを扱っているのだろう。
中国最大のGPUメーカーの1つであるMoore Threads社も、CUDAコードが同社のGPUで動作するように設計されたMUSIFY翻訳ツールを持っている。
しかし、MUSIFYが完全な翻訳レイヤーの分類に入るかどうかはまだわからない(MUSIFYのいくつかの側面はコードの移植を含む可能性がある)。
そのため、Nvidiaによるトランスレーション・レイヤーの禁止が、これらの取り組みに対する直接的な反応なのか、それとも将来の開発に対する先制攻撃なのかは、完全には明らかになっていない。
明白な理由から、トランスレーション・レイヤーを使用することは、特にAIアプリケーションにおいて、アクセラレーテッド・コンピューティング分野におけるNvidiaの覇権を脅かすことになる。
これが、Nvidiaがトランスレーション・レイヤーを使用して他のハードウェア・プラットフォーム上でCUDAアプリケーションを実行することを禁止する決定を下した背景にあるのだろう。
既存のCUDAプログラムを再コンパイルすることは完全に合法である。
これを簡単にするために、AMDとIntelの両社は、それぞれCUDAプログラムをROCm(1)とOpenAPIプラットフォームに移植するツールを用意している。
AMD、Intel、Tenstorrent、その他の企業がより優れたハードウェアを開発するにつれて、より多くのソフトウェア開発者がこれらのプラットフォーム向けに設計するようになり、NvidiaのCUDA支配は時間の経過とともに緩和される可能性があります。
さらに、特定のプロセッサ向けに特別に開発されコンパイルされたプログラムは、必然的に翻訳レイヤーを介して実行されるソフトウェアよりも優れた動作をするようになるため、AMD、Intel、Tenstorrent、およびその他の企業にとっては、Nvidiaに対する競争力が高まることになります。
GPGPUは依然として重要で競争の激しい分野であり、今後の状況の進展に注目していきたい。
解説:
CUDAのソフトウェア翻訳レイヤー=ZLUDAのような仕組みのことです。
わたくしも消える前にZLUDAをテストしてみる予定ですし、うまくいったらいつも通りのポータブル版にして出そうかなと考えていました。
しかし、ZLUDA自体は配布物に含めず、bitsadminでダウンロードしてその場で展開する形にする予定です。
このような形であれば、ZLUDAのリポジトリが消滅した時点で終わりだからです。
何らかのトラブルになれは、ZLUDAの配布者が交渉に応じなかったとしてもgithub側で対応するはずで、そうなったらリポジトリが閉鎖されるはずですので、この対応で問題ないかなと思っています。
問題自体に関してはZLUDAが話題になった時点で、redditでこの事実が指摘されており、わたくしもXにて引用ツイートしています。
ZludaはWindowsでの動作報告がかなり入っていますが、nvidiaのライセンスに抵触している可能性が高いので、使われている方は注意してください。
いつなくなってもおかしくないです。
ソースhttps://t.co/Wln0Ww5l0v— Lisaちゃん@PC自作 (@KotoriKanase) February 27, 2024
使う側としては使える時まで使うという対応でよいと思います。
影響力の大きい個人・メディアだとこれだと問題かもしれませんが、少なくとも一般の個人が対応するのは問題が確定した後でよいのではないでしょうか。
AMDはこの懸念が解決できなかったのでZLUDAへの投資をやめたといわれています。
やはり、AMDが公式で推進している仕組みはROCm(HIP)であり、ライセンス上問題なく、CUDAとの互換性をある程度維持しているのも(Radeon用では)HIPだけです。
ROCmはオープンソースであり、およそ3-4か月に一度アップデートされるAMDが一番力を入れているソフトウェアです。
フルでインストールすると20GB以上ある巨大なソフトウェアの集合体です。
現時点では不具合があっても将来的に解決される可能性もかなり大きいです。
MI300A/Xというドル箱の屋台骨であり、ほかの製品とは本気度が全く違います。
そのおこぼれをいただくというのが一般のRadeonユーザーにとっては一番利点が多いです。
AI/MLのためにRadeonを選ぶのは今のところおすすめしがたいですが、Radeonを持っている人がAI/MLをするなら、ROCmが一番の近道であることだけは指摘しておきます。
わたくしの配布しているスクリプトを実行すれば何度かコマンドを打ち込むだけでセットアップできますので、ぜひ活用してください。
もちろんGPGPUを使用する部分に関してはコンパイルが必要ですが、ひと手間かかる仕組みによってライセンス上の問題をクリアしているのでしょう。
当初Intelもかかわっていたようですが、この懸念が解決できなかったのでしょう。
早々に放棄しています。
WindowsでRadeonがCUDAのAI/MLフレームワークが使用できる今のところ唯一の仕組みですが、非常に残念ですが、長く公開はされないでしょう。
元の記事を見るとnVIDIAもこの問題に気が付いており、CUDAというドル箱を他社に開放するつもりがない以上、何らかの措置をとるのも時間の問題といえます。
テストしてみたいと思っている方は、とりあえず先にダウンロードしておいたほうが良いと思います。
現時点でも機能は十分ではないようですので、極めて実験的な試みということは念頭に置いておきましょう。
Radeonに残されている可能性の一つとしてはとても面白いソフトウェアですが、やはり王道的な方法はAMDが公式で推進しているROCmだけです。
また、将来的にCUDAの機能を超える可能性があるのもROCmだけでしょう。
わたくしも好き好んでLinuxを使っているのではなく、Windowsでは実現不可能なのでLinuxでROCmを使っているということだけはお断りしておきます。
特にWindowsが嫌いであるとかそのようなことはありません。