在910B上跑大模型:从环境搭建到微调Qwen和DeepSeek
如果你之前一直用NVIDIA的卡,第一次接触910B可能会觉得"怎么跟CUDA不一样"。别担心,其实大部分流程是相通的,只是有些概念换了名字。
第一步:确认NPU驱动正常
npu-smi info
# 正常输出类似:
# +-----------------------------------------------------------------------------+
# | npu-smi 23.0.0 Version: 23.0.0 |
# | NPU Name Health Power(W) Temp(C) Hugepages-Usage |
# | 0 910B OK 150 45 0 % |
# +-----------------------------------------------------------------------------+第二步:安装PyTorch昇腾版
pip install torch==2.1.0
pip install torch-npu==2.1.0.post3
# 验证
python -c "import torch; import torch_npu; print(torch_npu.npu.is_available())"
# 输出:True第三步:微调Qwen2-7B
下面是在910B上微调Qwen2-7B的完整代码,直接复制就能跑:
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from datasets import load_dataset
import torch
import torch_npu
model_name = "Qwen/Qwen2-7B"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
model_name, trust_remote_code=True, torch_dtype=torch.float16
)
# 放到NPU上
device = torch.device("npu:0")
model = model.to(device)
# 加载数据
dataset = load_dataset("json", data_files="train_data.json")
def tokenize_function(examples):
return tokenizer(examples["text"], truncation=True, max_length=512)
tokenized_dataset = dataset.map(tokenize_function, batched=True)
# 训练参数
training_args = TrainingArguments(
output_dir="./qwen2-910b-output",
num_train_epochs=3,
per_device_train_batch_size=4,
gradient_accumulation_steps=8,
learning_rate=2e-5,
fp16=True,
logging_steps=50,
save_steps=500,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"],
)
trainer.train()跑DeepSeek的注意事项
- 建议用华为官方适配的昇腾版DeepSeek,性能最好
- DeepSeek依赖的FlashAttention需要替换为昇腾版FusedAttention
- MoE架构在910B上运行良好,8卡并行可以高效分配专家网络
遇到问题怎么办?
OOM(显存不足):减小batch_size,开启gradient_checkpointing,或者用LoRA代替全参数微调。
训练速度慢:检查是否开启了fp16混合精度,确认数据加载没有成为瓶颈,多卡时检查HCCS通信是否正常。
某些算子不支持:查阅CANN文档的算子支持列表,或用支持的算子组合实现替代方案。极智算提供7×24技术支持。
立即咨询极智算客服,获取专属您的2025年GPU服务器配置与报价方案,开启高效算力之旅!