在 Vertex AI 上部署 Gemma 3

今天,我们分享了Vertex AI Model Garden上提供的全新 Gemma 3 模型,让您可以立即进行微调和部署。您可以使用 Vertex AI 的预构建容器和部署工具快速将 Gemma 3 适应您的用例。 

在本文中,您将学习如何在 Vertex AI 上微调 Gemma 3 并将其部署为可用于生产的端点。

Vertex AI 上的 Gemma 3:PEFT 和 vLLM 部署

调整和部署大型语言模型需要耗费大量计算资源,而且耗时。因此,我们很高兴地宣布 Gemma 3 支持参数高效微调 (PEFT),并使用 Vertex AI Model Garden 上的 vLLM 进行优化部署。 

与完全微调相比,Gemma 3 微调可让您以更少的计算资源实现性能提升。我们基于 vLLM 的部署易于使用且速度快。vLLM 的优化推理引擎可最大程度地提高吞吐量并最大程度地减少延迟,从而确保 Vertex AI 上 Gemma 3 应用程序的响应迅速且可扩展的端点。

让我们看看如何在 Vertex AI 上微调和部署 Gemma 3 模型。

在 Vertex AI 上微调 Gemma 3

在 Vertex AI Model Garden 中,您只需几个步骤即可使用 Hugging Face 的PEFT (LoRA)对Gemma 3 进行微调和部署。在运行笔记本之前,请确保完成笔记本中描述的所有初始步骤。 

在 Vertex AI 上针对您的用例微调 Gemma 3 需要自定义数据集。建议的格式是JSONL文件,其中每行都是有效的 JSON 字符串。以下是受timdettmers/openassistant-guanaco数据集启发的示例

{"text": "### Human: Hola### Assistant: \u00a1Hola! \u00bfEn qu\u00e9 puedo ayudarte hoy?"}


JSON 对象有一个键text,它应该匹配。train_column;值应该是一个训练数据点,即一个字符串。您可以将数据集上传到Google Cloud Storage(首选)或Hugging Face 数据集

选择最适合您需求的 Gemma 3 变体。例如,要使用 1B 参数模型:

base_model_id = "gemma-3-1b-pt"


您可以灵活地自定义模型参数和作业参数。让我们来探索一些关键设置。LoRA(低秩自适应)是一种 PEFT 技术,可显著减少可训练参数的数量。以下参数控制 LoRA 的行为。lora_rank控制更新矩阵的维数(较小的秩 = 较少的参数),lora_alpha缩放 LoRA 更新,并lora_dropout添加正则化。以下设置是一个合理的起点。

lora_rank = 16
lora_alpha = 32
lora_dropout = 0.05


在微调大型语言模型 (LLM) 时,精度是一个关键考虑因素,它会影响内存使用量和性能。较低精度的训练(例如 4 位量化)可减少内存占用。但是,与 8 位或 float16 等较高精度相比,这可能会带来轻微的性能损失。该train_precision 参数决定了训练过程中使用的数值精度。选择正确的精度涉及平衡资源限制和所需的模型精度。

finetuning_precision_mode = "4bit"
train_precision = "bfloat16"


优化模型性能涉及调整影响速度、稳定性和功能的训练参数。基本参数包括per_device_train_batch_size,它决定每个 GPU 的批次大小,较大的批次大小可以加速训练,但需要更多的内存。gradient_accumulation_steps允许通过在较小批次上累积梯度来模拟较大的批次大小,提供一种节省内存的替代方案,但代价是增加训练时间。learning_rate决定优化步长,太高的速率会导致发散,而太低的速率会减慢收敛速度。lr_scheduler_type在整个训练过程中动态调整学习率,例如通过线性衰减,促进更好的收敛和准确性。并且,总训练持续时间由定义max_steps,指定总训练步骤数,或num_train_epochsmax_steps如果两者都指定,则优先。下面是您可以在官方笔记本中找到的完整训练方案。

