Google は 2024 年 2 月 21 日に、初のオープンソースモデルファミリーである Gemma をリリースしました。モデルの重みは、Gemma 2B と Gemma 7B の 2 つのサイズで利用できます。Function Compute の GPU インスタンスとアイドルモードを使用して、Gemma モデルサービスを低コストで迅速にデプロイできます。
前提条件
Function Compute が有効化されていること。詳細については、「関数をすばやく作成する」をご参照ください。
名前空間とイメージリポジトリが作成されていること。詳細については、「名前空間の作成」および「イメージリポジトリの作成」をご参照ください。
手順
サービスのデプロイに使用するリソース (GPU リソース、vCPU リソース、メモリリソース、ディスクリソース、アウトバウンドインターネットトラフィック、関数呼び出しなど) に対して課金されます。詳細については、「課金の概要」をご参照ください。
アプリケーションの作成
次の手順に従って、ACR リポジトリのドメイン名とアドレスを取得します。
Container Registry コンソールにログインし、関数が存在するリージョンを選択し、ターゲットのエンタープライズインスタンスカードで [管理] をクリックします。
左側のナビゲーションウィンドウで、[アクセス制御] をクリックし、[インターネット] タブを選択します。インターネットアクセスが無効になっている場合は、有効にします。インターネット上の任意のマシンがリポジトリにログインできるようにするには、すべてのインターネットホワイトリストを削除します。それ以外の場合は、インターネットホワイトリストを設定します。設定が完了したら、ACR インスタンスの [ドメイン名] をコピーします。

左側のナビゲーションウィンドウで、[イメージリポジトリ] をクリックします。次に、ターゲットリポジトリの [リポジトリ名] をクリックして、その詳細ページを開きます。
リポジトリの [インターネットアドレス] を保存できます。

Gemma モデルをダウンロードします。モデルは Hugging Face または ModelScope からダウンロードできます。このトピックでは、ModelScope からダウンロードした Gemma-2b-it モデルを例として使用します。詳細については、「Gemma-2b-it」をご参照ください。
重要Git を使用してモデルをダウンロードする場合、Git LFS 拡張機能をインストールし、
git lfs installコマンドを実行して Git LFS を初期化してから、git cloneコマンドを実行してモデルをダウンロードする必要があります。そうしないと、モデルのサイズが大きいため、ダウンロードしたモデルが不完全になり、Gemma サービスが機能しなくなる可能性があります。Dockerfile と
app.pyという名前のモデルサービスコードファイルを作成します。Dockerfile
FROM registry.cn-shanghai.aliyuncs.com/modelscope-repo/modelscope:fc-deploy-common-v17 WORKDIR /usr/src/app COPY . . RUN pip install -U transformers RUN pip install -U accelerate CMD [ "python3", "-u", "/usr/src/app/app.py" ] EXPOSE 9000app.py
from flask import Flask, request from transformers import AutoTokenizer, AutoModelForCausalLM model_dir = '/usr/src/app/gemma-2b-it' app = Flask(__name__) tokenizer = AutoTokenizer.from_pretrained(model_dir) model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto") @app.route('/invoke', methods=['POST']) def invoke(): request_id = request.headers.get("x-fc-request-id", "") print("FC Invoke Start RequestId: " + request_id) text = request.get_data().decode("utf-8") print(text) input_ids = tokenizer(text, return_tensors="pt").to("cuda") outputs = model.generate(**input_ids, max_new_tokens=1000) response = tokenizer.decode(outputs[0]) print("FC Invoke End RequestId: " + request_id) return str(response) + "\n" if __name__ == '__main__': app.run(debug=False, host='0.0.0.0', port=9000)Function Compute がサポートするすべての HTTP ヘッダーの詳細については、「Function Compute の共通リクエストヘッダー」をご参照ください。
これらの手順を完了すると、コードディレクトリは次の構造になります。
. |-- app.py |-- Dockerfile `-- gemma-2b-it |-- config.json |-- generation_config.json |-- model-00001-of-00002.safetensors |-- model-00002-of-00002.safetensors |-- model.safetensors.index.json |-- README.md |-- special_tokens_map.json |-- tokenizer_config.json |-- tokenizer.json `-- tokenizer.model 1 directory, 12 files次のコマンドを順番に実行して、イメージをビルドしてプッシュします。コマンドの
{REPO_ENDPOINT}はステップ 1 の宛先イメージリポジトリのインターネットアドレスで、{REGISTRY}は ACR インスタンスのドメイン名です。IMAGE_NAME={REPO_ENDPOINT}:gemma-2b-it docker login --username=mu****@test.aliyunid.com {REGISTRY} docker build -f Dockerfile -t $IMAGE_NAME . && docker push $IMAGE_NAME上記のコマンドの {NAMESPACE} と {REPO} を、作成した名前空間とイメージリポジトリの名前に置き換えてください。
関数を作成します。
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーで、リージョンを選択します。[関数] ページで、[関数の作成] をクリックします。
[関数の作成] ページで、[GPU 関数] タイプを選択し、次のパラメーターを設定してから [作成] をクリックします。
次の表に、主要なパラメーターを示します。その他のパラメーターにはデフォルト値を使用できます。
パラメーター
説明
GPU タイプ
[Tesla シリーズ] を選択します。
仕様
[GPU メモリ] を 16 GB に設定します。
[VCPU] を 2 vCPU に設定します。
[メモリ] を 16 GB に設定します。
イメージ設定
コンテナイメージ
[ACR イメージの選択] をクリックします。[コンテナイメージの選択] パネルで、ステップ 4 で ACR イメージリポジトリにプッシュしたイメージを選択します。
リスナーポート
このパラメーターを 9000 に設定します。
関数のステータスが [有効] に変わったら、インスタンスの最小数を 0 より大きい値に設定して、コールドスタートを緩和できます。
関数の詳細ページで、[弾力性設定] タブを選択します。[弾力性ポリシー] セクションで、ターゲットポリシーの [設定] をクリックします。
[弾力性ポリシーの設定] パネルで、[最小インスタンス数] を 1 以上に設定し、[OK] をクリックします。
Google Gemma サービスの使用
関数の詳細ページで、[トリガー] タブをクリックします。ターゲット HTTP トリガーの [設定情報] 列で、その URL を取得します。
次のコマンドを実行して関数を呼び出します。
curl -X POST -d "who are you" https://func-i****-****.cn-shanghai.fcapp.run/invoke次の例は、期待される出力を示しています。
<bos>who are you? I am a large language model, trained by Google. I am a conversational AI that can understand and generate human language, and I am able to communicate and provide information in a comprehensive and informative way. What can I do for you today?<eos>関数の詳細ページで、 タブを選択してメトリックを表示します。
関数の呼び出しが発生しない場合、インスタンスの GPU メモリ使用量がゼロに低下することがわかります。新しい関数の呼び出しリクエストが到着すると、Function Compute は必要な GPU メモリリソースを迅速に復元して割り当てます。これにより、コストを削減できます。
説明インスタンスメトリックを表示するには、まずロギング機能を有効にする必要があります。詳細については、「ロギング機能の設定」をご参照ください。
リソースの削除
この関数を使用する必要がなくなった場合は、そのリソースを削除して、それ以上の料金が発生しないようにすることができます。このアプリケーションを長期間使用する場合は、このステップをスキップできます。
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
関数リストでターゲット関数を見つけ、[アクション] 列の [削除] をクリックします。表示されるダイアログボックスで、削除するリソースが正しいことを確認し、削除を確定します。
参考
Google がリリースしたオープンモデルファミリーである Gemma の詳細については、「gemma-open-models」をご参照ください。