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 で記述されています) エコシステム内に存在します。 私たちは、このエコシステム内の多くの素晴らしいオープンソース プロジェクトから学ぶことができて幸運でした。その中には次のようなものがあります。
Kubernetes プロジェクトだけでなく、上記のすべてが Go で書かれています。 CockroachDB や、Vault、Nomad、Terraform、Consul、Packer などの Hashicorp のインフラストラクチャ プロジェクトは、すべて Go で書かれています。 インフラストラクチャ分野での Go の人気のもう一つの効果は、ほとんどのエンジニアが興味を持っていることです。インフラに携わる人々は Go に精通しているため、エンジニアを引き付けやすくなります。 Goは使うのが楽しい Python と比較すると、Go は始めるのが少し大変ですが、これは一時的なものです。一度敷居を越えて囲碁の世界に入ってみれば、それがまさに「順風満帆」であることに気づくでしょう。 Go の寛容な性質は、大規模なプロジェクトに非常に適している理由です。 さらに、Python と比較した場合、Go の利点は次の点にも反映されています。
機械学習にはPython、インフラにはGo Cortex は TensorFlow、PyTorch、scikit-learn、およびその他の Python モデルを提供します。つまり、これらのモデルとのインターフェイス、および推論前後の処理は Python で実行されます。 ただし、Python コードが Docker コンテナにパッケージ化されているとしても、これらのコンテナは Go 言語で記述されたコードでオーケストレーションされます。機械学習エンジニアになりたい場合は、Python を知っておくことが必須です。 ただし、機械学習インフラストラクチャでの作業に興味がある場合は、Go の使用を真剣に検討する必要があります。 |
<<: 3行のコードでモデルのトレーニングを高速化: このアルゴリズムにより、GPUの古い木に新しい花が咲きます
>>: フォトライブラリには30億枚の画像があり、たった1枚の写真で個人情報を確認できます。顔認識が再びプライバシー論争を巻き起こす
近年、都市化と道路交通建設の加速により、自動車旅行の需要が継続的に増加しており、道路上の車両数の継続...
Alibaba DAMO Academy は、2019 年のトップ 10 テクノロジー トレンド予測...
ナイーブ ベイズ アルゴリズムはシンプルで効率的であり、分類問題を扱う際に最初に検討すべき方法の 1...
法務テクノロジーには、弁護士とそのサポートスタッフが顧客に法務サービスを提供するのに役立つソフトウェ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
旅の途中と安定した拡散が限界に達しました! Stable Diffusion XL 0.9 がリリー...
バッチ サイズは、機械学習における重要なハイパーパラメータの 1 つです。このハイパーパラメータは、...
AIの力は、医療紛争、化学合成、犯罪者識別、自動運転などの応用分野で拡大しています。 AI は現在何...
この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...
10月21日、2020年全国大衆起業・イノベーション週間の北京会場である2020年中関村国際フロンテ...
翻訳者 | 崔昊校正:孫淑娟導入 中国と英国の共同研究により、ビデオ内の顔を再現する新しい方法が考案...
この記事では、AI がコピーライターにもたらす 11 のメリットの一部と、次のプロジェクトで AI ...
過去 10 年間、データ サイエンスと機械学習の分野では驚異的な進歩が見られました。ディープラーニン...