在 GCP 上使用 Learning Interpretability Tool (LIT) 进行 LLM 提示调试

1. 概览

本实验将详细介绍如何在 Google Cloud Platform (GCP) 上部署 LIT 应用服务器,以与 Vertex AI Gemini 基础模型和自托管的第三方大语言模型 (LLM) 进行交互。其中还包含有关如何使用 LIT 界面进行快速调试和模型解读的指南。

通过本实验,用户将学习如何:

  • 在 GCP 上配置 LIT 服务器。
  • 将 LIT 服务器连接到 Vertex AI Gemini 模型或其他自托管 LLM。
  • 利用 LIT 界面分析、调试和解读提示,以获得更好的模型性能和数据洞见。

什么是 LIT?

LIT 是一款直观、交互式且支持文本、图片和表格数据的模型理解工具。它可以作为独立服务器运行,也可以在 Google Colab、Jupyter 和 Google Cloud Vertex AI 等笔记本环境中运行。LIT 可从 PyPIGitHub 获取。

该工具最初旨在理解分类和回归模型,但近期的更新添加了用于调试 LLM 提示的工具,可让您探索用户、模型和系统内容如何影响生成行为。

什么是 Vertex AI 和 Model Garden?

Vertex AI 是一个机器学习 (ML) 平台,可让您训练和部署机器学习模型和 AI 应用,以及自定义 LLM,以在依托 AI 技术的应用中使用。Vertex AI 结合了数据工程、数据科学和机器学习工程工作流,使您的团队能够使用通用工具集进行协作,并利用 Google Cloud 的优势扩展应用。

Vertex Model Garden 是一个机器学习模型库,可帮助您发现、测试、自定义和部署 Google 拥有的以及部分第三方模型和资产。

您将执行的操作

您将使用 Google Cloud ShellCloud Run 从 LIT 的预构建映像部署 Docker 容器。

Cloud Run 是一个托管式计算平台,可让您直接在 Google 可伸缩的基础架构(包括 GPU)之上运行容器。

数据集

该演示默认使用 LIT 问题调试示例数据集,您也可以通过界面加载自己的数据集。

准备工作

在本参考指南中,您需要一个 Google Cloud 项目。您可以创建一个新项目,也可以选择已创建的项目。

2. 启动 Google Cloud 控制台和 Cloud Shell

在此步骤中,您将启动 Google Cloud 控制台并使用 Google Cloud Shell。

2-a:启动 Google Cloud 控制台

启动浏览器,然后前往 Google Cloud 控制台

Google Cloud 控制台是一个功能强大且安全的 Web 管理界面,可让您快速管理 Google Cloud 资源。它是一款随时随地使用的 DevOps 工具。

2-b:启动 Google Cloud Shell

Cloud Shell 是一个可从浏览器访问的在线开发和运营环境。您可以利用其预加载了实用工具(如 gcloud 命令行工具、kubectl 等)的在线终端管理资源,您还可以使用在线 Cloud Shell Editor 开发、构建、调试和部署云端应用。Cloud Shell 为开发者提供了一个预安装了常用工具集且具有 5GB 永久性存储空间的在线环境。您将在后续步骤中使用命令提示符。

使用菜单栏右上角的图标(在以下屏幕截图中用蓝色圈出)启动 Google Cloud Shell。

Google Cloud 控制台发布

您应该会在页面底部看到一个带有 Bash shell 的终端。

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 应用服务器 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 服务网址

然后,您应该能够查看 LIT 界面。如果您遇到错误,请参阅“问题排查”部分。

LIT 演示首页

您可以查看“LOGS”部分,以监控活动、查看错误消息以及跟踪部署进度。

Google Cloud 控制台 Cloud Run 日志

您可以查看“指标”部分,以查看服务的指标。

Google Cloud 控制台 Cloud Run 指标

3-c:加载数据集

点击 LIT 界面中的 Configure 选项,然后选择 Dataset。通过指定名称和提供数据集网址来加载数据集。数据集格式应为 .jsonl,其中每个记录都包含 prompt 以及可选的 targetsource 字段。

LIT 加载数据集

4. 在 Vertex AI Model Garden 中准备 Gemini 模型

Vertex AI API 提供 Google 的 Gemini 基础模型。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 界面中的 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 服务网址

