Google在2024年02月21日正式推出了首個開源模型族Gemma,并同時上架了2b和7b兩個版本。您可以使用函數計算的GPU實例以及函數計算的閑置模式低成本快速部署Gemma模型服務。
前提條件
操作步驟
部署Gemma模型服務的過程中將產生部分費用,包括GPU資源使用、vCPU資源使用、內存資源使用、磁盤資源使用和公網出流量以及函數調用的費用。具體信息,請參見費用說明。
創建應用
下載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-vpc.cn-shanghai.aliyuncs.com/modelscope-repo/modelscope:fc-deploy-common-v17 WORKDIR /usr/src/app COPY . . RUN pip install -U transformers CMD [ "python3", "-u", "/usr/src/app/app.py" ] EXPOSE 9000
app.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)
關于函數計算支持的所有HTTP Header,請參見函數計算公共請求頭。
完成后代碼目錄結構如下所示。
. |-- 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
依次執行以下命令構建并推送鏡像。
IMAGE_NAME=registry.cn-shanghai.aliyuncs.com/{NAMESPACE}/{REPO}:gemma-2b-it docker login --username=mu****@test.aliyunid.com registry.cn-shanghai.aliyuncs.com docker build -f Dockerfile -t $IMAGE_NAME . && docker push $IMAGE_NAME
以上命令中的{NAMESPACE}和{REPO}需替換為您已創建的命名空間名稱和鏡像倉庫名稱。
創建函數。
待上一步創建的函數的狀態變更為函數已激活時,您可以為其開啟閑置預留模式。
在函數詳情頁面選擇配置頁簽,在左側導航欄,選擇預留實例,然后單擊創建預留實例數策略。
在創建預留實例數策略面板中,版本或別名選擇LATEST,預留實例數設置為1,閑置模式選擇啟用,然后單擊確定。
待當前預留實例數變更為1,且您可以看到已開啟閑置模式的字樣,表示GPU閑置預留實例已成功啟動。
使用Google Gemma服務
在函數詳情頁面,選擇配置頁簽,然后在左側導航欄,選擇觸發器,在觸發器頁面獲取觸發器的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>
在函數詳情頁面,選擇實例頁簽,在實例頁面單擊目標實例ID右側操作列的實例指標,在實例詳情頁面的實例指標頁簽查看指標情況。
您可以看到在沒有函數調用發生時,該實例的顯存使用量會降至零。而當有新的函數調用請求到來時,函數計算平臺會迅速恢復并分配所需的顯存資源。從而達到降本效果。
說明查看指標的實例,需要先啟用日志功能,具體請參見配置日志。
函數調用結束后,函數計算會自動將GPU實例置為閑置模式,您無需手動操作。在下次調用到來之前,函數計算將該實例喚醒,置為活躍模式進行服務。
刪除資源
如您暫時不需要使用此函數,請及時刪除對應資源。如果您需要長期使用此應用,請忽略此步驟。
返回函數計算控制臺概覽頁面,在左側導航欄,單擊函數。
單擊目標函數右側操作列的
,在彈出的對話框中,勾選我確認要刪除以上資源,并同時刪除此函數。我已知曉這些資源刪除后將無法找回,然后單擊刪除函數。
費用說明
套餐領取
為了方便您體驗本文提供的應用,首次開通用戶可以領取試用套餐并開通函數計算服務。更多信息,請參見試用額度。試用套餐不支持抵扣磁盤使用量的費用,超出512 MB的磁盤使用量將按量付費。
資源消耗評估
函數計算配置vCPU為2核、內存為16 GB、GPU顯存為16 GB、磁盤大小為512 MB。1個閑置預留實例使用1小時,通過多次與Google Gemma進行對話,1小時內累計的活躍函數時間為20分鐘。產生的資源計費可參考以下表格內容:
計費項 | 活躍時間(20分鐘)計費 | 閑置時間(40分鐘)計費 | |
vCPU資源 |
|
| |
內存資源 |
|
| |
GPU資源 |
|
|
更多關于函數計算的計費信息,請參見計費概述。
相關文檔
關于Google發布的開源模型族Gemma的更多詳情,請參見gemma-open-models。
關于GPU實例閑置模式計費詳情以及計費示例,請參見計費概述。