train_job_args = [ "--config_file=vertex_vision_model_garden_peft/deepspeed_zero2_8gpu.yaml",
 "--task=instruct-lora",
 "--input_masking=True",
 "--pretrained_model_name_or_path=gg-hf-g/gemma-3-1b",
 "--train_dataset=timdettmers/openassistant-guanaco",
 "--train_split=train",
 "--train_column=text",
 "--output_dir=gs://your-adapter-repo",
 "--merge_base_and_lora_output_dir=gs://merged-model-repo",
 "--per_device_train_batch_size=1",
 "--gradient_accumulation_steps=4",
 "--lora_rank=16",
 "--lora_alpha=32",
 "--lora_dropout=0.05",
 "--max_steps=-1",
 "--max_seq_length=4096",
 "--learning_rate=5e-05",
 "--lr_scheduler_type=cosine",
 "--precision_mode=4bit",
 "--train_precision=bfloat16",
 "--gradient_checkpointing=True",
 "--num_train_epochs=1.0",
 "--attn_implementation=eager",
 "--optimizer=paged_adamw_32bit",
 "--warmup_ratio=0.01",
 "--report_to=tensorboard",
 "--logging_output_dir=gs://your-logs-repo",
 "--save_steps=10",
 "--logging_steps=10",
 "--train_template=openassistant-guanaco",
 "--huggingface_access_token=your-token",
 "--eval_dataset=timdettmers/openassistant-guanaco",
 "--eval_column=text",
 "--eval_template=openassistant-guanaco",
 "--eval_split=test",
 "--eval_steps=10",
 "--eval_metric_name=loss,perplexity,bleu",
 "--metric_for_best_model=perplexity"
]


最后,创建并运行CustomContainerTrainingJob以启动微调作业。

train_job = aiplatform.CustomContainerTrainingJob(
    display_name=job_name,
    container_uri=TRAIN_DOCKER_URI,
    labels=labels,
)

train_job.run(
    args=train_job_args,
    replica_count=replica_count,
    machine_type=training_machine_type,
    accelerator_type=training_accelerator_type,
    accelerator_count=per_node_accelerator_count,
    boot_disk_size_gb=500,
    service_account=SERVICE_ACCOUNT,
    base_output_dir=base_output_dir,
    sync=False,
    **dws_kwargs,
)

train_job.wait_for_resource_creation()


您可以使用Tensorboard监控微调进度。作业完成后,您可以将调整后的模型上传到 Vertex AI 模型注册表并将其部署为推理端点。接下来让我们深入研究部署。 

在 Vertex AI 上部署 Gemma 3

在 Vertex AI 上部署 Gemma 3 只需三个步骤,如本笔记本中所述。 

首先,您需要为 Gemma 3 模型配置一个专用端点。这为托管您的模型提供了一个可扩展且可管理的环境。您可以使用该create函数设置端点名称 ( display_name),并确保为您的模型提供专用资源 ( dedicated_endpoint_enabled)。

from google.cloud import aiplatform as vertex_ai
endpoint = vertex_ai.Endpoint.create(
        display_name="gemma3-endpoint",
        dedicated_endpoint_enabled=True,
    )


接下来,在 Vertex AI 模型注册表中注册 Gemma 3 模型。将模型注册表视为管理模型的中央枢纽。它会跟踪 Gemma 3 模型的不同版本(以防您以后进行改进),并且是您部署模型的中心位置。

vllm_serving_image_uri = "us-docker.pkg.dev/vertex-ai/vertex-vision-model-garden-dockers/pytorch-vllm-serve:20250312_0916_RC01"

env_vars = {
    "MODEL_ID": "google/gemma-3-1b-it",
    "DEPLOY_SOURCE": "notebook",
    "HF_TOKEN": "your-hf-token"
}

