先日、同僚の Cristian が、NVIDIA が公開した CUDA Toolkit の最新バージョンの公式ダウンロードに掲載されたニュースを提供してくれました。現在の最新バージョン 10.12 が、macOS をサポートする最後のバージョンになります。 CUDA 作業ツールと NVIDIA GPU ドライバーは両方とも、Apple のデスクトップ オペレーティング システムから永久に削除されます。エヌビディアは撤退する。
歴史的には、2007 年に公開されたバージョン 2.0 が最初に macOS をサポートし、それからこの最新の 10.2 まで CUDA での作業が可能になりました。もちろん、コンピュータの内部または外部に NVIDIA グラフィックス チップセットが搭載されている限りは、です。このステップは、Apple が昨年 macOS Mojave 10.14 で開始したこと、つまりシステムでの NVIDIA GPU ドライバーのサポートを廃止したことを確認するだけです。
この措置により、Apple と NVIDIA はビジネス関係を完全に永久に閉じたようです。
しかし、 CUDA とは何でしょうか?なぜ Apple と NVIDIA は「分離」しているのでしょうか? AMD GPU への取り組みは明らかなのでしょうか?できるだけよく理解できるように、すべてを文脈に入れてみましょう。
その泥の中から…
2001 年に Apple は NVIDIA グラフィックスを搭載した最初のコンピュータを発売しましたが、その時点で Apple はすでに ATI と協力していました (ATI は 2008 年に AMD に買収されます)。基本的に関係は良好で、それは別の選択肢でしたが、2004 年に最初の問題が発生しました。NVIDIA がグラフィックス チップである GeForce 6800 Ultra DDL を提供できなかったため、Apple は Cinema HD Display モニターの発売を遅らせなければなりませんでした。このモニターでは正しく動作します。
その後、2007 年に、NVIDIA は、Early 2008 の 15 インチ モデルや 17 インチ モデルなどの一部の MacBook Pro に搭載された GeForce 8600M GT など、G84 および G86 シリーズを含むグラフィックス チップセットの出荷を顧客 (Apple を含む) に開始しました。 ”。これらのグラフィックス チップには、画像が歪んだり、線が混ざったりする欠陥がいくつかありました。画面や外部モニターに何も表示しないことさえありました。 NVIDIA に対する集団訴訟が敗訴し、 Apple はたとえ保証期間外であっても、エラーの発見から 2 年間は機器をカバーする公式交換プログラムの費用を負担しなければなりませんでした。
さらに問題が発生。同時に、NVIDIA は GPU を通じてコンピューターの通信とメモリを制御する方法を作成しました。統合コントローラーを搭載し、メモリ制御を担当するノースブリッジと、使用されていないデバイスへの入出力を管理するサウスブリッジを作成し、すべてを新しい NVIDIA コントローラーに渡すことで、グラフィック パフォーマンスを大幅に向上させました。これにより、Intel と NVIDIA の間で紛争が発生し、Apple は当時最も重要なサプライヤー 2 社の間で法廷闘争が行われ、危うい状況に陥った。紛争は 2011 年まで続き、Apple はこのテクノロジーを使用できませんでした。
これにさらに問題が加わりました。iPhone は特殊なグラフィックス チップを必要とした最初のモバイル デバイスでしたが、Apple は ATI や NVIDIA を信頼するどころか、サムスンにこれらの iPhone 用のチップを発注し、サムスンは機器の GPU も提供していました。 NVIDIA はこの争いに加わり、GPU という用語の発明者であるとしてクアルコムとサムスンを訴えました。 NVIDIA は、被告のチップを使用するすべての人がライセンス料を支払うことを意図していましたが、Apple はこれを拒否しました。繰り返しになりますが、Apple にとっては不快な状況です。
Apple と NVIDIA には過去 20 年間に対立の歴史があり、両社は自社の製品を可能な限りコントロールしたいと考えており、両社の間に悪い関係が生じていました。
そして最後に、正式な理由は、 NVIDIA ラップトップ チップのエネルギー消費量が AMD の競合製品を上回っていることです。 (一般的に) より強力であることも事実ですが、AMD がパフォーマンスに悪影響を及ぼしても消費電力の少ないチップを選択するのに対し、NVIDIA はチップの消費量と冷却のニーズを増やすことに何の問題もありません。実際、何年も前に 9600M で MacBook Pro 機器に過熱の問題が発生しました。
現在の MacBook Pro では、AMD GPU を搭載した現在のコンピューターですでに熱の問題が発生しており、 NVIDIA を使用していれば、さらなる問題が発生する可能性があります。バッテリーの寿命は短くなり、MacBook Pro の設計では、現在動作している NVIDIA GPU を都合よく冷却する機能を持たない可能性が最も高くなります。これに、電源という別の要素が追加されます。多くの場合、NVIDIA はチップに電力を供給するためにより高い電源を必要とし、これは Mac のサイズを大きくすることを意味します。
Apple が macOS Mojave への NVIDIA GPU ドライバーの組み込みを停止すると、Mac での CUDA サポートを停止するこのステップにより、両社間の関係は永久に終了します。
この歴史的な対立全体が、間接的に関連する業界標準である CUDA につながりました。計算コンピューティング用のクローズドかつ独自の NVIDIA ライブラリ。 OpenCL など、業界が作成を望んでいたオープン標準よりも実用的で強力であることが証明されているライブラリです。
Apple は、自社のシステムで制御していないクローズド ライブラリをサポートすることを好まないため、独自の Metal 標準を作成しました。しかし、CUDA はその多用途性とコミュニティのサポートにより標準となっており、それによって Apple では専門能力開発の多くについて扉が閉ざされてしまいました。しかし、 CUDA とは何でしょうか?
CUDA
CUDA またはコンピューティング ユニファイド デバイス アーキテクチャ。これは、一般的な (非グラフィックス) 操作をグラフィックス チップ上で実行できるという明確な目的を持って NVIDIA によって作成された並列コンピューティング プラットフォームおよび API です。なぜなら?これは基本的に、GPU (またはグラフィック プロセッシング ユニット) の計算能力が他の CPU よりもはるかに高いためです。計算能力と並列プロセス (複数の操作が同時に実行される) の両方において。
CUDA は、グラフィックス チップまたは GPU 上で複雑な非グラフィック計算操作を実行できるようにするライブラリです。
また、グラフィックス チップにグラフィックス以外の操作を実行させるにはどうすればよいでしょうか?画像のエフェクトとしてカモフラージュされた、計算操作としてチップに注入される小さなプログラムを通じて。有名なシェーダーについて話します。
時間が経つにつれ、グラフィック出力の変更がどのように可能になるかがわかり、数え切れないほど多くのエフェクトに適用されてきました。基本的に、これはオブジェクトまたは画像全体に適用するリアルタイム フィルターのようなものです。 GPU はそのような方法でそのようなオブジェクトの画像を表示する必要がありますが、その前に、シェーダーを適用すると、リアルタイムでフィルターを適用しているかのように、シェーダーが画像を変換します、と私は主張します。
これらは、ぼかし効果、法線マップ (光に応じて表面がどのくらい明るくなるか)、ボケ、クロマ効果、セル シェーディング(オブジェクトを見せる効果など) など、コンピュータで生成された画像をよりリアルにするためにあらゆる種類のフィルタを適用できます。絵のような平らな形状。「ゼルダの伝説、ブレス オブ ザ ワイルド」などでよく使用されます。
シェーダーは、もともと GPU によって描画された 3D オブジェクトの明るさ、色、影の正しいレベルを計算するために考案されたプログラムです。
それでは、グラフィック出力を一切変更せずに、シェーダーを介して計算を実行するにはどうすればよいでしょうか?明らかに、この API (この場合は CUDA) を通じて、実際には処理後のデータ出力のみに関心があるにもかかわらず、グラフィックスにエフェクトを適用するために GPU が計算していると信じ込ませる特定の操作を使用します。が示されています。
そしてなぜこれが行われるのでしょうか? CPU 自体ではなく GPU を使用するのはなぜですか?それは、ビデオ ゲームやプロフェッショナル アプリケーション向けに近年生み出されたグラフィック ニーズにより、GPU が進化し、複数のコアと高品質の統合メモリを備えた大規模なデータ セットを並行して処理するニーズに対応できるようになったからです。 。
これにより、 GPU は、汎用的で特化されていないコンポーネントである CPU よりも、特定のプロセスに向けて準備が整っているため、データの並べ替え、シミュレーション、機械学習など、大量のデータを扱う重いタスクでより効率的に使用できるようになりました。
CUDA 対 OpenCL
CUDA はクローズドで独自のものです。これは NVIDIA に属しており、NVIDIA のグラフィックス チップでのみ動作します。これは明らかに業界が好まないことです。
CUDA は 2007 年に登場し、それがどのように機能するかを見て、Kronos Group (OpenGL、WebGL、Vulkan グラフィック ライブラリなどの無料標準を担当する業界コンソーシアム) は、OpenCL でこれにアプローチする試みを作成しました。 OpenGL がすべてのシステムを同じ方法でグラフィカルにプログラムできることを目的としたクロスプラットフォームのグラフィック ライブラリであるのと同様に、 OpenCL はコンピューティング API (実際にはOpen Computing Languageを意味します) として標準を作成することを目的としていました。
OpenCL では、GPU 上でプログラミング計算を実行できるだけでなく、CPU、あらゆる種類のアクセラレータ、さらには DSP (デジタル シグナル プロセッサ) など、さまざまなシステム上でこのタイプの実行を可能にするというアイデアがありました。しかし、問題はいつもと同じです。より均一な操作を実現するためにハードウェアから遠ざかるほど、API とシステムの間により多くのレイヤーが存在するため、パフォーマンスが低下します。
Apple は当時 OpenCL を選択し、それが自社のシステムにおける重要な新機能として発表すると同時に、OpenGL サポートが廃止になったときに最新のデスクトップ バージョンに更新しました。現在は Metal のみに依存しており、Mac では OpenGL と OpenCL が廃止されています。
これはソフトウェアの基本的なものです。プログラムが実行されるハードウェアのできるだけ近くで、より正確な命令を使用して実行される場合、複数のステップで呼び出しを変換して適応させる必要があるプログラムよりもはるかに優れたパフォーマンスを発揮します。これをどのように理解すればよいでしょうか?たとえば、Android を見てください。これは、ほぼすべての種類のハードウェアまたはアーキテクチャ上で動作するオペレーティング システムです。そしてその中には無数のコンポーネントが含まれています。また、SDK は優れた下位互換性を実現します。なぜなら? Java 仮想マシンにマウントされているためです。番組について。
iOS のライブラリはオペレーティング システムにバイナリ コンポーネントとしてロードされ、アプリはライブラリと直接通信します。そのため、Apple がシステムの新しいバージョンに組み込んだ新機能には下位互換性がありません。しかし、これにより iOS のプロセスやメモリの使用が高速化され、より効率的になるため、iPhone が必要とする RAM は同等の Android デバイスよりも常に少なくなります。
ただし、Android はソフトウェア仮想マシンを使用します。中間コードを実行し、実行時にそれを各ハードウェアに変換することで、古いソフトウェアを古いシステム上で実行できるようにします。基本的に Google はバージョンごとに何が変更されたかを把握しており、コードが仮想マシンによってハードウェアに変換され、必要な呼び出しが検索されるときにリアルタイムで適応させます。このようにして、より最新のライブラリを取得したり、古いバージョンで期待どおりに動作するように変更したりできます。
より多用途ですが、iPhone と同じことを行うにはより多くの処理とより多くのメモリが必要です。一方、iPhone は、新しいバージョンに組み込まれている古いバージョンのシステムでは実行できません。良くも悪くもありません。それは違います。一方で得たものは、もう一方で失われ、その逆も同様です。
iOS と Android はソフトウェア アーキテクチャが異なるため、比較してどちらが良いか悪いかを判断することはできません。それらは異なり、それぞれのシステムには長所と短所があります。
本題に戻ると、OpenCL でも同様のことが起こります。OpenCL はハードウェアから遠く離れた場所にあり、特にそのためにプログラムされていないため、速度が遅くなります。 CUDA は、最大の可能性を引き出し、NVIDIA チップと直接通信するように特別に作られているため、最終的には (非公開で独自仕様であるにもかかわらず)その効率性の高さと、NVIDIA がプログラマーの要望やプログラマーの要望によく耳を傾けているため、標準になりました。ライブラリをバージョンごとに改善します。
CUDA 対 Apple
Apple が制御できない閉鎖的な独自のライブラリを好まないことはすでに見てきました。実際、彼らがシステム上で行っているもう 1 つのことは、コンポーネントのドライバーに自分たちで署名し、彼ら以外は誰も触れられないシステム レベルにドライバーを置くことです。 GPU のメーカーからドライバーをダウンロードしてインストールできる Windows とは異なります (Microsoft の署名があり、Windows では macOS ではできなかった部分に触れることができるため、動作します)。
Apple は、数がはるかに制限されたコンポーネントを扱っており、メーカーによるドライバーの作成を認証しているため、メーカーは閉じられたシステム層にアクセスできません。したがって、メーカーがドライバーを作成したとしても、インストールされているオペレーティング システムとともにドライバーを直接配布するのは常に Apple です。
したがって、NVIDIA は、一部の Mac に搭載されている GPU 用のドライバー以外は提供できません。すべて非常に古いモデルです。現時点では、GeForce GTX 680 と Quadro K5000 のみです。 Mojave 以降に NVIDIA ドライバーを自分でインストールするとどうなりますか?パッチを適用してバージョンと署名のチェックをスキップすれば機能しますが、ドライバーはシステムの閉じた層にアクセスできないため、 3D またはデスクトップのアクセラレーションは利用できません。
Mac 用の更新された NVIDIA ドライバーのパッチ適用済みバージョンをインストールすることはできますが、100% Metal に依存しているためアクティブにならない 3D グラフィックス アクセラレーションなど、システムの特定の部分が適用されません。
このページで読める Apple のドキュメントを読むと、外部 GPU をインストールするときに (実際には)システムでサポートされていないものを取り付けると、一部の Mac にはデフォルトで搭載されているため、機能しません。
macOS に付属の GPU ドライバーは、eGPU を使用するときに高性能で高品質のエクスペリエンスを提供するように設計されています (…) この強力なシステム統合により、macOS の GPU では、同じアーキテクチャを使用するグラフィックス カードのみがサポートされます。 Mac 製品に組み込まれたカード。
Windows 10 で Bootcamp を実行すると、Thunderbolt 3 経由で外部 NVIDIA RTX 2080 を搭載した 2018 Mac mini を構築し、100FPS 以上でゲームをプレイし、CUDA を使用して計算をプログラムすることができます。 macOS パーティションを起動すると、何が接続されているかさえ認識されず、デフォルトで統合された Intel 630 が使用されます。
みんなのメタル
Apple が望んでいるのは、同社のすべてのシステム (iOS、iPadOS、tvOS、watchOS、macOS) と互換性のある単一の API である独自の低レベル グラフィックス ライブラリである Metal を使用することです。すべてのシステムでまったく同じように動作し、CUDA などの計算機能も提供する C ライブラリ。計算計算および科学アプリケーション、データ処理、または機械学習にシェーダーを使用できるようにする API 。
CUDAよりも優れているのでしょうか?明らかに違います。 NVIDIA の 10 年以上の歴史、専門化されたハードウェア、開発者コミュニティのサポートは、存在してから数年も経っておらず、これらのタスクに対応する準備ができていない専門性の低い GPU を使用している Metal のようなライブラリと比較することはできません。 AMD と同様、Apple システムでのみ動作します (当然のことですが)。特定の計算タスクに役立ちますか?もちろん。しかし、それはさらに限定的です。
2 つの大企業がそれぞれの壁に囲まれた庭園を守ろうとする場合、最終的には通常合意に至らず、主な被害者は消費者です。
では、なぜ Apple はそのようなことをするのでしょうか?基本的に、彼らはまだ壁に囲まれた庭園を守っています。 macOS がより安定し、制御されている理由の 1 つはまさにこれであることを忘れてはなりません。私たちは、この庭園には欠点だけでなく多くの利点があることに気づかないほど盲目ではありません。しかし、それはシステム自体を定義するものを私たちに提供します。
では、新しいMac Proでは何が起こるのでしょうか?まあ、私たちが想像できること。 Apple は、Mojave からの NVIDIA ドライバーの公式サポートを終了しました。そして、macOS はあらゆるもののメイングラフィックス ライブラリとして Metal を使い始めました。 Catalina は、OpenGL と OpenCL のオープン計算ライブラリの両方の廃止につながりました (これらは Mojave ではすでに非推奨になっており、Apple はしばらく前から警告していました)。したがって、残る唯一のことは、Mac でサポートされている AMD GPU で Metal を使用することです。
いつか Apple が譲歩して、NVIDIA を eGPU (外部) として使用したり、NVIDIA をサポートする Mac Pro に接続したりできるようになる可能性はあるでしょうか?正直に言うと、そうすべきです。多かれ少なかれ、 CUDA は標準であり、それをそのまま無視することはできません。基本的に、私たちのシステムは非常に特殊なタイプのユーザーに対して閉じられているからです。特に機械学習について話す場合はそうです。
Metal と Apple で機械学習を実行できますか?はい、計算の高速化も可能です。 Apple はそれに取り組んでおり、Metal 用の特定のパフォーマンスシェーダも用意しています。しかし、NVIDIA とその CUDA ライブラリと比較すると、現在 Metal が提供する機能からは程遠い、真の科学的かつ専門的なアプローチではなく、既製モデルの使用に近いソリューションを扱っていると言えます。
Mac での CUDA サポートがなければ、Apple と NVIDIA は非常に専門的な開発者への扉を閉ざし、Windows などの互換性のある他のシステムを使用せざるを得なくなります。
おそらく Apple は、このタイプのプロフェッショナル クライアントに特化することに興味はないかもしれませんが、おそらく少しは扉を開くことを検討すべきであり、少なくとも、自社のマシンに NVIDIA GPU を搭載していなくても、Mac Pro や Mac Pro で使用できるようにする必要があります。 eGPU を搭載したデバイス。
NVIDIA が macOS 上で動作するドライバを作成し、CUDA Toolkit ライブラリが Mac 上で再び動作できるようにするだけで十分です。彼らは私たちに選択肢を残してくれて、それで終わりです。それは、NVIDIA チップでも Metal をサポートすることを意味します。そういうことです。皆さんが今、この対立を別の目で見て、結論を導き出してほしいと思います。これが事実です。