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

ブログ    
ブログ    

推薦する

...

10億の顔データが完全に削除されました! Facebookが顔認識ツールを廃止

[[434362]] 11月3日、Facebookは写真のタグ付けに顔認識機能を使うのをやめると発表...

...

3D MRI および CT スキャンのディープラーニング モデルの概要

医療画像データと他の日常的な画像との最大の違いの 1 つは、DICOM シリーズ データを扱う場合、...

インテルCEOがNVIDIAを非難:CUDA技術は時代遅れであり、業界全体がそれを終わらせたいと考えている

数日前、Intelは生成AI用のAIチップGaudi3を含む一連の新しいCPUを発売しました。計画に...

写真の中のキャラクターを動かしたり歌わせたりできます!このAIブラックテクノロジーは台無しになった

最近、動画サイトをよく見ている人は、とても不思議でワクワクするものを見たことがあるかもしれません。具...

...

2021 年の自動化には何が期待できるでしょうか?

[[360650]]今後数か月以内に自動化によってビジネスニーズを満たすことができるでしょうか?今...

機械学習プログラムで使用される一般的な推奨アルゴリズムの例

推奨アルゴリズムは、機械学習とデータマイニングの分野の重要な部分であり、ユーザーにパーソナライズされ...

エッジ人工知能とは?エッジ人工知能の実装方法

エッジ AI はエッジ人工知能の略称です。IoT システムの次の開発フロンティアです。では、エッジ人...

...

...

...

ホライゾン・ロボティクス、中国初のオープンで使いやすいソフトウェアとハ​​ードウェアの統合ロボット開発プラットフォームを発表

2022年6月14日、エッジ人工知能コンピューティングプラットフォームの世界的リーダーであるHori...

PHP 再帰アルゴリズムとアプリケーションの紹介

PHP は動的な Web ページを開発するための最適なテクノロジーです。プログラミングに役立つ基本的...