使用 GCP 的學習可解釋性工具 (LIT) 對 LLM 提示偵錯

在 GCP 上使用學習技術可解釋性工具 (LIT) 進行 LLM 提示偵錯

程式碼研究室簡介

subject上次更新時間:10月 30, 2024
account_circle作者:Fan Ye

1. 總覽

本研究室將詳細說明如何在 Google Cloud Platform (GCP) 上部署 LIT 應用程式伺服器,以便與 Vertex AI Gemini 基礎模型和自管的第三方大型語言模型 (LLM) 互動。並提供如何使用 LIT UI 進行快速偵錯和模型解讀的操作說明。

在本實驗室中,使用者將學習如何:

  • 在 GCP 上設定 LIT 伺服器。
  • 將 LIT 伺服器連線至 Vertex AI Gemini 模型或其他自架式 LLM。
  • 利用 LIT UI 分析、偵錯及解讀提示,以改善模型效能和洞察資料。

LIT 是一項可視覺化呈現互動式模型的工具,支援文字、圖片和表格資料。它可以做為獨立伺服器執行,也可以在 Google Colab、Jupyter 和 Google Cloud Vertex AI 等筆記本環境中運作。您可以透過 PyPIGitHub 取得 LIT。

這個工具原本是用來瞭解分類和迴歸模型,但最近的更新版本新增了調試 LLM 提示的工具,方便您探索使用者、模型和系統內容如何影響生成行為。

什麼是 Vertex AI 和 Model Garden?

Vertex AI 是機器學習 (ML) 平台,可讓您訓練及部署 ML 模型和 AI 應用程式,並自訂 LLM 用於 AI 技術輔助應用程式。Vertex AI 結合了資料工程、數據資料學和機器學習工程工作流程,可讓您的團隊使用通用的工具組協同合作,並運用 Google Cloud 的優勢擴充應用程式。

Vertex Model Garden 是機器學習模型程式庫,可協助您探索、測試、自訂及部署 Google 專屬模型和特定第三方模型和資產。

您需要採取的行動

您將使用 Google Cloud ShellCloud Run,透過 LIT 預先建立的映像檔部署 Docker 容器。

Cloud Run 是代管運算平台,可讓您直接在 Google 的可擴充基礎架構 (包括 GPU) 上執行容器。

資料集

這個示範會預設使用 LIT 提示偵錯的範例資料集,您也可以透過 UI 載入自己的資料集。

事前準備

您需要有 Google Cloud 專案才能使用本參考指南。您可以建立新專案,或選取已建立的專案。

2. 啟動 Google Cloud 控制台和 Cloud Shell

您將啟動 Google Cloud 控制台,並在這個步驟中使用 Google Cloud Shell。

2-a:啟動 Google Cloud 控制台

啟動瀏覽器,然後前往 Google Cloud 控制台

Google Cloud 控制台是功能強大又安全的網路管理員介面,可協助您快速管理 Google Cloud 資源。這項開發運作工具可隨身帶著走。

2-b:啟動 Google Cloud Shell

Cloud Shell 是線上開發與作業環境,可透過瀏覽器隨時隨地存取。Cloud Shell 的線上終端機已預先載入 kubectl、gcloud 指令列工具等公用程式,方便您管理資源。您也可以使用線上 Cloud Shell 編輯器開發、建構、偵錯及部署雲端式應用程式。Cloud Shell 提供開發人員可立即使用的線上環境,內含預先安裝的常用工具組合,以及 5 GB 的永久儲存空間。您將在接下來的步驟中使用命令提示字元。

使用選單列右上方的圖示 (在下方螢幕截圖中以藍色標示) 啟動 Google Cloud Shell。

Google Cloud 控制台推出

您應該會在頁面底部看到含有 Bash 殼層的終端機。

Google Cloud Console

2-c:設定 Google Cloud 專案

您必須使用 gcloud 指令設定專案 ID 和專案區域。

# Set your GCP Project ID.
gcloud config set project your-project-id

# Set your GCP Project Region.
gcloud config set run/region your-project-region

3. 透過 Cloud Run 部署 LIT App Server Docker 映像檔

3-a:將 LIT 應用程式部署至 Cloud Run

您必須先將最新版的 LIT-App 設為要部署的版本。

# Set latest version as your LIT_SERVICE_TAG.
export LIT_SERVICE_TAG=latest
# List all the public LIT GCP App server docker images.
gcloud container images  list
-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app

設定版本標記後,您需要為服務命名。

# Set your lit service name. While 'lit-app-service' is provided as a placeholder, you can customize the service name based on your preferences.
export LIT_SERVICE_NAME=lit-app-service

