以下のサンプル・アプリケーションに含まれるindex.jsを、Oracle APEXで動くように改変ししました。
MediaPipe LLM Inference task for web
https://github.com/google-ai-edge/mediapipe-samples/tree/main/examples/llm_inference/js
実行環境はmacOSのChromeです。作業としては、ウェブ用LLM推論ガイドのクイックスタートを参照しています。
実行環境はmacOSのChromeです。作業としては、ウェブ用LLM推論ガイドのクイックスタートを参照しています。
元々は最近発表されたGemma 3nを動かすつもりだったのですが、Gemma 3nは現時点では.taskファイルのみ公開されているようです。ウェブ用LLM推論ガイドのモデル変換に.taskの対応プラットフォームとしてAndroid、iOSはありますが、ウェブがありません。そのため、クイックスタートのとおりにgemma2-2b-it-gpu-int8を使用しました。
サンプル・アプリケーションのindex.htmlは、APEXのアプリケーションのページとして作り直しています。
作成したアプリケーションは以下のように動作します。
APEX向けに書き直したindex.jsは以下になります。
このファイルを静的アプリケーション・ファイルとしてアップロードします。作成した静的アプリケーション・ファイルの参照をメモします。
静的アプリケーション・ファイルindex.jsをページに読み込むために、ホーム・ページのページ・プロパティのJavaScriptのファイルURLに以下を記述します。moduleを指定します。
[module]#APP_FILES#index#MIN#.js
LLMに送信する文字列は、ページ・アイテムP1_INPUTに入力します。タイプはテキスト領域を選択します。セッション・ステートのデータ型はCLOB、ストレージはリクエストごと(メモリーのみ)を設定します。
ボタンSUBMITを作成します。ボタンをクリックしたときに実行されるイベントハンドラは、index.js内に記述されています。APEXアプリとしては何も処理をしないので、動作のアクションとして動的アクションで定義を選択します。また、index.js内でこのボタンをsubmitというIDで見つけているので、詳細の静的IDにsubmitを設定します。
LLMの出力はページ・アイテムP1_OUTPUTに表示します。LLMの出力フォーマットはMarkdownなので、ページ・アイテムのタイプとしてMarkdownエディタを選択します。セッション・ステートのデータ型はCLOB、ストレージはリクエストごと(メモリーのみ)を設定します。
Oracle APEXでMediaPipe LLM Inference APIを呼び出すサンプルは以上で完成です。
LLMとしては小さなモデルとはいえ、数GBはあります。Oracle APEXの静的アプリケーション・ファイルとして保存するのも避けたかったので、ORDSから直接ファイルとしてダウンロードできる場所に配置しました。
(CDNではなく)ORDSがOracle APEXのイメージ・ファイルを提供するように構成している場合、以下のようにstandalone.static.pathが設定されています。(global/settings.xml内)
<entry key="standalone.static.path">/opt/oracle/apex/images</entry>
このパスの下はURLから見ると/i/以下にあるファイルとして参照されます。そのため、(上記の例では/opt/oracle/apex/images以下に)ディレクトリmodelsを作成し、その下にgemma2-2b-it-gpu-int8.binを置きました。
index.js内ではモデル・ファイルを以下のように指定しています。
const modelFileName = '/i/models/gemma2-2b-it-gpu-int8.bin'; /* Update the file name */
CORSのエラーが発生しないよう、APEXが動作しているホストと同じホストからモデル・ファイルをダウンロードする必要があるようです。また、ダウンロード元がlocalhost以外の場合、https経由でダウンロードする必要があるとの記載もありました。今回の作業ではAPEXはlocalhostでアクセスしているため、両方の条件が必須かどうかは確認できていません。
今回使用したモデルはWebGPUを使用します。Chromeのchrome://flagsを開いて、WebGPUに関する以下の2つの設定を有効にしています。
今回の記事は以上になります。
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。https://github.com/ujnak/apexapps/blob/master/exports/sample-google-ai-edge-mediapipe.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完