超详细!AIGC模型微调环境搭建与配置指南

关键词:AIGC、模型微调、环境搭建、深度学习框架、GPU加速、数据集预处理、分布式训练

摘要:本文系统讲解AIGC(人工智能生成内容)模型微调的全流程环境搭建与配置技术。从硬件选型、操作系统配置到深度学习框架安装,结合PyTorch/TensorFlow/Hugging Face等主流工具,详细解析数据预处理、模型加载、训练参数配置、分布式训练优化等核心环节。通过实战案例演示多模态模型微调过程,覆盖CPU/GPU环境差异处理、依赖冲突解决、性能监控等工程化技巧,帮助开发者构建高效稳定的AIGC模型微调基础设施。

1. 背景介绍

1.1 目的和范围

随着AIGC技术在文本生成、图像创作、代码生成等领域的爆发式应用,基于预训练模型的微调(Fine-tuning)成为落地关键技术。本文聚焦AIGC模型微调环境的工程化搭建,涵盖从硬件选型到软件配置的全链路技术细节,包括:

  • 深度学习硬件平台规划(CPU/GPU/TPU)
  • 操作系统与底层驱动配置
  • 主流框架(PyTorch/TensorFlow)环境部署
  • 数据预处理工具链搭建
  • 分布式训练环境配置
  • 监控与调试工具集成

1.2 预期读者

本文适合以下技术人员:

  1. 人工智能开发者:希望掌握AIGC模型微调的工程化实现
  2. 数据科学家:需优化模型微调效率与稳定性
  3. 机器学习工程师:关注分布式训练环境搭建
  4. 算法研究员:需要高性能计算环境支持前沿实验

1.3 文档结构概述

全文采用"基础理论→核心技术→实战落地→工具资源"的逻辑结构:

  1. 背景篇:明确技术目标与核心概念
  2. 环境篇:硬件选型与软件环境搭建
  3. 技术篇:数据处理、模型加载、参数配置
  4. 实战篇:多模态模型微调全流程演示
  5. 工具篇:推荐高效开发与优化工具
  6. 总结篇:探讨技术趋势与工程挑战

1.4 术语表

1.4.1 核心术语定义
  • AIGC(人工智能生成内容):通过算法自动生成文本、图像、音频等内容的技术
  • 模型微调(Fine-tuning):在预训练模型基础上,通过目标数据集进一步训练以适配特定任务
  • 迁移学习(Transfer Learning):利用预训练模型的通用特征提升目标任务训练效率
  • 分布式训练(Distributed Training):通过多GPU/TPU并行加速模型训练的技术
1.4.2 相关概念解释
  • 预训练模型(Pretrained Model):在大规模通用数据集上训练的基础模型(如GPT-4、Stable Diffusion)
  • 混合精度训练(Mixed Precision Training):结合FP16和FP32数据格式提升计算效率并减少显存占用
  • 超参数调优(Hyperparameter Tuning):优化学习率、批量大小等训练参数以提升模型性能
1.4.3 缩略词列表
缩写 全称
GPU 图形处理器(Graphics Processing Unit)
CUDA 计算统一设备架构(Compute Unified Device Architecture)
cuDNN CUDA深度神经网络库(CUDA Deep Neural Network library)
NLP 自然语言处理(Natural Language Processing)
CV 计算机视觉(Computer Vision)
HPC 高性能计算(High Performance Computing)

2. 核心概念与联系

2.1 AIGC模型微调技术架构

AIGC模型微调的核心技术架构可分为四层:

graph TD
    A[基础设施层] --> B(硬件平台)
    A --> C(操作系统)
    A --> D(驱动与工具链)
    B --> B1[CPU集群]
    B --> B2[GPU集群(NVIDIA/AMD)]
    B --> B3[TPU加速器]
    C --> C1[Linux(Ubuntu/CentOS)]
    C --> C2[Windows Server]
    D --> D1[CUDA Toolkit]
    D --> D2[cuDNN Library]
    D --> D3[ROCm(AMD)]
    
    E[框架层] --> F(PyTorch)
    E --> G(TensorFlow)
    E --> H(Hugging Face Transformers)
    E --> I(Stable Diffusion Toolkit)
    
    F --> F1[DataLoader]
    F --> F2[Distributed Data Parallel]
    G --> G1[tf.data]
    G --> G2[TensorFlow Distributed Strategy]
    
    J[数据处理层] --> K(数据清洗)
    J --> L(格式转换)
    J --> M(增强预处理)
    J --> N(分桶处理)
    
    O[模型层] --> P(预训练模型加载)
    O --> Q(参数冻结策略)
    O --> R(适配器模块添加)
    O --> S(损失函数设计)
    
    T[训练层] --> U(优化器配置)
    T --> V(学习率调度)
    T --> W(混合精度训练)
    T --> X(分布式训练)
    
    Y[应用层] --> Z(文本生成)
    Y --> AA(图像生成)
    Y --> AB(多模态生成)

2.2 微调核心技术点解析

2.2.1 预训练模型与微调的关系

预训练模型提供通用特征表示,微调通过以下方式适配目标任务:

  1. 参数更新策略

    • 全量微调:更新所有模型参数(适合小模型或低资源场景)
    • 部分微调:冻结底层参数,仅训练上层任务相关层(适合大模型)
    • 适配器微调(Adapter Tuning):添加轻量级适配器模块并冻结原模型参数
  2. 数据适配

    • 文本任务:Tokenization处理(如BPE分词)
    • 图像任务:Resize/Crop数据增强
    • 多模态任务:对齐不同模态输入格式(如CLIP模型的图文对处理)
2.2.2 GPU加速核心原理

GPU通过大规模并行计算单元加速矩阵运算,关键技术点:

  • CUDA核心:NVIDIA GPU的并行计算单元,FP32/FP16计算能力决定训练速度
  • 显存带宽:高带宽显存(HBM)显著提升数据吞吐量(如NVIDIA H100的3.35TB/s)
  • 计算精度优化:混合精度训练利用FP16减少显存占用,同时通过FP32累加保证精度

3. 核心算法原理 & 具体操作步骤

3.1 数据预处理算法实现(以文本分类为例)

from transformers import AutoTokenizer
import torch

class TextDataset(torch.utils.data.Dataset):
    def __init__(self, data_path, max_length=512):
        self.data = pd.read_csv(data_path)
        self.tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
        self.max_length = max_length
        
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        text = self.data.iloc[idx]['text']
        label = self.data.iloc[idx]['label']
        
        # 分词处理
        encoding = self.tokenizer(
            text,
            add_special_tokens=True,
            max_length=self.max_length,
            padding='max_length',
            truncation=True,
            return_tensors='pt'
        )
        
        return {
            'input_ids': encoding['input_ids'].squeeze(),
            'attention_mask': encoding['attention_mask'].squeeze(),
            'labels': torch.tensor(label, dtype=torch.long)
        }

# 数据加载器配置
def create_data_loader(dataset, batch_size=32, shuffle=True):
    return torch.utils.data.DataLoader(
        dataset,
        batch_size=batch_size,
        shuffle=shuffle,
        collate_fn=lambda x: {
            'input_ids': torch.stack([item['input_ids'] for item in x]),
            'attention_mask': torch.stack([item['attention_mask'] for item in x]),
            'labels': torch.stack([item['labels'] for item in x])
        }
    )

3.2 模型微调核心训练循环