完成後,您可以執行下列指令,將容器部署至 Cloud Run。

# Use below cmd to deploy the LIT App to Cloud Run.
gcloud run deploy $LIT_SERVICE_NAME
\
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-lit-app:$LIT_SERVICE_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--no-allow-unauthenticated

LIT 也可讓您在啟動伺服器時新增資料集。如要這麼做,請使用 name:path 格式 (例如 data_foo:/bar/data_2024.jsonl) 設定 DATASETS 變數,以便納入要載入的資料。資料集格式應為 .jsonl,其中每筆記錄都包含 prompt 和選用的 targetsource 欄位。如要載入多個資料集,請以半形逗號分隔。如果未設定,LIT 會載入提示偵錯的範例資料集

# Set the dataset.
export DATASETS=[DATASETS]

設定 MAX_EXAMPLES 後,您就能設定從每個評估集合載入的示例數量上限。

# Set the max examples.
export MAX_EXAMPLES=[MAX_EXAMPLES]

接著,您可以在部署指令中新增

--set-env-vars "DATASETS=$DATASETS" \
--set-env-vars "MAX_EXAMPLES=$MAX_EXAMPLES" \

3-b:查看 LIT 應用程式服務

建立 LIT 應用程式伺服器後,您可以在 Cloud 控制台的「Cloud Run」部分找到該服務。

選取剛建立的 LIT 應用程式服務。請確認服務名稱與 LIT_SERVICE_NAME 相同。

Google Cloud 控制台 Cloud Run 清單

您可以按一下剛部署的服務,找到服務網址。

Google Cloud Find Service 網址

您應該可以查看 LIT 使用者介面。如果發生錯誤,請參閱「疑難排解」一節。

LIT 示範主頁

您可以查看「LOGS」部分,監控活動、查看錯誤訊息,以及追蹤部署作業的進度。

Google Cloud 控制台 Cloud Run 記錄檔

您可以查看「指標」部分,查看服務的指標。

Google Cloud 控制台 Cloud Run 指標

3-c:載入資料集

按一下 LIT UI 中的 Configure 選項,然後選取 Dataset。指定名稱並提供資料集網址,即可載入資料集。資料集格式應為 .jsonl,其中每筆記錄都包含 prompt 和選用的 targetsource 欄位。

LIT 負載資料集

4. 在 Vertex AI Model Garden 中準備 Gemini 模型

Google 的 Gemini 基礎模型可透過 Vertex AI API 取得。LIT 提供 VertexAIModelGarden 模型包裝函式,可使用這些模型進行產生。只要指定所需版本 (例如「gemini-1.5-pro-001」) 使用這些模型的一大優點,就是不需要額外努力就能部署。根據預設,您可以在 GCP 上立即存取 Gemini 1.0 Pro 和 Gemini 1.5 Pro 等模型,無需額外設定步驟。

4-a:授予 Vertex AI 權限

如要在 GCP 中查詢 Gemini,您必須將 服務帳戶授予 Vertex AI 權限。請確認服務帳戶名稱為 Default compute service account。複製帳戶的服務帳戶電子郵件地址。

GCP 的服務帳戶

IAM 許可清單中,將服務帳戶電子郵件地址新增為具有 Vertex AI User 角色的實體。

新增服務帳戶電子郵件地址

4-b:載入 Gemini 模型

您將按照下列步驟載入 Gemini 模型並調整參數。

    1. 按一下 LIT UI 中的 Configure 選項。
    1. 選取 Select a base model 選項下方的 gemini 選項。
    1. 您必須在 new_name 中為模型命名。
    1. 將所選 Gemini 模型輸入為 model_name
    1. 按一下「Load Model」。
    1. 按一下「Submit」。

LIT 負載 Gemini 模型

5. 在 GCP 上部署自行代管的 LLM 模型伺服器

透過 LIT 的模型伺服器 Docker 映像檔自行託管 LLM,您就能使用 LIT 的顯著性和權杖化函式,深入瞭解模型行為。模型伺服器映像檔可搭配 KerasNLPHugging Face Transformers 模型使用,包括程式庫提供和自行代管的權重 (例如 Google Cloud Storage 上的權重)。

5-a:設定模型

每個容器都會載入一個模型,並使用環境變數進行設定。

您應設定 MODEL_CONFIG,指定要載入的模型。格式應為 name:path,例如 model_foo:model_foo_path。路徑可以是網址、本機檔案路徑,或是已設定深度學習架構的預設值名稱 (詳情請參閱下表)。這個伺服器已針對所有支援的 DL_FRAMEWORK 值,使用 Gemma、GPT2、Llama 和 Mistral 進行測試。其他模型應該也能正常運作,但使用者可能需要進行調整。

