在 Vertex AI 上部署 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 Model Garden 中,您只需几个步骤即可使用 Hugging Face 的对Gemma 3 进行微调和部署。在运行笔记本之前,请确保完成中描述的所有初始步骤。 在 Vertex AI 上针对您的用例微调 Gemma 3 需要自定义数据集。建议的格式是数据集启发的示例: JSON 对象有一个键 选择最适合您需求的 Gemma 3 变体。例如,要使用 1B 参数模型: 您可以灵活地自定义模型参数和作业参数。让我们来探索一些关键设置。LoRA(低秩自适应)是一种 PEFT 技术,可显著减少可训练参数的数量。以下参数控制 LoRA 的行为。 在微调大型语言模型 (LLM) 时,精度是一个关键考虑因素,它会影响内存使用量和性能。较低精度的训练(例如 4 位量化)可减少内存占用。但是,与 8 位或 float16 等较高精度相比,这可能会带来轻微的性能损失。该 优化模型性能涉及调整影响速度、稳定性和功能的训练参数。基本参数包括 最后,创建并运行 监控微调进度。作业完成后,您可以将调整后的模型上传到 Vertex AI 模型注册表并将其部署为推理端点。接下来让我们深入研究部署。 在 Vertex AI 上部署 Gemma 3 只需三个步骤,如本中所述。 首先,您需要为 Gemma 3 模型配置一个专用端点。这为托管您的模型提供了一个可扩展且可管理的环境。您可以使用该 接下来,在 Vertex AI 模型注册表中注册 Gemma 3 模型。将模型注册表视为管理模型的中央枢纽。它会跟踪 Gemma 3 模型的不同版本(以防您以后进行改进),并且是您部署模型的中心位置。 此步骤涉及一些重要的配置,包括部署 Gemma 3 的服务容器。 要在 Vertex AI 上提供 Gemma 3,请使用 Vertex AI Model Garden 预构建的 Docker 映像来快速高效地提供模型服务。vLLM 配方用于设置 vLLM 如何为 Gemma 3 提供服务,其中包括 Vertex AI 还需要一些部署配置来为模型提供服务,包括服务容器将监听的端口(在我们的例子中为 8080),定义用于发出预测请求的 URL 路径(例如“/generate”)和用于健康检查的 URL 路径(例如“/ping”),从而允许 Vertex AI 监视模型的状态。 最后,使用 现在您已准备好部署模型。要将注册的模型部署到端点,请使用 在这里,您可以为我们的部署选择计算能力,包括虚拟机的类型(如“a3-highgpu-2g”, 部署模型需要一些时间,您可以在 Cloud Logging 中监控部署状态。一旦端点运行,您就可以使用 ChatCompletion API 调用模型并将其集成到您的应用中,如下所示。 根据您部署的 Gemma 模型,您可以使用 ChatCompletion API 调用具有多模态输入(图像)的模型。您可以在模型卡笔记本的“使用 GPU 上的 vLLM 部署 Gemma 3 4B、12B 和 27B 多模态模型”部分中找到更多。 访问Vertex AI Model Garden 上的立即开始使用。如需深入了解模型的架构和性能,请查看。在 Vertex AI 上微调 Gemma 3
{"text": "### Human: Hola### Assistant: \u00a1Hola! \u00bfEn qu\u00e9 puedo ayudarte hoy?"}text,它应该匹配。train_column;值应该是一个训练数据点,即一个字符串。您可以将数据集上传到(首选)或。base_model_id = "gemma-3-1b-pt"
lora_rank控制更新矩阵的维数(较小的秩 = 较少的参数),lora_alpha缩放 LoRA 更新,并lora_dropout添加正则化。以下设置是一个合理的起点。lora_rank = 16
lora_alpha = 32
lora_dropout = 0.05
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_epochs,max_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()
在 Vertex AI 上部署 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,
)
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",
)
--tensor-parallel-size允许您在需要额外计算资源时将模型分布到多个 GPU 上,--gpu-memory-utilization控制要使用的 GPU 内存量,并--max-model-len设置模型一次可以处理的最大文本长度。您还可以使用一些高级设置,例如--enable-chunked-prefill,和--enable-prefix-caching来优化性能,尤其是在处理较长的文本时。 upload()此配置(服务容器、模型特定设置和模型运行说明)将它们捆绑到 Vertex AI 模型注册表中一个可管理的单元中。这使得部署和版本控制变得更加容易。deploy如下所示的方法。model.deploy(
endpoint=endpoint,
machine_type="a3-highgpu-2g",
accelerator_type="NVIDIA_L4",
accelerator_count=1,
deploy_request_timeout=1800,
)
machine_type)、加速器的类型(例如“NVIDIA_L4”GPU,accelerator_type)、使用多少个加速器(accelerator_count)。 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!...
下一步是什么?