def train_model(model, train_loader, val_loader, optimizer, scheduler, num_epochs=3, device='cuda'):
    model.to(device)
    criterion = torch.nn.CrossEntropyLoss()
    
    for epoch in range(num_epochs):
        model.train()
        total_loss = 0.0
        
        for batch in train_loader:
            input_ids = batch['input_ids'].to(device)
            attention_mask = batch['attention_mask'].to(device)
            labels = batch['labels'].to(device)
            
            optimizer.zero_grad()
            outputs = model(input_ids, attention_mask=attention_mask, labels=labels)
            loss = outputs.loss
            
            # 混合精度训练(需配合torch.cuda.amp)
            # with torch.cuda.amp.autocast():
            #     outputs = model(...)
            #     loss = outputs.loss
            # scaler.scale(loss).backward()
            # scaler.step(optimizer)
            # scaler.update()
            
            loss.backward()
            optimizer.step()
            scheduler.step()
            
            total_loss += loss.item() * input_ids.size(0)
        
        # 验证集评估
        model.eval()
        val_loss = 0.0
        correct = 0
        total = 0
        with torch.no_grad():
            for batch in val_loader:
                input_ids = batch['input_ids'].to(device)
                attention_mask = batch['attention_mask'].to(device)
                labels = batch['labels'].to(device)
                
                outputs = model(input_ids, attention_mask=attention_mask)
                logits = outputs.logits
                loss = criterion(logits, labels)
                
                val_loss += loss.item() * input_ids.size(0)
                _, preds = torch.max(logits, 1)
                correct += (preds == labels).sum().item()
                total += labels.size(0)
        
        # 打印训练日志
        print(f"Epoch {epoch+1}/{num_epochs}")
        print(f"Train Loss: {total_loss / len(train_loader.dataset):.4f}")
        print(f"Val Loss: {val_loss / len(val_loader.dataset):.4f}, Accuracy: {correct / total:.4f}")
    
    return model

4. 数学模型和公式 & 详细讲解

4.1 损失函数数学定义

4.1.1 分类任务交叉熵损失

L = − 1 N ∑ i = 1 N ∑ c = 1 C y i , c log ⁡ y ^ i , c \mathcal{L} = -\frac{1}{N}\sum_{i=1}^N \sum_{c=1}^C y_{i,c} \log \hat{y}_{i,c} L=N1i=1Nc=1Cyi,clogy^i,c
其中:

  • ( N ) 为样本数量
  • ( C ) 为类别数
  • ( y_{i,c} ) 为样本 ( i ) 的真实标签(one-hot编码)
  • ( \hat{y}_{i,c} ) 为模型预测的类别概率
4.1.2 生成任务掩码语言模型损失

L MLM = − 1 N ⋅ L ∑ i = 1 N ∑ t = 1 L M t log ⁡ P ^ ( x t ∣ x ∖ t ) \mathcal{L}_{\text{MLM}} = -\frac{1}{N \cdot L}\sum_{i=1}^N \sum_{t=1}^L M_t \log \hat{P}(x_t | \mathbf{x}_{\setminus t}) LMLM=NL1i=1Nt=1LMtlogP^(xtxt)
其中:

  • ( L ) 为序列长度
  • ( M_t ) 为掩码标记(1表示被掩码的位置)
  • ( \mathbf{x}_{\setminus t} ) 为去除位置 ( t ) 后的输入序列

4.2 优化器算法原理

4.2.1 Adam优化器更新规则
  1. 计算梯度的一阶矩估计:
    m t = β 1 m t − 1 + ( 1 − β 1 ) g t m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t mt=β1mt1+(1β1)gt
  2. 计算梯度的二阶矩估计:
    v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 vt=β2vt1+(1β2)gt2
  3. 偏差校正:
    m ^ t = m t 1 − β 1 t , v ^ t = v t 1 − β 2 t \hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} m^t=1β1tmt,v^t=1β2tvt
  4. 参数更新:
    θ t = θ t − 1 − η m ^ t v ^ t + ϵ \theta_t = \theta_{t-1} - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} θt=θt1ηv^t +ϵm^t
    其中:
  • ( g_t ) 为当前梯度
  • ( \beta_1, \beta_2 ) 为矩估计的指数衰减率(默认0.9, 0.999)
  • ( \eta ) 为学习率
  • ( \epsilon ) 为平滑项(默认( 10^{-8} ))

4.3 学习率调度公式

4.3.1 余弦退火调度

