SpaceX のリード ソフトウェア エンジニア Stephen Jones による業界の視点

スペース
Stephen Jones は、以下の主任ソフトウェア エンジニアです。 SpaceX社 元 CUDA アーキテクト NVIDIA
この投稿では、スティーブン ジョーンズが、非常に興味深いテクノロジーの側面についての見解を述べています。 Rescaleのユーザー。 主要な貢献者として CUDARescale のユーザーの多くは、GPGPU テクノロジに関する彼の研究を利用して解析を実行しており、CUDA ライブラリを使用して独自のコードを作成している人もいます。 一般的なソフトウェア エンジニアリングに何年も携わった後、ソフトウェア エンジニアリングの仕事に戻ってきた個人的な観点から、近年の技術の進歩と、将来の傾向についてスティーブンがどのように見ているかについてスティーブンに質問してみるのは興味深いだろうと判断しました。
本格的に始めるために、私は並列コンピューティングの進化から始めました。
Stephen Jones: 約 10 年前、すべてのコンピューティングは並列コンピューティングになりました。 プロセッサーは個別に高速化を停止し、 ムーアの法則 プロセッサを追加することで継続されました (コンシューマ プロセッサにはすべて少なくとも 4 コアがあり、サーバーには 16 以上のコアが搭載される可能性があります。したがって、非並列プログラムはマシンの 25% を超えて使用しません)。 並列プログラミングはいくつかの基本的な点でシリアル プログラミングとは異なり、それがはるかに困難であるため、重要な効果が生じると思います。 私は、将来 (原文のまま) 並列プログラミングが人間ではなくツール (コンパイラー、ライブラリ、自動プログラミング言語) によって行われるようになると予想しており、これはすべてのプログラミングへの取り組み方に大きな変化をもたらすことになるでしょう。

Rescale には多様な顧客ベースがあります。 産業界または学術界のパートナーの多くは、オンプレミスのハイ パフォーマンス コンピューティング (HPC) クラスターを使用しています。 私はスティーブンに、HPC が彼にとって何を意味するのか尋ねました。
Stephen Jones: 私はこれをコンピューティング技術の最先端をカバーする一般的な用語だと考えています。 宇宙は複雑であり、私たちはそれを正確にモデル化することにはほど遠いです。 したがって、ますます大型化するコンピューター向けのタスクを常に見つけることができます。 何が起こるかというと、コンピュータができることのテクノロジーが進歩するにつれて、以前は攻撃できなかった新たな問題が明らかになります。 HPC は今後も存在し、常にニッチ市場であり続けます。 一方で、前述の世界の複雑さのため、すぐに「十分強力な」デスクトップに取って代わられることはありません。 ハードウェアとソフトウェアの両方の点で、非常に興味深いテクノロジー インキュベーターとして機能します。
世界中のエンジニアや科学者が使用しています。 リスケールプラットフォーム 組織が提供できるリソースを補完し、拡張するためです。 私は Stephen に、HPC におけるクラウド テクノロジの利用についてどのように考えているか尋ねました。
Stephen Jones: これは過去 10 年間で大きな成功をもたらしたものの 100 つです。 特に Amazon のクラウドは状況を一変させるものであり、(私の考えでは) コンピューティングの世界で最も驚くべきものの XNUMX つです。 現在では、スタートアップに資金を調達しようとするときに、「私のインフラストラクチャは AWS なので、ハードウェアにはお金をかけていません」と言うことが許容されています。 特に興味深いのは、HPC だけでなく基本的な IT インフラストラクチャも可能にするため、これまで小規模な企業には手が届かなかった大規模なコンピューティングを使って新しいことを行うスタートアップ企業が見られるようになることです。 事実上、これまでの XNUMX 倍の人員が HPC 向けに開発できるようになり、それによって新しい興味深いアプリケーションが生み出されなければなりません。
Rescale でアプリケーション エンジニアとしての役割を果たしている私は、最近、Rescale プラットフォーム上の CUDA および NVIDIA ハードウェアを活用するいくつかのオープン ソース パッケージを構築してインストールしました。 私は 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 プログラミングのあらゆる種類の複雑さを管理します。 自動並列化 (原文どおり) は現在大きなバズワードです (まだ普及していませんが)。 コンピューターのプログラミングはますます難しくなり、他のコンピューターの助けを借りてのみプログラムを実行できるようになるでしょう…
私が「本物のエンジニア」と呼んでいる人たちとの仕事の話題に移りますが(告白しますと、私の最初のエンジニアリングの仕事は船舶修理工場でした)、スティーブンも同様に前向きでした。
スティーブン・ジョーンズ: 純粋な機械工学の環境でソフトウェア担当者として働くのは、本当に興味深いです。 コンピューターは他の実験機器と同様のツールであり、コンピューターなしでエンジニアリングを行うことなど誰も想像できません。 しかし、私がこれまで見てきたすべてのエンジニアリング会社で、ソフトウェア エンジニアではない人たちは、ソフトウェア エンジニアをツールのように使用していました (つまり、かなりソフトウェア的に洗練されていない方法で)。
最後に、ソフトウェア エンジニアリングとそのエンジニアリングとの関係は、私にとって非常に興味のあるトピックです。 私はスティーブンにこれについての考えを尋ねました。
スティーブン・ジョーンズ: これもまた大きなアイテムです。 私はSpaceXで毎日そのギャップを埋めようと努めています。 私は数か月前、エンジニアリング シミュレーションに関するカンファレンスに参加し、十数人に会ったのですが、全員が驚くほど似たような話をしていました (私もそうでした)。ソフトウェアに関する理解の欠如は広く普及しており、エンジニアにとっては大きなハンディキャップとなっています。 私たちは、コンピュータの使用やプログラミングよりもはるかに優れた技術者をエンジニアに教育する必要があります。それは、仕事中に簡単に使い方を習得できるドリルやノコギリのようなものではありません。 この教育の提供に時間を費やした企業は、エンジニアリングの革新と生産性において明らかな利益を得ることができます。 ちなみに、これは工学だけでなく、すべての科学に当てはまります。 NVIDIA の HPC で働いていた私は、非常に複雑なスーパーコンピューターを使って最先端の科学を行うのに苦労している無数の優秀な物理学者、化学者、生物学者に会いました。 最も成功したのは、プログラミングをただ単にうろうろするのではなく、積極的に学んだ人たちでした (原文どおり)。 多くの場合、経験の浅い物理学者のほうが、コンピュータをより効率的に使用できるため、より良い仕事をします。 科学でも工学でも、ソフトウェアは「純粋度が低い」という考え方が存在することは間違いありませんが、人々は子供の頃からコンピュータを身近に感じて育っているため、これは世代的なものであることが判明するのではないかと私は考えています。
スティーブンのユニークな視点に感謝します。 で Rescale、私たちは科学者やエンジニアが必要とするスケーラブルなコンピューティング リソースを提供することで、彼らが目標を達成できるよう取り組みを続けます。

類似の投稿