在Google Cloud上使用PyTorch:如何在Vertex AI上训练和调优PyTorch模型

本文将介绍如何在Google Cloud的Vertex AI平台上使用PyTorch进行模型训练和调优,重点是情感分析任务。我们将通过示例代码和详细步骤,帮助大家更好地理解这一过程。

什么是Vertex AI?

Vertex AI是Google Cloud提供的一个端到端机器学习平台,旨在简化机器学习项目的构建和管理。它整合了Google Cloud的现有机器学习工具,支持从数据准备到模型部署的整个工作流。

使用案例和数据集

我们将使用Hugging Face的预训练BERT模型来进行IMDB情感分类。BERT(双向编码器表示模型)是一种在大量无标签文本上自我监督训练的Transformer模型,非常适合处理自然语言处理(NLP)任务。

数据集准备

我们将使用IMDB情感分类数据集进行实验。首先,我们需要在Jupyter Notebook中设置开发环境。

创建开发环境

  1. 在Google Cloud控制台中创建一个Notebook实例。
  2. 打开Notebook页面,点击"OPEN JUPYTERLAB"链接以启动JupyterLab。

在Vertex Training上训练PyTorch模型

模型细节

我们将微调Hugging Face的BERT模型,以分析IMDB电影评论的情感。以下是训练过程中的主要步骤:

  1. 数据预处理:对评论数据进行分词处理。
  2. 加载预训练模型:加载BERT模型并添加用于情感分析的序列分类头。
  3. 微调模型:对BERT模型进行微调。

示例代码

以下是用于数据预处理和微调BERT模型的代码片段:

python 复制代码
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments

# 加载数据集
datasets = load_dataset('imdb')

# 实例化分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-cased", use_fast=True)

# 数据预处理函数
def preprocess_function(examples):
    return tokenizer(examples['text'], truncation=True)

# 预处理数据集
datasets = datasets.map(preprocess_function, batched=True)

# 加载预训练BERT模型
model = AutoModelForSequenceClassification.from_pretrained("bert-base-cased", num_labels=2)

# 设置训练参数
training_args = TrainingArguments(
    evaluation_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    num_train_epochs=3,
    weight_decay=0.01,
    output_dir='./results'
)

# 创建Trainer对象
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=datasets['train'],
    eval_dataset=datasets['test']
)

# 开始训练
trainer.train()

在Vertex AI上运行训练作业

为了处理更大的数据集或更复杂的模型,我们可以使用Vertex Training服务。其优势包括:

  • 自动配置和释放计算资源。
  • 便于重用和移植性。
  • 支持大规模分布式训练。
  • 提供日志记录和监控功能。

提交自定义作业

  1. 将训练代码打包并上传到Cloud Storage。
  2. 使用Vertex SDK提交自定义作业。

以下是提交自定义作业的示例代码:

python 复制代码
from google.cloud import aiplatform

# 初始化Vertex SDK
aiplatform.init(project='YOUR_PROJECT_ID', staging_bucket='YOUR_BUCKET_NAME')

# 定义作业参数
job = aiplatform.CustomPythonPackageTrainingJob(
    display_name='finetuned-bert-classifier',
    python_package_gcs_uri='gs://YOUR_BUCKET_NAME/YOUR_PACKAGE_PATH',
    python_module_name='trainer.task',
    container_uri='us-docker.pkg.dev/vertex-ai/training/pytorch-gpu.1-7:latest',
)

# 提交作业
model = job.run(
    replica_count=1,
    machine_type='n1-standard-8',
    accelerator_type='NVIDIA_TESLA_T4',
    accelerator_count=1,
)

超参数调优

超参数如学习率和权重衰减对模型性能有重大影响。我们可以通过Vertex AI自动化调优这些超参数。

示例代码

以下是如何设置超参数调优的示例代码:

python 复制代码
from google.cloud import aiplatform

# 定义超参数调优作业
hp_job = aiplatform.HyperparameterTuningJob(
    display_name='finetuned-bert-hptune',
    custom_job=custom_job,
    metric_spec={'accuracy': 'maximize'},
    parameter_spec={
        'learning-rate': hpt.DoubleParameterSpec(min=1e-6, max=0.001, scale='log'),
        'weight-decay': hpt.DiscreteParameterSpec(values=[0.0001, 0.001, 0.01], scale=None),
    },
    max_trial_count=5,
    parallel_trial_count=2,
)

model = hp_job.run(sync=False)

本地运行预测

完成训练后,可以在本地运行预测。以下是预测调用的示例代码:

python 复制代码
def predict(input_text, saved_model_path):
   tokenizer = AutoTokenizer.from_pretrained(saved_model_path)
   predict_input = tokenizer.encode(input_text, truncation=True, max_length=128, return_tensors='pt')
   loaded_model = AutoModelForSequenceClassification.from_pretrained(saved_model_path)
   output = loaded_model(predict_input)
   label_id = torch.argmax(output.logits, dim=1)
   return label_id.item()

清理环境

实验结束后,可以选择停止或删除Notebook实例,以避免产生额外费用。

总结

本文介绍了如何在Google Cloud的Vertex AI上使用PyTorch进行情感分析任务,包括创建开发环境、训练和调优模型、提交作业等步骤。接下来的文章将展示如何在Vertex Prediction服务上部署PyTorch模型,并利用Vertex Pipelines自动化机器学习工作流。

相关推荐
小森776714 分钟前
(三)机器学习---线性回归及其Python实现
人工智能·python·算法·机器学习·回归·线性回归
振鹏Dong41 分钟前
超大规模数据场景(思路)——面试高频算法题目
算法·面试
uhakadotcom41 分钟前
Python 与 ClickHouse Connect 集成:基础知识和实践
算法·面试·github
uhakadotcom42 分钟前
Python 量化计算入门:基础库和实用案例
后端·算法·面试
uhakadotcom1 小时前
使用Python获取Google Trends数据:2025年详细指南
后端·面试·github
uhakadotcom1 小时前
使用 Python 与 Google Cloud Bigtable 进行交互
后端·面试·github
uhakadotcom1 小时前
使用 Python 与 BigQuery 进行交互:基础知识与实践
算法·面试
uhakadotcom1 小时前
使用 Hadoop MapReduce 和 Bigtable 进行单词统计
算法·面试·github
XYY3692 小时前
前缀和 一维差分和二维差分 差分&差分矩阵
数据结构·c++·算法·前缀和·差分
longlong int2 小时前
【每日算法】Day 16-1:跳表(Skip List)——Redis有序集合的核心实现原理(C++手写实现)
数据库·c++·redis·算法·缓存