CloudNative Days Tokyo 2023から、WasmのクラウドネイティブやAI推論での利用を解説
2023年12月11日、12日の両日にオンラインとリアルのハイブリッド形式で開催されたCloudNative Days Tokyo 2023のキーノートから、Michael Yuan氏による、Wasm(WebAssembly)の概要と、そのクラウドネイティブでのユースケース、そしてLLM(Large Language Models、大規模言語モデル)による生成AIへの応用についてのセッションを紹介する。
タイトルは「Wasm is becoming the runtime for LLMs」。なおYuan氏は、CNCF(Cloud Native Computing Foundation)のサンドボックスプロジェクトになっている、Wasmランタイム「WasmEdge」プロジェクトの創設者だ。
Wasmはブラウザーで始まりサーバーサイドの技術に
Wasmはもともと、CやC++のアプリケーションをコンパイルしたバイナリをWebブラウザーで動かすためのランタイムとして生まれた。JavaScriptなどとは違い、CやC++からコンパイルされたバイナリは環境をクラッシュさせる可能性があるために、環境から分離されて動く一種のコンテナとして設計されたのが特徴だ。
このことにより、Wasmはブラウザーからサーバーサイドの技術に広がった。これはかつて、ブラウザーの技術として作られたJava VMがサーバーサイドの技術になったのと同じ道だ。
一方クラウドは、仮想マシンでワークロードを動かすAmazon EC2から始まり、やがて仮想マシンより軽量なコンテナを動かすようになった。そして、コンテナより軽量にワークロードを動かすのがWasmだ、というのがYuan氏の主張するところだ。
Yuan氏はWasmの特徴の中でも、「非常に軽量」と「OSやハードウェアの違いを超えてポータブル」という2点を強調する。
1点めの「非常に軽量」については、2つの事例が紹介された。まず、Redisのキーバリューストアを読み書きするWebアプリケーションを、Rustとhyperで開発した例だ。コンテナで開発すると600MB以上になるところを、Wasmでは0.7MB(700KB)におさまったという。このサイズであれば、Raspberry Piや車載機器などのIoTデバイスでも動く。
もう1つの例は、PostgreSQLのCRUD操作ができるクライアントで、こちらはWasmで800KBのサイズだ。起動もミリ秒単位と高速で、この起動速度であれば必要なときだけ起動するようにしてリソースの消費を防げる。
OSやCPU、アクセラレーターの違いを超えて1つのバイナリが動く
2点めの「OSやハードウェアの違いを超えてポータブル」という特性が必要となる背景として、2020年にGoogleやスタンフォード大学の研究者が発表した論文「There's plenty of room at the Top: What will drive computer performance after Moore's law?」が紹介された。
論文タイトルは1950年代に技術のナノスケール化を予見したリチャード・ファインマンの論文「There's Plenty of Room at the Bottom」をもじったもの。下位層である回路の微細化が限界となりつつある中で、パフォーマンスのためには上位層であるソフトウェアの改善が重要になるという主張だ。具体的には、JavaやPythonではなく、CやRustを使って、CPUのAVX命令やGPUなどを駆使することになる。
そのためのコンピューティングプラットフォームは現在多様化している。CPUは、IntelとAMDだけでなく、Apple Siliconを始めとするARMや、RISC-Vなども考慮する必要がある。さらに、CPUの世代による機能の違いもある。
Wasmでは、こうしたCPUの違いや、OSの違いなどを越えて、ポータビリティを得られるとYuan氏。仮想マシンでも同様の恩恵は得られるが、エミュレーションとなるためパフォーマンスのペナルティがある。
さらにYuan氏が強調するのが、NVIDIAのGPUや、Apple Silicon、ARMのNPU、GoogleのTPUといったアクセラレーターの違いを超えられることだ。
これにより、開発者がMacBookやWindowsのノートPC上でコンパイルしたバイナリが、エッジデバイスから、サーバー、パブリッククラウドまで、プロセッサーやOSの違いを越えて動くというわけだ。
ここまでがWasmの概要だ。
クラウドネイティブでのユースケース
続いてYuan氏はクラウドネイティブでのWasmのユースケースを紹介した。
まずは、マイクロサービスやサーバーレスファンクションで、コンテナを置き換える形だ。
次が、ストリームデータのファンクション。これは、ネットワークプロキシやメッセージキューなどのデータの流れる部分にWasmを組み込んでデータを処理するものだ。最近ではすでにWasmをサポートする製品が多くあるという。
また、大きなシステムで機能拡張を実現するために、Wasmによりプラグイン機構を提供することもあるという。
そのほか、ブロックチェーンのスマートコントラクト(ブロックチェーン上で特定の条件で実行されるプログラム)でもWasmが使われる。
そして最後が、今回のタイトルにもあるようにAIの推論のユースケースだ。
Wasmは現在、コンテナの形式の一つとして、KubernetesやDocker、Podmanが対応している。そのため、Linuxコンテナと同じようにWasmを管理できる。
またCNCFは、さまざまなOSSプロジェクトを展望するCloud Native Landscapeにおいて、2023年から「Wasm」カテゴリーを設けた。ランタイムレベルからフレームワークレベルまで、GitHubのスターを百万ぐらい集めるプロジェクトが並んでいるという。そのため、ここに行けばWasmの現実世界のユースケースが見られる。
AIアプリケーションをCやC++で書いてWasmで動かす
そしてタイトルどおりのWasmでAI推論を動かす話だ。「これがWasmの能力を示すのにいいショーケースだ」とYuan氏は言う。
AIでモデルの作成や、モデルを使った推論の実行には、Pythonを使うことが多い。しかし、Pythonの機械学習ライブラリであるPyTorchのコンテナイメージは、ベーシックなもので約3GB、CUDA対応のもので6GBのサイズがある。そしてPyTorchの中核となる部分はC++で書かれていることから、「PythonはCのとても高コスト(very expensive)なフレームワークだ」とYuan氏は主張する。
ではCやC++でアプリケーションを書いて動かせばいいかというと、そこにも問題はある。なぜならCやC++からコンパイルしたコードはポータブルではないからで、ポータビリティのためにコンテナに入れようとしてもそのためにCやC++のツールチェーンも入れるとそれなりに大きく(数百MBオーダー)なってしまう。
そこで、AI推論のアプリケーションをCやC++で書いてWasm形式にコンパイルし、それを一種のコンテナとしてWasmランタイムで動かすというのが、Yuan氏の提案するアプローチだ。
WasmではファイルやネットワークなどシステムとのインターフェイスがWASI(WebAssembly System Interface)として定められている。そして、機械学習で使う機能のAPIも、WASI-NNとしてW3Cで標準化中だ。WASI-NNのAPIを呼び出したあと、実際にCPUやGPU、TPUの機能を使う部分は、その下のライブラリに任される。これにより、APIを境に、DevOpsのDev(開発者)はその上を、Ops(運用者)はその下を担当するように分業できる。
ここでYuan氏は、WasmEdgeを使ってLLaMAのモデルを使った対話型生成AIを動かす例を、実際に壇上でデモした。デモにあたってYuan氏は、まず自分のMacBookのWi-Fiをオフにして、ローカルで動くところを示した。
ターミナル上で動かした対話型生成AIに、Yuan氏はその場で「Where is the capital of the US?(USの首都は?)」という質問を入力。すると、期待どおり、ワシントンD.C.であるという文章が返ってきた。
続いて「What about Japan?(では日本は?)」と入力すると、会話の流れを理解して、東京であるという文章が返った。さらに「Can you plan a 2-day trip for me there?(そこに行く2日間の旅を計画してもらえますか?)」と入力すると、東京の旅行プランが返ってきた。
Wasm(WebAssembly)はその名から、Webの、特にブラウザーの技術というイメージもまだある。しかし開発の発展により、サーバーサイドへ、特にKubernetesなどのクラウドネイティブへと広がっている。
中でもAIのようなコンピュートにヘビーなワークロードを、Wasmで高効率かつポータブルに動かすというのは、まだ実験的ではあるが、一つの可能性となりそうだ。そして、実際にWasmEdgeによりローカルで生成AIアプリケーションが動くようすがデモで示されたことに、説得力を感じた。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Cloud Native Wasm Dayから大規模言語モデルをWasmで実行するデモを解説するセッションを紹介
- WasmCon 2023からLLMをWASMで実装するセッションを紹介
- 「KubeCon NA 2022」のプレカンファレンスからCloudNative Wasm DAYを紹介
- WebAssemblyを取り巻く最新情報をMeetupから紹介(後半)
- KubeCon Europe 2024からWASMとeBPFを使ってストリーム処理を解説するセッションを紹介
- 「KubeCon NA 2022」から、WasmEdgeを開発するSecond StateのMichael Yuanのインタビュー
- KubeCon EU 2021からセキュアでコンパクトなバイナリーフォーマットWASMのセッションを紹介
- WebAssemblyとRustが作るサーバーレスの未来
- KubeCon NA 2021開催。プレカンファレンスのWASM Dayの前半を紹介
- Rustで書かれたKubernetesのためのWASM実行環境Krustletとは?