なぜ機械学習展開プラットフォームを 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枚の写真で個人情報を確認できます。顔認識が再びプライバシー論争を巻き起こす

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

Lightning AI Studioを無料で使う方法

翻訳者 |ブガッティレビュー | Chonglouこの記事では、無料で使いやすい新しいクラウドIDE...

...

スマート製品はどこにでもあります。人工知能と通常の知能の違いは何でしょうか?

多くの一般消費者にとって、どれが本物の人工知能でどれが単なる普通の知能なのかを区別することは不可能で...

FMCW レーダー位置認識をエレガントに実装する方法 (IROS2023)

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

将来、人間は「第3の脳」を持ち、5Gはあらゆるものを高速化する

「5Gは大量のデータをもたらしますが、そのデータで何ができるのかが問題です。それをアプリケーションシ...

アメリカはAIイノベーションをリードしているのか?フォーブス誌のグローバルAIスタートアップトップ50

NetEase Intelligence News: 人工知能はまもなく私たちの世界を変えるでしょ...

中山大学が偏りのない視覚的質問応答データセットを公開、その論文はトップジャーナルTNNLSに掲載される

最近、中山大学は常識に基づいた偏りのない視覚的質問応答データセット (Knowledge-Route...

ストレージパフォーマンスのボトルネックを解消し、AIアプリケーションの迅速な開発を実現

古典的な「樽理論」によれば、樽にどれだけの水が入るかは、一番低い木材によって決まります。 [[397...

AI時代のITリーダーに必要な6つのソフトスキル

人工知能は組織内で大きな変化をもたらしますが、変化とともに、AI が仕事を奪ってしまうのではないかと...

第3回世界情報会議は5月16日に開催されます。主な特徴は次の5つです。

北京、天津、河北の協調的発展を積極的に推進し、世界の知能分野における科学技術交流と協力を強化し、新興...

スマートホームにはスマートロボットが必要ですか?

スマートホームの人気が高まっていることは間違いありません。テクノロジーに精通した早期導入者から一般の...

人工知能は「人工知能」にどれだけ「知性」を押し付けているのか

真に AI を活用したサービスを構築するのは簡単ではありません。そこで、一部のスタートアップ企業は、...

人工知能は製品のサービスとサポートの方法を変える

私は、IoT を活用して現場サービスと顧客サポートの効率性を向上させることを目指す機器メーカーのクラ...

機械学習の博士課程での私の経験から得た洞察

2020 年は非常に困難な年でしたが、私にとってはコーネル大学でコンピューターサイエンスの博士号を取...