vllm_args = [
    "python",
    "-m",
    "vllm.entrypoints.api_server",
    "--host=0.0.0.0",
    "--port=8080",
    "--model='gs://vertex-model-garden-restricted-us/gemma3/gemma-3-1b-it'",
    "--tensor-parallel-size=1",
    "--swap-space=16",
    "--gpu-memory-utilization=0.95",
    "--max-model-len=32768",
    "--dtype="auto",
    "--max-loras=1",
    "--max-cpu-loras=8",
    "--max-num-seqs=256",
    "--disable-log-stats",
    "--trust-remote-code",
    "--enforce-eager",
    "--enable-lora",
    "--enable-chunked-prefill",
    "--enable-prefix-caching"
]

model = aiplatform.Model.upload(
    display_name="gemma-3-1b",
    serving_container_image_uri=vllm_serving_image_uri,
    serving_container_args=vllm_args,
    serving_container_ports=[8080],
    serving_container_predict_route="/generate",
    serving_container_health_route="/ping",
    serving_container_environment_variables=env_vars,
    serving_container_shared_memory_size_mb=(16 * 1024),
    serving_container_deployment_timeout=7200,
    model_garden_source_model_name="publishers/google/models/gemma3",
)


此步骤涉及一些重要的配置,包括部署 Gemma 3 的服务容器。 

要在 Vertex AI 上提供 Gemma 3,请使用 Vertex AI Model Garden vLLM预构建的 Docker 映像来快速高效地提供模型服务。vLLM 配方用于设置 vLLM 如何为 Gemma 3 提供服务,其中包括  --tensor-parallel-size允许您在需要额外计算资源时将模型分布到多个 GPU 上,--gpu-memory-utilization控制要使用的 GPU 内存量,并--max-model-len设置模型一次可以处理的最大文本长度。您还可以使用一些高级设置,例如--enable-chunked-prefill,和--enable-prefix-caching来优化性能,尤其是在处理较长的文本时。 

Vertex AI 还需要一些部署配置来为模型提供服务,包括服务容器将监听的端口(在我们的例子中为 8080),定义用于发出预测请求的 URL 路径(例如“/generate”)和用于健康检查的 URL 路径(例如“/ping”),从而允许 Vertex AI 监视模型的状态。

最后,使用upload()此配置(服务容器、模型特定设置和模型运行说明)将它们捆绑到 Vertex AI 模型注册表中一个可管理的单元中。这使得部署和版本控制变得更加容易。

现在您已准备好部署模型。要将注册的模型部署到端点,请使用deploy如下所示的方法。

model.deploy(
        endpoint=endpoint,
        machine_type="a3-highgpu-2g",
        accelerator_type="NVIDIA_L4",
        accelerator_count=1,
        deploy_request_timeout=1800,
    )


在这里,您可以为我们的部署选择计算能力,包括虚拟机的类型(如“a3-highgpu-2g”,machine_type)、加速器的类型(例如“NVIDIA_L4”GPU,accelerator_type)、使用多少个加速器(accelerator_count)。 

部署模型需要一些时间,您可以在 Cloud Logging 中监控部署状态。一旦端点运行,您就可以使用 ChatCompletion API 调用模型并将其集成到您的应用中,如下所示。

import google.auth
import openai

creds, project = google.auth.default()
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)

user_message = "How is your day going?"
max_tokens = 50
temperature = 1.0
stream = False

BASE_URL = f"https://{your-dedicated-endpoint}/v1beta1/{your-endpoint-name}"

client = openai.OpenAI(base_url=BASE_URL, api_key=creds.token)

model_response = client.chat.completions.create(
    model="",
    messages=[{"role": "user", "content": user_message}],
    temperature=temperature,
    max_tokens=max_tokens,
    stream=stream,
)

print(model_response)
# I'm doing well, thanks for asking!...


根据您部署的 Gemma 模型,您可以使用 ChatCompletion API 调用具有多模态输入(图像)的模型。您可以在模型卡笔记本的“使用 GPU 上的 vLLM 部署 Gemma 3 4B、12B 和 27B 多模态模型”部分中找到更多信息

下一步是什么?

访问Vertex AI Model Garden 上的Gemma 3 模型卡,立即开始使用。如需深入了解模型的架构和性能,请查看Gemma 3 上的开发人员指南



标签: Gemma 3

添加新评论 »