なぜ機械学習展開プラットフォームを Python ではなく Go で作成したのでしょうか?

なぜ機械学習展開プラットフォームを Python ではなく Go で作成したのでしょうか?

Python は機械学習の分野で広く使われるようになりました。しかし、Python は、全能の神が望むことを何でもできる魔法の杖ではありません。多くの場合、Python は Go などの他の言語ほど効果的ではなく、それよりも悪い場合もあります。この記事では、著者の作業環境で Python ではなく Go が選ばれた理由について説明し、コミュニティの注目を集め、白熱した議論を巻き起こしました。

プログラミング言語は独自の世界であり、その支配者の地位を狙う人々が常に存在します。

Python は現在、特に機械学習の分野で主要なプログラミング言語として確固たる地位を築いています。主流の機械学習フレームワークはすべて Python を使用しています。

しかし、多くの人に認知されている Python も、実は万能というわけではありません。無力な状況もあり、何もないところから何かを生み出すこともあります。

Python が誇る機械学習アルゴリズムは、機械学習システムのコンポーネントの 1 つにすぎません。実際に大規模な本番環境の機械学習 API を実行するには、次の機能を実装するインフラストラクチャも必要です。

自動スケーリングにより、トラフィックの変動によって API が中断されることがなくなります。API 管理により、API デプロイメントのローリング アップデートを処理し、ユーザーにサービスを提供しながらモデルを更新できます。

Cortex のようなオープンソースの機械学習導入プラットフォームは、このインフラストラクチャ全体と、ロギングやコストの最適化などのその他の懸念事項を自動化することを目指していますが、著者の Caleb Kaiser 氏は、Go が Python よりも適していると考えています。

貧しい家庭出身で、クリスマスの日に新卒者によって作られた Python と比較すると、Go 言語は Google が生み出したもので、その作者は Rob Pike、Ken Thompson、Robert Griesemer という 3 人の巨匠です。以下の点で Python を上回っています。

同時実行性は機械学習のインフラストラクチャにとって重要

ユーザーは、さまざまなモデルをさまざまな API としてデプロイでき、すべて同じ Cortex クラスターで管理されます。

Cortex Operator がこれらのさまざまなデプロイメントを管理できるようにするには、いくつかの異なる API を扱う必要があります。

CortexはKubernetes APIを呼び出してモデルをクラスターにデプロイします。さまざまなAWS API(EC2 Auto Scaling、S3、CloudWatchなど)も考慮する必要があります。

ユーザーはこれらの API と直接対話することはありません。代わりに、Cortex はこれらの API をプログラムで呼び出して、クラスターをプロビジョニングし、デプロイメントを開始し、API を監視します。

これらすべての重複する API 呼び出しを効率的かつ信頼性の高い方法で行うのは困難です。

これらを同時に処理するのが最も効率的な方法ですが、競合状態などを気にする必要が生じるため、複雑さも増します。Go には、この問題に対するエレガントですぐに使えるソリューション、Goroutines があります。

Goroutine は、並行して実行される通常の Go 関数です。 1 つの OS スレッドに多数の Goroutine を配置することができ、Goroutine が OS スレッドをブロックすると、Go ランタイムは残りの Goroutine を新しい OS スレッドに自動的に移動します。

Goroutine は「チャネル」と呼ばれる機能も提供しており、これにより Goroutine が相互にメッセージを渡すことができるため、リクエストをスケジュールして競合状態を回避できます。

asyncio などの最新のツールを使用して、これらすべてを Python で実装することは可能かもしれませんが、Go がこのユースケースを念頭に置いて設計されているという事実により、私たちの作業ははるかに簡単になります。

GoでクロスプラットフォームCLIを構築するのは簡単です

Cortex CLI は、ユーザーがコマンドラインから直接モデルをデプロイし、API を管理できるようにするクロスプラットフォーム ツールです。

以下の GIF は使用中の CLI を示しています。

Python で書かれた CLI をさまざまなプラットフォーム間で配布するのは難しすぎることがわかりました。

Go は単一のバイナリにコンパイルされるため (依存関係の管理は不要)、エンジニアリングの労力をかけずにプラットフォーム間で CLI を配布するための簡単なソリューションを提供します。コンパイルされた Go バイナリとインタープリタ言語のパフォーマンス上の利点も明らかです。

コンピュータのベンチマークゲームによると、Go は Python よりもはるかに高速に実行されます。他の多くのインフラストラクチャ CLI ツールが Go で書かれているのは偶然ではありません。これが次のステップにつながります。