η t = η min + 1 2 ( η max − η min ) ( 1 + cos ⁡ ( T c u r T m a x π ) ) \eta_t = \eta_{\text{min}} + \frac{1}{2}(\eta_{\text{max}} - \eta_{\text{min}})\left(1 + \cos\left(\frac{T_{cur}}{T_{max}}\pi\right)\right) ηt=ηmin+21(ηmaxηmin)(1+cos(TmaxTcurπ))
其中:

  • ( T_{cur} ) 为当前训练步数
  • ( T_{max} ) 为最大训练步数
  • ( \eta_{\text{max}}, \eta_{\text{min}} ) 为学习率上下限

5. 项目实战:多模态模型微调全流程

5.1 开发环境搭建

5.1.1 硬件环境配置
组件 推荐配置 说明
CPU Intel i7/i9或AMD Ryzen 7/9 至少8核16线程,用于数据预处理
GPU NVIDIA A100/H100或RTX 4090 显存≥24GB,支持FP16/FP32混合精度计算
内存 64GB+ 处理大规模数据集时避免内存溢出
存储 NVMe SSD 1TB+ 加速数据读取(尤其是图像/视频数据)
5.1.2 软件环境安装(以Ubuntu 22.04为例)
  1. 系统依赖安装
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential cmake git python3-dev
  1. CUDA与cuDNN安装
# 下载CUDA Toolkit 12.1(根据GPU型号选择)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run --silent --toolkit

# 安装cuDNN(需从NVIDIA官网下载对应版本)
sudo dpkg -i libcudnn8_8.9.5.19-1+cuda12.1_amd64.deb
sudo dpkg -i libcudnn8-dev_8.9.5.19-1+cuda12.1_amd64.deb
  1. Python环境配置
# 安装Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh -b -p ~/miniconda
source ~/miniconda/bin/activate

# 创建项目环境
conda create -n aigc_finetune python=3.10 -y
conda activate aigc_finetune
  1. 深度学习框架安装
# PyTorch with CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# TensorFlow with GPU support
pip install tensorflow==2.13.0 --no-deps
pip install nvidia-cuda-toolkit==12.1  # 按需安装,TF自带CUDA运行时库
pip install nvidia-cudnn-cu12==8.9.5.19  # 对应cuDNN版本

# Hugging Face库
pip install transformers datasets accelerate evaluate

5.2 源代码详细实现(以Stable Diffusion图像生成微调为例)

5.2.1 数据准备
  1. 数据集格式:包含图像文件和对应的文本描述(JSON格式)
[
  {
    "image_path": "data/0001.jpg",
    "caption": "a red car on the road"
  },
  ...
]
  1. 数据加载与预处理
from diffusers import StableDiffusionPipeline, AutoencoderKL, UNet2DConditionModel
from torchvision import datasets, transforms
import torch

# 图像预处理
transform = transforms.Compose([
    transforms.Resize((512, 512)),
    transforms.ToTensor(),
    transforms.Normalize([0.5], [0.5])
])

class CustomDataset(torch.utils.data.Dataset):
    def __init__(self, data_file):
        self.data = json.load(open(data_file, 'r'))
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        image_path = self.data[idx]['image_path']
        caption = self.data[idx]['caption']
        image = Image.open(image_path).convert('RGB')
        return transform(image), caption
5.2.2 模型加载与配置
# 加载预训练模型
vae = AutoencoderKL.from_pretrained("stabilityai/stable-diffusion-2-1-base", subfolder="vae")
unet = UNet2DConditionModel.from_pretrained("stabilityai/stable-diffusion-2-1-base", subfolder="unet")
tokenizer = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-base").tokenizer

# 冻结VAE编码器
vae.encoder.requires_grad_(False)

# 配置训练参数
train_batch_size = 4
gradient_accumulation_steps = 4
learning_rate = 1e-4
num_epochs = 50
5.2.3 训练脚本实现
from diffusers.optimization import get_scheduler

# 准备数据加载器
dataset = CustomDataset("train_data.json")
data_loader = torch.utils.data.DataLoader(dataset, batch_size=train_batch_size, shuffle=True)

