使用调优和评估提高模型性能
本文档介绍了如何创建引用 Vertex AI gemini-2.0-flash-001 模型的 BigQuery ML 远程模型。然后,本文档还会介绍如何使用监督式调优来借助新的训练数据对模型进行调优,随后是使用 ML.EVALUATE 函数 评估函数。
调优可以帮助您应对需要自定义托管 Vertex AI 模型的场景,例如模型的预期行为难以在提示中简洁定义,或者提示无法产生一致性足够好的预期结果。监督式调优还会通过以下方式影响模型:
- 引导模型返回特定的响应样式,例如更简洁或更详细。
- 训练模型的新行为,例如以特定角色来响应提示。
- 使模型使用新信息自行更新。
在本教程中,目标是让模型生成的文本在风格和内容上尽可能贴近提供的标准答案内容。
所需的角色
如需运行本教程,您需要拥有以下 Identity and Access Management (IAM) 角色:
- 创建和使用 BigQuery 数据集、连接和模型:BigQuery Admin (roles/bigquery.admin)。
- 向连接的服务账号授予权限:Project IAM Admin (roles/resourcemanager.projectIamAdmin)。
这些预定义角色包含执行本文档中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
- 创建数据集:bigquery.datasets.create
- 创建表:bigquery.tables.create
- 创建、委托和使用连接:bigquery.connections.*
- 设置默认连接:bigquery.config.*
- 设置服务账号权限:resourcemanager.projects.getIamPolicy和resourcemanager.projects.setIamPolicy
- 创建模型并运行推断:- bigquery.jobs.create
- bigquery.models.create
- bigquery.models.getData
- bigquery.models.updateData
- bigquery.models.updateMetadata
 
准备工作
- 
  
   
   
     
   
  
   
   
     
   
  
 
   
 
 
  
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
   
   
  
   
   
  
 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
   
   
  
   
   
  
 
 
  
  
    
      Enable the BigQuery, BigQuery Connection, Vertex AI, and Compute Engine APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
- BigQuery: You incur costs for the queries that you run in BigQuery.
- BigQuery ML: You incur costs for the model that you create and the processing that you perform in BigQuery ML.
- Vertex AI: You incur costs for calls to and
  supervised tuning of the gemini-1.0-flash-002model.
 
 
 
  如需根据您的预计使用量来估算费用,请使用价格计算器。
  
如需了解详情,请参阅以下资源:
创建数据集
创建 BigQuery 数据集以存储机器学习模型。
控制台
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在探索器窗格中,点击您的项目名称。 
- 点击 查看操作 > 创建数据集 
- 在 创建数据集 页面上,执行以下操作: - 在数据集 ID 部分,输入 - bqml_tutorial。
- 在位置类型部分,选择多区域,然后选择 US (multiple regions in United States)(美国[美国的多个区域])。 
- 保持其余默认设置不变,然后点击创建数据集。 
 
