Stephen Jones は、以下の主任ソフトウェア エンジニアです。 SpaceX社 元 CUDA アーキテクト NVIDIA
この投稿では、スティーブン ジョーンズが、非常に興味深いテクノロジーの側面についての見解を述べています。 Rescale AI Physicsのユーザー。 主要な貢献者として CUDARescale のユーザーの多くは、GPU テクノロジに関する彼の研究を活用して分析を実行しており、CUDA ライブラリを使用して独自のコードを作成しているユーザーもいます。個人的な観点から言えば、一般的なソフトウェア エンジニアリングに数年間携わった後、エンジニアリング ソフトウェアの仕事に戻った私は、近年の技術の進歩と、将来の傾向について Stephen にいくつか質問してみるのは興味深いだろうと考えました。
本格的に始めるために、私は並列コンピューティングの進化から始めました。
Stephen Jones: 約 10 年前、すべてのコンピューティングは並列コンピューティングになりました。 プロセッサーは個別に高速化を停止し、 ムーアの法則 プロセッサを追加することで継続されました (コンシューマ プロセッサにはすべて少なくとも 4 コアがあり、サーバーには 16 以上のコアが搭載される可能性があります。したがって、非並列プログラムはマシンの 25% を超えて使用しません)。 並列プログラミングはいくつかの基本的な点でシリアル プログラミングとは異なり、それがはるかに困難であるため、重要な効果が生じると思います。 私は、将来 (原文のまま) 並列プログラミングが人間ではなくツール (コンパイラー、ライブラリ、自動プログラミング言語) によって行われるようになると予想しており、これはすべてのプログラミングへの取り組み方に大きな変化をもたらすことになるでしょう。
Rescaleには多様な顧客基盤があります。業界や企業におけるパートナーの多くは、 アカデミー オンプレミスのハイパフォーマンスコンピューティング (HPC) クラスターを操作します。Stephen に、彼にとって HPC とは何を意味するのか尋ねました。
スティーブン・ジョーンズ: これは最先端のコンピューティング技術を網羅する一般的な用語だと私は考えています。宇宙は複雑で、それを正確にモデル化できるところまでにはほど遠いため、より大型のコンピューターに求められるタスクは常に存在します。テクノロジーが進歩してコンピューターの能力が上がると、これまで取り組めなかった新たな問題が解き放たれるのです。 (HPC) 今後も存在し続け、ニッチな市場であり続けるでしょう。一方で、前述した宇宙の複雑さのため、すぐに「十分に強力な」デスクトップに取って代わられることはないでしょう。ハードウェアとソフトウェアの両面で、非常に興味深い技術インキュベーターとしての役割を果たしています。
エンジニアと科学者 世界中で使用されている リスケールプラットフォーム 組織が提供できるリソースを補完し、拡張するためです。 私は Stephen に、HPC におけるクラウド テクノロジの利用についてどのように考えているか尋ねました。
Stephen Jones: これは過去 10 年間で大きな成功をもたらしたものの 100 つです。 特に Amazon のクラウドは状況を一変させるものであり、(私の考えでは) コンピューティングの世界で最も驚くべきものの XNUMX つです。 現在では、スタートアップに資金を調達しようとするときに、「私のインフラストラクチャは AWS なので、ハードウェアにはお金をかけていません」と言うことが許容されています。 特に興味深いのは、HPC だけでなく基本的な IT インフラストラクチャも可能にするため、これまで小規模な企業には手が届かなかった大規模なコンピューティングを使って新しいことを行うスタートアップ企業が見られるようになることです。 事実上、これまでの XNUMX 倍の人員が HPC 向けに開発できるようになり、それによって新しい興味深いアプリケーションが生み出されなければなりません。
Rescaleのアプリケーションエンジニアとして、私は最近CUDAと NVIDIA Rescale プラットフォーム上のハードウェア。私は Stephen に CUDA での作業経験について尋ねました。
Stephen Jones: 私は何年も CUDA のアーキテクトを務めていたため、これについて客観的になるのは明らかに困難です。 パラレル プログラミング言語と HPC プログラミング言語でよく見られることの XNUMX つは、非常に「最小公倍数」のアプローチです。XNUMX 台のマシンでのみ実行され、別のマシンを購入できなくなる非常に複雑なコードに投資したい人はいません。 結果は、「委員会によって設計された」問題と、「マスター・オブ・ゼロ」の結果です。 CUDA が興味深いのは、意図的にその逆の極端な点にあるためです。CUDA は XNUMX 種類のマシンでのみ動作しますが、すべての人を満足させようとすることで制限されないため、限界を押し広げることができます。 NVIDIA GPU が HPC で広く普及しているため、現在は順調に推移しています。 その結果、CUDA は多くの新しいプログラミング モデルの側面を最初に調査することになります。 多くの CUDA 機能は、有用であることが判明したため、何らかの形 (OpenCL、OpenMP、Renderscript) で他の言語に導入されています。 CUDA を本当に可能にするのは、言語設計者がチップ設計者から (同じ会社に所属しているため) ハードウェア サポートを受けることができるため、独立した言語設計者には開かれていない新たな制限を押し上げることができることです。 CUDA には多くの革新的な機能があり、この密接な連携の結果、将来的にはさらに多くの機能が登場します。
新しいコードで気づいたことの XNUMX つは、科学プロジェクトで Python を賢明に使用することで研究者が生産性の向上を達成していることです。 私はスティーブンに、生産性を最大限に高めて実際の作業を行えるようにしたい科学者やエンジニアにどのようなツールの組み合わせ(言語を含む場合もある)を推奨するかを尋ねました。
Stephen Jones: 私は常に最高レベルの言語で、可能な限り少ない行数でソフトウェアを書くことを信じています。 高性能コードであっても、多くの場合、コード行のわずか 10% がサイクルの 90% を消費しています。 この 10% がよく知られたアルゴリズム (線形代数、フーリエ変換など) を実装している場合は、多くの場合、他の人が微調整した既製の実装を使用できます。
これは、多くの場合、SciPy や NumPy などの高級言語で *すべて* を実行する必要がなく、基盤となるライブラリを使用して面倒な作業を実行できることを意味します。 そうしないと気が狂っていると思います。これにより、コードの行数が減り、バグが減り、より保守しやすくなります。そして業界にとって最も重要なことは、難解な知識を持っている人よりも、Python を知っている人のほうがはるかに簡単に雇用できるということです。レベルの並列言語。 これにより、コードベースの寿命が大幅に向上します。
興味深いのは、CPU を大量に使用する操作が標準のアルゴリズムではない場合です。 その後、それらを実際に自分で実装する必要がありますが、繰り返しになりますが、問題なく使用できる最高レベルの言語をお勧めします。 これには、保守性<->パフォーマンスのバランスについて考えることが含まれます。より保守可能で将来性のあるコードを書く代わりに、ピークのパフォーマンスに達しないことを受け入れることもできます。 たとえば、NumPy を使用すると、Python フレームワークで CUDA 関連の並列化 (原文どおり) を行うことができ、わずかな労力でかなりの高速化が実現します。
SpaceX では、残りの 75% ではコードの開発がはるかに難しくなり、最も重要なことに、将来性が大幅に低下するため、私はピーク パフォーマンスの約 25% を目標にしています。 数年ごとに新しいアーキテクチャに合わせてコード化しなければならない場合、その 25% を追加する価値はまったくありません。 確かに、パフォーマンス コードには Python を使用しませんが、C++ では複雑すぎるさまざまな処理に Python を使用しています。
開発ツールについては、どの言語やプラットフォームに最適な診断ツールがあるかを常に検討しています。 デバッガー、プロファイラー、分析により、開発時間の文字通り 50% を節約できます。 したがって、それと高級言語の組み合わせが私が最初に取り組むことです。 ご存知のとおり、私は Python のファンですが、それはユースケースによって異なります。 Matlab にも優れたツールがありますが、フレームワークにロックインされています。
他の種類の言語について一言。 最近、Haskell が特に注目を集めています。 関数型プログラミング言語として、命令型言語よりもはるかに自然に並列化が行われ、興味深いものになっています。 学界はこれに非常に興味を持っていますが、産業界で活用するには人材プールが小さすぎると思います。優秀な人材を雇用するのは、Python にとっては十分に困難であり、ましてや C にとってはなおさらです。
私は続いて、エンジニアリング分析で今でも頻繁に使用されている言語である FORTRAN の将来について彼にどう考えているかを尋ねました。
Stephen Jones: コンピュータの実行能力が低下すると、この問題はなくなるでしょう。 これは本質的に並列ではないため、MPI などのフレームワークをラップする必要があります。 私は、より大型の (エクサスケールの) コンピューターでは MPI でプログラムすることがますます困難になり、これが FORTRAN の終焉を示すものになると考えています。 C とは異なり、FORTRAN は低レベルのプログラミングには存在しないため、最終的に埃っぽいデッキが書き直されると消えていくでしょう。
私の水晶玉を見つめての最後の言葉: プログラミングの未来はソフトウェア作成ソフトウェアにあると思います。 つまり、私がプログラムを書いてくれるプログラムを書きます。 コンパイラはすでに私たちのために多くのことを行ってくれます。 Ruby のような高レベルのフレームワークは、Web プログラミングのあらゆる種類の複雑さを管理します。 自動並列化 (原文どおり) は現在大きなバズワードです (まだ普及していませんが)。 コンピューターのプログラミングはますます難しくなり、他のコンピューターの助けを借りてのみプログラムを実行できるようになるでしょう…
私が「本物のエンジニア」と呼んでいる人たちとの仕事の話題に移りますが(告白しますと、私の最初のエンジニアリングの仕事は船舶修理工場でした)、スティーブンも同様に前向きでした。
Stephen Jones: 純粋な機械工学の環境でソフトウェア担当者として働くのは本当に興味深いことです。コンピューターは他の実験装置と同じようにツールであり、コンピューターなしでエンジニアリングを行うことは誰も想像できません。しかし、私が見たエンジニアリング会社の非ソフトウェア エンジニアは、コンピューターをツールのように使用しています (つまり、かなりソフトウェア的に洗練されていない方法で使用しています)。
最後に、ソフトウェア エンジニアリングとそのエンジニアリングとの関係は、私にとって非常に興味のあるトピックです。 私はスティーブンにこれについての考えを尋ねました。
スティーブン・ジョーンズ: これもまた大きなアイテムです。 私はSpaceXで毎日そのギャップを埋めようと努めています。 私は数か月前、エンジニアリング シミュレーションに関するカンファレンスに参加し、十数人に会ったのですが、全員が驚くほど似たような話をしていました (私もそうでした)。ソフトウェアに関する理解の欠如は広く普及しており、エンジニアにとっては大きなハンディキャップとなっています。 私たちは、コンピュータの使用やプログラミングよりもはるかに優れた技術者をエンジニアに教育する必要があります。それは、仕事中に簡単に使い方を習得できるドリルやノコギリのようなものではありません。 この教育の提供に時間を費やした企業は、エンジニアリングの革新と生産性において明らかな利益を得ることができます。 ちなみに、これは工学だけでなく、すべての科学に当てはまります。 NVIDIA の HPC で働いていた私は、非常に複雑なスーパーコンピューターを使って最先端の科学を行うのに苦労している無数の優秀な物理学者、化学者、生物学者に会いました。 最も成功したのは、プログラミングをただ単にうろうろするのではなく、積極的に学んだ人たちでした (原文どおり)。 多くの場合、経験の浅い物理学者のほうが、コンピュータをより効率的に使用できるため、より良い仕事をします。 科学でも工学でも、ソフトウェアは「純粋度が低い」という考え方が存在することは間違いありませんが、人々は子供の頃からコンピュータを身近に感じて育っているため、これは世代的なものであることが判明するのではないかと私は考えています。
スティーブンのユニークな視点に感謝します。 で Rescale AI Physics、私たちは科学者やエンジニアが必要とするスケーラブルなコンピューティング リソースを提供することで、彼らが目標を達成できるよう取り組みを続けます。