# 优化器与调度器
optimizer = torch.optim.AdamW([{'params': unet.parameters()}], lr=learning_rate)
lr_scheduler = get_scheduler(
    "constant_with_warmup",
    optimizer=optimizer,
    num_warmup_steps=100,
    num_training_steps=len(data_loader)*num_epochs
)

# 训练循环
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
unet.to(device)
vae.to(device)

for epoch in range(num_epochs):
    for step, (images, captions) in enumerate(data_loader):
        images = images.to(device)
        captions = tokenizer(captions, padding="max_length", max_length=tokenizer.model_max_length, truncation=True, return_tensors="pt").to(device)
        
        # 生成噪声
        noise = torch.randn(images.shape, device=device)
        bsz = images.shape[0]
        timesteps = torch.randint(0, 1000, (bsz,), device=device).long()
        
        # 前向传播
        noise_pred = unet(images, timesteps, captions['input_ids']).sample
        loss = torch.nn.functional.mse_loss(noise_pred, noise)
        
        # 反向传播
        loss.backward()
        if (step + 1) % gradient_accumulation_steps == 0:
            optimizer.step()
            lr_scheduler.step()
            optimizer.zero_grad()
        
        # 日志输出
        if step % 100 == 0:
            print(f"Epoch {epoch}, Step {step}, Loss: {loss.item()}")

5.3 代码解读与分析

  1. 模型冻结策略:冻结VAE编码器以保持预训练的图像特征提取能力,仅训练UNet生成器部分
  2. 噪声生成机制:Stable Diffusion通过预测噪声来逐步生成图像,MSE损失函数优化噪声预测精度
  3. 分布式训练准备:可通过torch.distributed.launch启动多GPU训练,需添加DDP(Distributed Data Parallel)包装器

6. 实际应用场景

6.1 自然语言处理领域

  • 文本生成优化:在GPT模型基础上微调实现专业领域对话(如医疗咨询、法律文书生成)
  • 情感分析增强:利用预训练语言模型提升社交媒体情感分类精度
  • 代码生成:通过CodeGPT微调实现特定编程语言的代码补全与生成

6.2 计算机视觉领域

  • 图像风格迁移:在StyleGAN基础上微调实现个性化艺术风格生成
  • 目标检测优化:冻结预训练Backbone,微调检测头以适应特定目标类别
  • 医学图像分析:基于ViT模型微调实现肿瘤病灶识别

6.3 多模态生成领域

  • 图文生成:微调CLIP模型实现根据文本描述生成对应图像
  • 视频生成:在Stable Diffusion基础上扩展时间维度模型实现短视频生成
  • 跨模态检索:优化图文匹配模型提升跨模态检索准确率

7. 工具和资源推荐

7.1 学习资源推荐

7.1.1 书籍推荐
  1. 《Hands-On Machine Learning for AIGC》
    • 涵盖AIGC模型训练与微调的工程化实践
  2. 《Deep Learning with PyTorch》
    • 深入理解PyTorch框架原理与高级应用
  3. 《Hugging Face Transformers: State-of-the-Art Natural Language Processing》
    • 系统讲解NLP预训练模型微调技术
7.1.2 在线课程
  1. Coursera《Generative AI with TensorFlow》
    • 谷歌官方课程,包含生成模型实战
  2. Udemy《AIGC Model Fine-Tuning Masterclass》
    • 专注于模型微调的工程化技巧
  3. Hugging Face官方培训课程
    • 免费资源,覆盖Transformers库的深度应用
7.1.3 技术博客和网站
  1. Towards Data Science
    • 包含大量AIGC技术实战案例
  2. Medium AI专栏
    • 追踪最新AIGC研究进展
  3. Hugging Face Blog
    • 官方技术博客,提供前沿技术解读

7.2 开发工具框架推荐

7.2.1 IDE和编辑器
  • PyCharm Professional:支持Python开发与调试,集成Jupyter Notebook
  • VS Code:轻量级编辑器,通过插件支持PyTorch/TensorFlow开发
  • DeepNote:云端协作开发环境,适合团队项目