bq
如需创建新数据集,请使用带有 --location 标志的 bq mk 命令。 如需查看完整的潜在参数列表,请参阅 bq mk --dataset 命令参考文档。
- 创建一个名为 - bqml_tutorial的数据集,并将数据位置设置为- US,说明为- BigQuery ML tutorial dataset:- bq --location=US mk -d \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial - 该命令使用的不是 - --dataset标志,而是- -d快捷方式。如果省略- -d和- --dataset,该命令会默认创建一个数据集。
- 确认已创建数据集: - bq ls
API
使用已定义的数据集资源调用 datasets.insert 方法。
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
BigQuery DataFrame
在尝试此示例之前,请按照《BigQuery 快速入门:使用 BigQuery DataFrames》中的 BigQuery DataFrames 设置说明进行操作。如需了解详情,请参阅 BigQuery DataFrames 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭证。如需了解详情,请参阅为本地开发环境设置 ADC。
创建测试表
根据来自 Hugging Face 的公共 task955_wiki_auto_style_transfer 数据集创建训练和评估数据表。
- 打开 Cloud Shell。 
- 在 Cloud Shell 中,运行以下命令以创建测试数据表和评估数据表: - python3 -m pip install pandas pyarrow fsspec huggingface_hub python3 -c "import pandas as pd; df_train = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/train-00000-of-00001.parquet').drop('id', axis=1); df_train['output'] = [x[0] for x in df_train['output']]; df_train.to_json('wiki_auto_style_transfer_train.jsonl', orient='records', lines=True);" python3 -c "import pandas as pd; df_valid = pd.read_parquet('hf://datasets/Lots-of-LoRAs/task955_wiki_auto_style_transfer/data/valid-00000-of-00001.parquet').drop('id', axis=1); df_valid['output'] = [x[0] for x in df_valid['output']]; df_valid.to_json('wiki_auto_style_transfer_valid.jsonl', orient='records', lines=True);" bq rm -t bqml_tutorial.wiki_auto_style_transfer_train bq rm -t bqml_tutorial.wiki_auto_style_transfer_valid bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_train wiki_auto_style_transfer_train.jsonl input:STRING,output:STRING bq load --source_format=NEWLINE_DELIMITED_JSON bqml_tutorial.wiki_auto_style_transfer_valid wiki_auto_style_transfer_valid.jsonl input:STRING,output:STRING
创建基准模型
基于 Vertex AI gemini-1.0-flash-002 模型创建远程模型。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句以创建远程模型: - CREATE OR REPLACE MODEL `bqml_tutorial.gemini_baseline` REMOTE WITH CONNECTION DEFAULT OPTIONS (ENDPOINT ='gemini-2.0-flash-001'); - 查询需要几秒钟才能完成,之后 - gemini_baseline模型会显示在探索器窗格的- bqml_tutorial数据集中。由于查询使用- CREATE MODEL语句来创建模型,因此没有查询结果。
检查基准模型性能
使用远程模型运行 ML.GENERATE_TEXT 函数,以查看其在不进行任何调优的情况下处理评估数据的表现。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句: - SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output)); - 如果您检查输出数据并比较 - ml_generate_text_llm_result和- ground_truth值,则会发现虽然基准模型生成的文本能够准确反映标准答案内容中提供的事实,但文本的风格却大相径庭。
评估基准模型
如需对模型性能执行更详细的评估,请使用 ML.EVALUATE 函数。此函数会计算模型指标,用于衡量所生成文本的准确率和质量,以查看模型的回答与理想回答的对比情况。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句: - SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_baseline`, ( SELECT input AS input_text, output AS output_text FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type)); 
输出类似于以下内容:
   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.23317359667074181 | 0.37809145226740043 | 0.45902937167791508 | 0.40956844061733139 | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   您可以看到,基准模型的表现还不错,但根据评估指标,生成的文本与标准答案的相似度较低。这表明有必要执行监督式调优,以了解是否可提升针对此应用场景的模型性能。
创建已调参模型
创建一个与创建模型中所创建的模型非常相似的远程模型,但这次指定 AS SELECT 子句,提供训练数据以对模型进行调优。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句以创建远程模型: - CREATE OR REPLACE MODEL `bqml_tutorial.gemini_tuned` REMOTE WITH CONNECTION DEFAULT OPTIONS ( endpoint = 'gemini-2.0-flash-001', max_iterations = 500, data_split_method = 'no_split') AS SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_train`; - 查询需要几分钟才能完成,之后 - gemini_tuned模型会显示在探索器窗格的- bqml_tutorial数据集中。由于查询使用- CREATE MODEL语句来创建模型,因此没有查询结果。
检查调优后的模型性能
运行 ML.GENERATE_TEXT 函数以查看调优后模型在评估数据上的表现。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句: - SELECT ml_generate_text_llm_result, ground_truth FROM ML.GENERATE_TEXT( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS ground_truth FROM `bqml_tutorial.wiki_auto_style_transfer_valid` LIMIT 10 ), STRUCT(TRUE AS flatten_json_output)); - 如果您检查输出数据,则会发现调优后的模型生成的文本在风格上与标准答案内容的相似度显著提高。 
评估调优后的模型
使用 ML.EVALUATE 函数查看经过调优的模型的响应与理想响应的对比情况。
- 在 Google Cloud 控制台中,前往 BigQuery 页面。 
- 在查询编辑器中,运行以下语句: - SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.gemini_tuned`, ( SELECT input AS prompt, output AS label FROM `bqml_tutorial.wiki_auto_style_transfer_valid` ), STRUCT('text_generation' AS task_type)); 
输出类似于以下内容:
   +---------------------+---------------------+-------------------------------------------+--------------------------------------------+
   | bleu4_score         | rouge-l_precision   | rouge-l_recall      | rouge-l_f1_score    | evaluation_status                          |
   +---------------------+---------------------+---------------------+---------------------+--------------------------------------------+
   | 0.416868792119966   | 0.642001000843349   | 0.55910008048151372 | 0.5907226262084847  | {                                          |
   |                     |                     |                     |                     |  "num_successful_rows": 176,               |
   |                     |                     |                     |                     |  "num_total_rows": 176                     |
   |                     |                     |                     |                     | }                                          |
   +---------------------+---------------------+ --------------------+---------------------+--------------------------------------------+
   您可以看到,虽然训练数据集仅使用 1,408 个样本,但是如更高的评估指标所示,模型性能显著提高。
清理
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.