Goエコシステムはインフラプロジェクトに最適

オープンソースの利点の 1 つは、尊敬するプロジェクトから学ぶことができることです。 たとえば、Cortex は Kubernetes (それ自体が Go で記述されています) エコシステム内に存在します。 私たちは、このエコシステム内の多くの素晴らしいオープンソース プロジェクトから学ぶことができて幸運でした。その中には次のようなものがあります。

  • kubectl: Kubernetes 用の CLI
  • minikube: Kubernetesをローカルで実行するためのツール
  • helm: Kubernetes パッケージ マネージャー
  • kops: 本番環境のKubernetesを管理するためのツール
  • eksctl: Amazon EKS の公式 CLI

Kubernetes プロジェクトだけでなく、上記のすべてが Go で書かれています。

CockroachDB や、Vault、Nomad、Terraform、Consul、Packer などの Hashicorp のインフラストラクチャ プロジェクトは、すべて Go で書かれています。

インフラストラクチャ分野での Go の人気のもう一つの効果は、ほとんどのエンジニアが興味を持っていることです。インフラに携わる人々は Go に精通しているため、エンジニアを引き付けやすくなります。

Goは使うのが楽しい

Python と比較すると、Go は始めるのが少し大変ですが、これは一時的なものです。一度敷居を越えて囲碁の世界に入ってみれば、それがまさに「順風満帆」であることに気づくでしょう。

Go の寛容な性質は、大規模なプロジェクトに非常に適している理由です。

さらに、Python と比較した場合、Go の利点は次の点にも反映されています。

  • あなたが犯す愚かな間違いをすべてキャッチする本当に優れたコンパイラを用意する
  • より優れた並列処理。 Go言語は並列処理のために生まれた
  • シンプルな展開。コードに必要なすべての依存関係は1つのバイナリファイルにあります
  • 一貫したスタイル。フォーマットツールはすべてのコードスタイルの一貫性を保つ
  • さらに便利なツール。エディタ+プラグインでほぼすべてのニーズに対応、IDEは不要

機械学習にはPython、インフラにはGo

Cortex は TensorFlow、PyTorch、scikit-learn、およびその他の Python モデルを提供します。つまり、これらのモデルとのインターフェイス、および推論前後の処理は Python で実行されます。

ただし、Python コードが Docker コンテナにパッケージ化されているとしても、これらのコンテナは Go 言語で記述されたコードでオーケストレーションされます。機械学習エンジニアになりたい場合は、Python を知っておくことが必須です。

ただし、機械学習インフラストラクチャでの作業に興味がある場合は、Go の使用を真剣に検討する必要があります。

<<:  3行のコードでモデルのトレーニングを高速化: このアルゴリズムにより、GPUの古い木に新しい花が咲きます

>>:  フォトライブラリには30億枚の画像があり、たった1枚の写真で個人情報を確認できます。顔認識が再びプライバシー論争を巻き起こす

ブログ    

推薦する

自然言語処理のためのオープンソースツール12選

[[316192]]独自の NLP アプリケーションで使用できる 12 個のツールを見てみましょう。...

...

...

マイクロソフトがニュースルーム向けのAI支援プログラムを開始:ジャーナリストはAIを最大限に活用する方法を学ぶための無料コースを受講できる

マイクロソフトは2月6日、現地時間5日にプレスリリースを発行し、複数の報道機関と生成AIベースのコラ...

機械学習と従来のプログラミングの違いについて話す

[[264779]] AI と ML は誇張されすぎていて、if 文を書いたりプログラミングに関係す...

スマートビルディングにおける技術の陳腐化にどう対処するか?

今日の建物、ましてや将来のスマート ビルにとって、技術インフラの重要性はいくら強調してもし過ぎること...

...

Transformer 機械学習モデルとは何ですか?

翻訳者 | 李睿校正:孫淑娟近年、Transformer 機械学習モデルは、ディープラーニングとディ...

機械学習とコンピュータービジョンのためのトップ 20 画像データセット

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

トイレに座ってアルゴリズムを見る: クイックソート

高速かつ経済的なソートアルゴリズムスペースを無駄にせず、より高速なソートアルゴリズムはありますか?そ...

...

...

AIの安全性:中国のAIに100本の毒

人間がAIを見つめると、AIも人間を見つめる。大規模 AI モデルの大規模な応用と進化において、ネッ...

アート業界におけるメタバースの探究

メタバースの概念がますます普及するにつれて、さまざまな業界がこの豊かな土地を探索し始めました。多くの...