# Set models you want to load. While 'gemma2b is given as a placeholder, you can load your preferred model by following the instructions above.
export MODEL_CONFIG=gemma2b:gemma_2b_en

此外,LIT 模型伺服器可讓您使用下列指令設定各種環境變數。詳情請參閱下表。請注意,每個變數都必須個別設定。

# Customize the variable value as needed.
export [VARIABLE]=[VALUE]

變數

說明

DL_FRAMEWORK

kerasnlptransformers

用於將模型權重載入指定執行階段的模擬程式庫。預設值為 kerasnlp

DL_RUNTIME

torchtensorflow

模型執行的深度學習後端架構。此伺服器載入的所有模型都會使用相同的後端,不相容的情況會導致錯誤。預設值為 torch

精確度

bfloat16float32

LLM 模型的浮點精確度。預設值為 bfloat16

BATCH_SIZE

正整數

每批次要處理的範例數量。預設值為 1

SEQUENCE_LENGTH

正整數

輸入提示的順序上限加上產生的文字。預設值為 512

5-b:將模型伺服器部署至 Cloud Run

您必須先將最新版本的 Model Server 設為要部署的版本。

# Set latest as MODEL_VERSION_TAG.
export MODEL_VERSION_TAG=latest
# List all the public LIT GCP model server docker images.
gcloud container images  list
-tags  us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server

設定版本標記後,您需要為 model-server 命名。

# Set your Service name.
export MODEL_SERVICE_NAME='gemma2b-model-server'

完成後,您可以執行下列指令,將容器部署至 Cloud Run。如未設定環境變數,系統會套用預設值。由於大多數 LLM 都需要昂貴的運算資源,因此強烈建議您使用 GPU。如果您只想在 CPU 上執行 (這對 GPT2 等小型模型來說相當實用),可以移除相關的引數 --gpu 1 --gpu-type nvidia-l4 --max-instances 7

# Deploy the model service container.
gcloud beta run deploy $MODEL_SERVICE_NAME \
--image us-east4-docker.pkg.dev/lit-demos/lit-app/gcp-model-server:$MODEL_VERSION_TAG \
--port 5432 \
--cpu 8 \
--memory 32Gi \
--no-cpu-throttling \
--gpu 1 \
--gpu-type nvidia-l4  \
--max-instances 7  \
--set-env-vars "MODEL_CONFIG=$MODEL_CONFIG" \
--no-allow-unauthenticated

此外,您也可以新增下列指令來自訂環境變數。只納入您特定需求所需的環境變數。

--set-env-vars "DL_FRAMEWORK=$DL_FRAMEWORK" \
--set-env-vars "DL_RUNTIME=$DL_RUNTIME" \
--set-env-vars "PRECISION=$PRECISION" \
--set-env-vars "BATCH_SIZE=$BATCH_SIZE" \
--set-env-vars "SEQUENCE_LENGTH=$SEQUENCE_LENGTH" \

可能需要額外的環境變數才能存取特定模型。請參閱 Kaggle Hub (適用於 KerasNLP 模型) 和 Hugging Face Hub 的操作說明。

5-c:存取模型伺服器

建立模型伺服器後,您可以在 GCP 專案的「Cloud Run」部分找到已啟動的服務。

選取剛建立的模型伺服器。請確認服務名稱與 MODEL_SERVICE_NAME 相同。

Google Cloud 控制台 Cloud Run 清單

您可以按一下剛部署的模型服務,找到服務網址。

Google Cloud Find Service 網址

您可以查看「LOGS」部分,監控活動、查看錯誤訊息,以及追蹤部署作業的進度。

Google Cloud 控制台 Cloud Run 記錄檔

您可以查看「指標」部分,查看服務的指標。

Google Cloud 控制台 Cloud Run 指標

5-d:載入自行代管的模型

如果您在步驟 3 中為 LIT 伺服器設定 Proxy (請參閱「疑難排解」一節),就必須執行下列指令來取得 GCP 身分權杖。

# Find your GCP identity token.
gcloud auth
print-identity-token

您將按照下列步驟載入自行託管的模型並調整參數。

  1. 按一下 LIT UI 中的 Configure 選項。
  2. 選取「Select a base model」選項下方的「LLM (self hosted)」選項。
  3. 您必須在 new_name 中命名模型。
  4. 輸入模型伺服器網址做為 base_url
  5. 如果您要代理 LIT 應用程式伺服器 (請參閱步驟 3 和步驟 7),請在 identity_token 中輸入取得的 ID 權杖。否則請將這個欄位留空。
  6. 按一下「Load Model」。
  7. 按一下「Submit」。