7.2.2 调试和性能分析工具
  • WandB:实验追踪与可视化工具,支持损失曲线、硬件指标监控
  • NVIDIA NVidia-smi:GPU利用率监控工具
  • PyTorch Profiler:深度分析模型训练瓶颈
7.2.3 相关框架和库
  • Accelerate:Hugging Face分布式训练库,支持自动混合精度
  • Deepspeed:微软分布式训练框架,优化大模型训练效率
  • Datasets:Hugging Face数据集处理库,支持多种数据格式

7.3 相关论文著作推荐

7.3.1 经典论文
  1. 《Fine-Tuning Pre-trained Transformer Models: Weight Initialization Matters》
    • 研究微调时权重初始化对模型性能的影响
  2. 《The Power of Scale for Parameter-Efficient Prompt Tuning》
    • 提出提示微调(Prompt Tuning)技术降低微调成本
  3. 《Distributed Training of Deep Neural Networks: A Survey》
    • 全面综述分布式训练技术发展
7.3.2 最新研究成果
  1. 《QLoRA: Efficient Finetuning of 4-bit Quantized LLMs》
    • 提出4位量化微调技术,降低显存需求
  2. 《AdapterFusion: Non-Destructive Task Composition for Transfer Learning》
    • 研究适配器融合技术提升多任务微调效率
7.3.3 应用案例分析
  1. OpenAI InstructGPT技术报告
    • 人类反馈微调(RLHF)在对话模型中的应用
  2. Stability AI Stable Diffusion微调指南
    • 图像生成模型的工程化微调实践

8. 总结:未来发展趋势与挑战

8.1 技术发展趋势

  1. 轻量化微调技术

    • 提示微调(Prompt Tuning)、适配器微调(Adapter Tuning)等技术将成为主流,显著降低计算成本
    • 量化微调(Quantized Finetuning)结合低精度计算提升效率
  2. 自动化环境搭建

    • 容器化技术(Docker/Kubernetes)普及,实现环境配置的标准化
    • 自动化脚本工具(如Ansible)简化多节点分布式环境部署
  3. 多模态融合微调

    • 跨模态对齐技术进步,推动文本-图像-视频多模态模型的联合微调

8.2 工程实践挑战

  1. 硬件兼容性问题

    • 不同GPU架构(NVIDIA/AMD/Intel)的驱动与框架适配复杂度高
    • 混合精度训练中的数值稳定性问题需持续优化
  2. 数据预处理效率

    • 大规模多模态数据集的加载与预处理成为性能瓶颈
    • 需要更高效的数据增强与分桶策略
  3. 分布式训练优化

    • 通信开销在大规模集群中依然显著,需优化数据并行/模型并行策略
    • 故障恢复机制的工程实现复杂度较高

9. 附录:常见问题与解答

9.1 GPU兼容性问题

Q:安装CUDA后无法识别GPU怎么办?
A:检查GPU驱动是否匹配CUDA版本(nvidia-smi查看驱动版本),重新安装对应版本驱动。

9.2 内存不足问题

Q:训练时出现显存溢出(CUDA out of memory)如何解决?
A:尝试以下方法:

  1. 降低批量大小(batch size)
  2. 启用混合精度训练(PyTorch的amp模块/TensorFlow的mixed_precision
  3. 冻结部分模型参数减少可训练参数数量

9.3 依赖冲突问题

Q:不同框架版本依赖冲突如何处理?
A:使用虚拟环境(Conda/Virtualenv)隔离项目依赖,通过pip checkconda list --revisions排查冲突包。

10. 扩展阅读 & 参考资料

  1. NVIDIA CUDA Installation Guide
  2. Hugging Face Fine-Tuning Guide
  3. PyTorch Distributed Training Tutorial
  4. TensorFlow Mixed Precision Guide

通过以上步骤,开发者可构建高效稳定的AIGC模型微调环境,并在此基础上进行各种生成任务的算法研发与工程落地。随着AIGC技术的快速发展,持续优化环境配置与训练策略将成为保持技术竞争力的关键。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