最新のデータアーキテクチャにおいては、他のあらゆるワークフローと比べ、機械学習(ML)による負荷が最も大きなものとなっています。有効なMLを実施できるかどうかは、SQLベースやPythonベースのパイプラインを統合してデータの取り込みからMLモデル推論に至るまでの数多くのステップを実行するデータチームが、多言語によるパイプラインをいかにうまく連携できるかにかかっています。

複数のプログラミング言語の使用というデータチームが抱える本質的な課題は、機械学習ワークフローを運用化し自社データから持続可能な投資利益を確保するという組織の目標に対する最大の障害となっています。

多言語による障害

10年以上の長きにわたりデータプロフェッショナル達は、役職やスキルにかかわらず、誰でもが日常業務でデータの持つパワーを活用できる「データの民主化」という理想を唱え、その実現を目指してきました。

しかし、多様なバックグラウンドを持つ新たなメンバーがデータの民主化に乗り出すようになった今では、すべての人が統一されたプログラミング言語でデータを操るということが非現実的なものとなっています。これまで、異なるコミュニティのさまざまなニーズに対応するため、複数の言語が登場してきました。大規模なデータトランスフォーメーションにおいては長きにわたってSQLが主流である一方、より柔軟性の高い関数的構造のため表現性や拡張性に優れたPythonのような言語も台頭してきています。現在では、膨大なPythonフレームワークが存在しており、アプリケーション開発から定量分析やMLに至るまで、あらゆるものを簡素化しています。

機械学習に限って言えば、MLオペレーション(MLOps)における課題の多くが、この多言語による障害により生じるものとなっています。多くの場合、複雑なトレーニングや推論パイプラインの特定のタスクに対して最も有効なツールは、SQLまたはPythonで書かれています。膨大なフレームワーク(TensorFlowやPytorchなど)と、それらをサポートする専用のコンピュートインフラストラクチャによって、この複雑さがさらに深刻なものとなっています。MLOpsやDevOpsチームは、異なる言語やフレームワークに対応する複数のプラットフォームで効率的かつスケーラブルなパイプラインを構築し維持するといった、気の進まない仕事を任される羽目になっています。

マルチプラットフォームアプローチ

多言語による障害を克服するための方法として、さまざまな言語に対応するさまざまなプラットフォームが登場してきました。例えば、データプラットフォームは従来データエンジニアやアナリストの領域でしたが、これらのプラットフォームが異なる言語やフレームワークを必要とするデータサイエンティストのニーズを必ずしも満たすわけではないことから、プラットフォームを自ら構築しようというデータサイエンティストもいます。さらに、モニタリング、オーケストレーション、バージョン管理といったタスクに対応するために、独自のMLOpsプラットフォームを構築するMLエンジニアも少なくありません。

ML搭載アプリケーションの開発、提供に使用されるプラットフォーム

これらのプラットフォームにまたがる複数の処理ステップの橋渡しをするために、Apache Airflowやdbtといったフレームワークが登場しました。これらは、統合ハブとしての役割を果たすことでこのオーケストレーションを簡素化しています。しかし、個々のプラットフォーム間でデータのコピーや移動が行われることから、依然として技術的負債やリスクが増加するという問題は残ります。そのため、これまではこのようなプラットフォームがデータ層での多言語による障害を克服することはありませんでした。

技術チームが、脆弱で過度に複雑な言語やワークロード固有のデータインフラストラクチャの維持に苦戦している一方で、CIOやCDOは常に、複製されたパイプラインやプラットフォーム間を移動する膨大なデータにより生じるコストの高騰やセキュリティリスクの増加への対応を迫られています。

多言語プラットフォームアプローチ

データの世界における多言語という本質が変わる可能性は低く(Juliaのような新たな言語の登場もある)、データチームが今後もマルチプラットフォームアーキテクチャでのデータ移動に起因する問題やリスクに突き当たるであろうことを考えると、多言語プラットフォームが必要不可欠な存在となることは間違いないでしょう。さまざまな単一言語プラットフォーム間でデータを移動する場合と比べ、多言語プラットフォームでは、さまざまなチームや言語における処理ニーズに対応することにより、ガバナンスの外部にデータを移動させなくてもよいケースを増やすことができます。

アーキテクチャを合理化し、異なるチーム間の連携を強化し、あらゆるデータに対し一貫したガバナンスを提供するため、ベストオブブリードのオーケストレーションフレームワークとのシームレスな統合を実現する、より多くの多言語プラットフォームが求められています。 

Snowpark:現代のデータチームの悩みを解消する多言語対応

Snowflake introduced Snowpark as an extensibility framework to create a polyglot platform that bridges the gaps between data engineers, data scientists, ML engineers, application developers, and the MLOps and DevOps teams that support them.

まず、最もよく使用されているJava、Scala、JavaScriptといった言語に対応することで、Snowparkはアーキテクチャを簡素化し、データ複製にまつわるコストやガバナンスリスクの低減を可能にしました。Snowparkを使用することで、ユーザーは好きな言語でデータを扱えるようになると同時に、Snowflakeで得ていたような、性能、拡張性、シンプルさ、セキュリティ、ガバナンスを利用できるようになります。何よりも、Snowparkは、他の言語で書かれたカスタム関数をSQLクエリや処理ステップの一部として容易に統合できるように設計されています。

And now, Snowpark for Python (in private preview) takes it to a whole new level by embracing a massive community of developers, data engineers, data scientists, and ML engineers. Unsurprisingly, Snowpark for Python also exposes much-needed surface area for integration with orchestration frameworks, and the Snowflake partnership with Anaconda makes it possible to tap into a huge ecosystem of frameworks including TensorFlow, Pytorch, Keras, and many more.

Apache Airflow:多言語ワークフロー向けオーケストレーションフレームワーク

AstronomerとAirflow Communityは同時に、Airflow 2.0でのTaskflow APIといったPython向けのサポートを引き続き追加しています。Taskflowは、データチーム向けに使いやすいPython用インターフェースを提供し、ソフトウェア開発におけるグッドプラクティスを強化します。TaskflowをSnowparkと併用すると、Pythonで複雑なデータトランスフォーメーションを簡単に定義できるだけでなく、データを移動させることなく、MLのような非SQLタスクをDAGに統合することもできるようになります。

SnowparkとAirflowを活用することで、データチームは、データの移動や複製を行うことなく、ELT、特徴量エンジニアリング、エクスペリメンテーション、モデルトレーニング、推論、モニタリング、さらにStreamlit内での強力なビジュアルアプリケーションからパイプライン全体を実行することができるようになります。そのため、複雑性の緩和、ガバナンスリスクの低減、ベストオブブリードのフレームワークによるオープン性へのサポートに基づいて、複雑でスケーラブルなパイプラインの確実な管理が可能となります。

多言語チームの強化

データが民主化されたことにより、現代のチームには、さまざまな言語やフレームワークに対応したプラットフォームが必要となっています。Snowparkはこのような多言語チームに、世界をリードするオーケストレーションフレームワークとのオープンな統合をサポートする単一のプラットフォームを提供することで、運用における簡素化を実現しデータガバナンスにおけるグッドプラクティスを強化します。

Snowpark is already in general availability for Java/Scala and currently in private preview for Python. To build your own ML workflow using Snowpark, Anaconda, and Apache Airflow, check out this step-by-step code guide.