使用 LIT 載入大型語言模型

6. 在 GCP 上與 LIT 互動

LIT 提供豐富的功能,協助您偵錯及瞭解模型行為。LIT 提供許多強大功能,包括查詢模型、在方塊中輸入文字並查看模型預測結果,或是深入檢查模型。這些功能包括:

6-a:透過 LIT 查詢模型

載入模型和資料集後,LIT 會自動查詢資料集。您可以選取資料欄中的回應,查看各模型的回應。

LIT 查看回應

LIT 回應

6-b:使用序列醒目顯示技巧

LIT 的序列顯著性技術目前僅支援自行託管的模型。

序列醒目顯示是一種視覺化工具,可協助偵錯 LLM 提示,並醒目顯示提示中對特定輸出內容而言最重要的部分。如要進一步瞭解「序列聲」功能,請參閱完整的教學課程,進一步瞭解如何使用這項功能。

如要查看重要性結果,請點選提示或回覆中的任何輸入或輸出內容,系統就會顯示重要性結果。

LIT 序列顯著性結果

6-c:手動編輯提示和目標

LIT 可讓您手動編輯現有資料點的任何 prompttarget。按一下 Add 後,系統就會將新輸入內容新增至資料集。

LIT 手動編輯

6-d:並排比較提示

您可以使用 LIT 並排比較原始和編輯後的提示。您可以手動編輯範例,並同時查看原始版本的預測結果和序列顯著性分析。您可以修改每個資料點的提示,LIT 會透過查詢模型產生對應的回應。

LIT 比較資料集

6-e:並列比較多個模型

透過 LIT,您可以並排比較個別文字生成和評分示例的模型,以及特定指標的匯總示例。只要查詢各種已載入的模型,就能輕鬆比較各模型的回應差異。

LIT Compare Model Response

6-f:自動對照式產生器

您可以使用自動對照生成器建立其他輸入內容,並立即查看模型對這些內容的行為。

自動產生輸入內容

6-g:評估模型成效

您可以使用指標 (目前支援 BLEU 和 ROUGE 分數,用於文字產生) 評估整個資料集的模型成效,或是篩選或選取的任何子集範例。

LIT 檢視模式指標

7. 疑難排解

7-a:潛在存取權問題和解決方案

由於 --no-allow-unauthenticated 會在部署至 Cloud Run 時套用,因此您可能會遇到下列禁止錯誤。

Google Cloud 禁止錯誤

存取 LIT App 服務的方法有兩種。

1. 將 Proxy 連線至本機服務

您可以使用下列指令,將服務代理至本機主機。

# Proxy the service to local host.
gcloud run services proxy $LIT_SERVICE_NAME

接著,您應該可以點選代理服務連結,存取 LIT 伺服器。

2. 直接驗證使用者

您可以點選這個連結來驗證使用者,以便直接存取 LIT 應用程式服務。這個方法也可以讓一群使用者存取服務。如果是多人協作的開發作業,這會是更有效的做法。

7-b:檢查 Model Server 是否已成功啟動

如要確保模型伺服器已成功啟動,您可以傳送要求來直接查詢模型伺服器。模型伺服器提供三個端點:predicttokenizesalience。請務必在要求中提供 prompt 欄位和 target 欄位。

# Query the model server predict endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/predict -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server tokenize endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/tokenize -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

# Query the model server salience endpoint.
curl -X POST  http://YOUR_MODEL_SERVER_URL/salience -H "Content-Type: application/json" -d '{"inputs":[{"prompt":"[YOUR PROMPT]", "target":[YOUR TARGET]}]}'

如果您遇到存取權問題,請參閱上方的第 7 節。

8. 恭喜

恭喜您完成程式碼研究室!放鬆一下!

清除所用資源

如要清理實驗室,請刪除為實驗室建立的所有 Google Cloud 服務。使用 Google Cloud Shell 執行下列指令。

如果 Google Cloud 連線因閒置而中斷,請按照先前的步驟重設變數。

# Delete the LIT App Service.
gcloud run services
delete $LIT_SERVICE_NAME

如果您啟動了模型伺服器,也必須刪除模型伺服器。

# Delete the Model Service.
gcloud run services
delete $MODEL_SERVICE_NAME

其他資訊

請參閱下列資源,繼續學習 LIT 工具的功能:

聯絡人

如果對本程式碼研究室有任何疑問或問題,請前往 GitHub 與我們聯絡。

授權

這項內容採用的授權為 Creative Commons 姓名標示 4.0 通用授權。