您可以查看“日志”部分,以监控活动、查看错误消息以及跟踪部署进度。

Google Cloud 控制台 Cloud Run 日志

您可以查看“指标”部分,以查看服务的指标。

Google Cloud 控制台 Cloud Run 指标

5-d:加载自托管模型

如果您在第 3 步中为 LIT 服务器设置了代理(请参阅“问题排查”部分),则需要运行以下命令来获取 GCP 身份令牌。

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

您将按照以下步骤加载自托管模型并调整其参数。

  1. 点击 LIT 界面中的 Configure 选项。
  2. 选择 Select a base model 选项下的 LLM (self hosted) 选项。
  3. 您需要在 new_name 中为模型命名。
  4. 将模型服务器网址输入为 base_url
  5. 如果您代理 LIT 应用服务器,请在 identity_token 中输入获取的身份令牌(请参阅第 3 步和第 7 步)。否则,请将其留空。
  6. 点击 Load Model
  7. 点击 Submit

LIT 加载 LLM 模型

6. 与 GCP 上的 LIT 交互

LIT 提供了丰富的功能,可帮助您调试和了解模型行为。您可以执行一些简单的操作,例如在框中输入文本并查看模型预测结果,也可以使用 LIT 的强大功能套件深入检查模型,包括:

6-a:通过 LIT 查询模型

LIT 会在加载模型和数据集后自动查询数据集。您可以通过在列中选择相应回答来查看每个模型的回答。

LIT 视图响应

LIT 响应

6-b:使用序列显眼度技术

目前,LIT 上的序列重要性技术仅支持自托管模型。

序列重要性是一种可视化工具,可通过突出显示哪些提示部分对给定输出最为重要,从而帮助调试 LLM 提示。如需详细了解序列重要性,请参阅完整的教程,详细了解如何使用此功能。

如需查看显眼度结果,请点击提示或回答中的任何输入或输出,系统便会显示显眼度结果。

LIT 序列 salience 结果

6-c:手动修改提示和目标

借助 LIT,您可以手动修改现有数据点的任何 prompttarget。点击 Add 即可将新输入添加到数据集中。

LIT 手动修改

6-d:并排比较提示

借助 LIT,您可以并排比较原始示例和修改后的示例中的提示。您可以手动修改示例,并同时查看原始版本和修改后的版本的预测结果和序列重要性分析。您可以修改每个数据点的提示,LIT 将通过查询模型生成相应的回答。

LIT 比较数据集

6-e:并排比较多个模型

借助 LIT,您可以并排比较模型在单个文本生成和评分示例上的表现,以及在针对特定指标的汇总示例上的表现。通过查询各种已加载的模型,您可以轻松比较其回答的差异。

LIT 比较模型响应

6-f:自动反事实生成器

您可以使用自动反事实生成器创建备选输入,并立即查看模型在这些输入上的行为方式。

LIT 自动生成输入

6-g:评估模型性能

您可以使用整个数据集或过滤或选择的示例的任何子集的指标(目前支持 BLEU 和 ROUGE 得分)评估模型性能。

LIT 视图模型指标

7. 问题排查

7-a:可能的访问权限问题和解决方案

由于在部署到 Cloud Run 时会应用 --no-allow-unauthenticated,因此您可能会遇到禁止错误,如下所示。

Google Cloud 禁止访问错误

您可以通过两种方式访问 LIT App 服务。

1. 代理到本地服务

您可以使用以下命令将服务代理到本地主机。

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

然后,您应该能够通过点击代理服务链接来访问 LIT 服务器。

2. 直接对用户进行身份验证

您可以点击此链接对用户进行身份验证,以便他们直接访问 LIT App 服务。这种方法还可以让一组用户访问该服务。对于涉及与多名人员协作开发的项目,这是更有效的选择。

7-b:检查以确保模型服务器已成功启动

为确保模型服务器已成功启动,您可以发送请求直接查询模型服务器。模型服务器提供三个端点: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-a 部分。

8. 恭喜

恭喜您完成此 Codelab!是时候放松一下了!

清理

如需清理实验室,请删除为实验室创建的所有 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 工具功能:

联系人

如有任何关于此 Codelab 的问题或疑问,请通过 GitHub 与我们联系。

许可

此作品已获得 Creative Commons Attribution 4.0 通用许可授权。