
昨年閉鎖寸前だったCUDA変換レイヤーZLUDAが、Phoronixの報道によると、先週、前四半期の着実な技術進歩とチームの拡大に関する最新情報を公開した。同プロジェクトは、NVIDIA以外のGPUでCUDAワークロードを実行できる機能の開発を続けているが、今のところは他の用途よりもAIに重点を置いている。また、古いCUDAベースのゲームとの互換性を確保するために必要となる32ビットPhysXサポートの有効化にも着手している。
ZLUDAプロジェクトにとっておそらく最も重要なのは、開発チームがフルタイムの開発者を1人から2人に増やしたことです。2人目の開発者であるVioletは1か月も経たないうちに参加し、特にllm.cプロジェクトを通じて大規模言語モデル(LLM)ワークロードのサポート強化において、すでに重要な改善を実現しています。
32ビットPhysX
コミュニティコントリビューターの@Groowy氏は、詳細なCUDAログを収集することでZLUDAで32ビットPhysXサポートを有効化するための初期作業を開始し、すぐに複数のバグを発見しました。これらの問題の一部は64ビットCUDAの機能にも影響を与える可能性があるため、修正は公式ロードマップに追加されました。しかしながら、完全な32ビットPhysXサポートの実現には、オープンソースコントリビューターからのさらなる支援が不可欠です。
LLM.cとの互換性
ZLUDAの開発者たちは、llm.cというテストプロジェクトに取り組んでいます。これは、CUDAを用いてGPT-2モデルを実行するための小さなサンプルプログラムです。このテストは大規模なものではありませんが、ZLUDAが通常のCUDA関数とcuBLAS(高速数学演算)のような特殊なライブラリの両方を扱おうと試みたのは今回が初めてであるため、重要な意味を持っています。
このテストプログラムは、44の異なるAPIにまたがるCUDA関数を8,186回呼び出します。当初、ZLUDAは最初の呼び出しですぐにクラッシュしていました。Violetによる多くのアップデートのおかげで、今では552回目の呼び出しまでクラッシュしなくなりました。チームは既に必要な44個の関数のうち16個のサポートを完了しており、テスト全体の成功に近づいています。これがうまくいけば、ZLUDAは将来的にPyTorchのような大規模なソフトウェアをサポートできるようになるでしょう。
ZLUDAの精度向上
ZLUDAの中心的な目的は、標準的なCUDAプログラムをNvidia以外のGPUで実行し、Nvidiaハードウェアの動作を可能な限り正確に再現することです。これは、各命令が最後のビットまで同一の結果を返すか、Nvidiaハードウェアと比較して厳格な数値許容範囲内に収まる必要があることを意味します。ZLUDAの以前のバージョン(メジャーコードリセット以前)では、特定の命令修飾子をスキップしたり、完全な精度を維持できなかったりすることで、精度が損なわれることが多かったのです。
現在の実装では、この問題の修正において大きな進歩を遂げています。精度を確保するため、PTX「スイープ」テスト(Nvidiaの中間GPU言語を用いた体系的なチェック)を実行し、すべての命令と修飾子の組み合わせがすべての入力に対して正しい結果を生成することを確認しています。これはこれまで使用されたことのないものです。これらのチェックの実行により、いくつかのコンパイラの欠陥が明らかになり、後に修正されました。ZLUDAは、すべての命令がこの厳格な検証を完了していないことを認めていますが、cvt命令など、最も複雑なケースのいくつかはビット精度で動作することが確認されたことを強調しています。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
ログ記録の改善
ゲーム、3D アプリケーション、ML フレームワークなど、あらゆる CUDA ベースのソフトウェアを ZLUDA で動作させるための基礎は、プログラムが CUDA と通信する方法のログを取ることです。これには、直接 API 呼び出し、CUDA ランタイム (またはドライバー) の文書化されていない部分、および特殊なパフォーマンス ライブラリの使用の追跡が含まれます。
最近のアップデートにより、ZLUDAのロギングシステムが大幅にアップグレードされました。新しい実装では、これまでは確認できなかったより広範なアクティビティをキャプチャできるようになりました。これには、cuBLASがcuBLASLtを利用するタイミングや、cuDNNが低レベルのドライバーAPIとどのようにやり取りするかといった、内部動作の詳細なトレースも含まれます。
ランタイムコンパイラの互換性
CUDA、ROCm/HIP、ZLUDA、OpenCL などの最新の GPU フレームワークはすべて、アプリケーションの実行中にデバイス コードを動的にコンパイルする必要があります。これにより、元のコードに変更を加えることなく、古い GPU プログラムを新しい世代のハードウェア上で正しく構築および実行できるようになります。
AMD の ROCm/HIP エコシステムでは、このオンザフライ コンパイルは、コードのコンパイル、リンク、逆アセンブルなどのタスクを処理するための広範な機能を備えたコンパクトなライブラリである comgr ライブラリ (ROCm-CompilerSupport の略) に依存しており、Linux と Windows の両方で使用できます。
ROCm/HIP バージョン 6.4 では、アプリケーション バイナリ インターフェース (ABI) に重大な変更が行われました。新しい v3 ABI では、アクションを表す数値コードが再配置されました。これにより、ZLUDA が誤った操作を誤って呼び出してしまう問題が発生しました。例えば、コンパイルではなくリンクを試行し、エラーが発生していました。Windows では状況がさらに悪化し、ライブラリはバージョン 2.9 を主張しながらも、内部的には v3 ABI を使用していたため、動作が混在していました。これらの問題も、ZLUDA チームによって最近修正されました。
Google ニュースで Tom's Hardware をフォローすると、最新のニュース、分析、レビューをフィードで受け取ることができます。「フォロー」ボタンを忘れずにクリックしてください。
アントン・シロフはTom's Hardwareの寄稿ライターです。過去数十年にわたり、CPUやGPUからスーパーコンピュータ、最新のプロセス技術や最新の製造ツールからハイテク業界のトレンドまで、あらゆる分野をカバーしてきました。