OpenCLAW 是面向分布式训练的深度学习工具,但也可以在单机环境下使用,以下是单机使用 OpenCLAW 的基本方法:

安装配置
# 或从源码安装 git clone https://github.com/modelscope/openclaw.git cd openclaw pip install -e .
单机训练配置
使用单机模式启动
# config.py - 配置文件
train_config = {
"distributed": {
"enable": False, # 禁用分布式
"world_size": 1, # 单机单卡
"rank": 0
},
"device": "cuda:0", # 使用单卡
# ... 其他训练配置
}
模拟分布式环境(单机多卡)
import os os.environ['MASTER_ADDR'] = 'localhost' os.environ['MASTER_PORT'] = '29500' os.environ['WORLD_SIZE'] = '1' os.environ['RANK'] = '0' os.environ['LOCAL_RANK'] = '0' from openclaw import init_process_group init_process_group(backend="nccl")
单机训练示例
import torch
import torch.nn as nn
from openclaw.trainer import Trainer
from openclaw.models import YourModel
from openclaw.data import DatasetBuilder
# 1. 初始化配置
config = {
"model": {
"name": "your_model",
"pretrained": True
},
"train": {
"batch_size": 32,
"epochs": 10,
"lr": 1e-4
},
"distributed": {
"enabled": False # 单机模式
}
}
# 2. 构建模型和数据
model = YourModel.from_pretrained(config["model"]["name"])
train_dataset = DatasetBuilder.build("train")
val_dataset = DatasetBuilder.build("validation")
# 3. 创建训练器(单机模式)
trainer = Trainer(
model=model,
config=config,
train_dataset=train_dataset,
val_dataset=val_dataset,
use_distributed=False # 明确指定不使用分布式
)
# 4. 开始训练
trainer.train()
实用工具函数
from openclaw.utils import setup_single_device
# 自动设置单机环境
device = setup_single_device(use_gpu=True, gpu_id=0)
# 将模型移到设备
model = model.to(device)
# 单机数据加载
from torch.utils.data import DataLoader
train_loader = DataLoader(
dataset,
batch_size=32,
shuffle=True,
num_workers=4 # 单机可以使用多个数据加载进程
)
完整示例
"""
OpenCLAW 单机训练完整示例
"""
import torch
from openclaw import OpenCLAW
from openclaw.config import Config
def main():
# 配置单机环境
config_dict = {
"experiment": {
"name": "single_gpu_test",
"output_dir": "./outputs"
},
"model": {
"type": "claw_model",
"args": {
"hidden_size": 768,
"num_layers": 12
}
},
"trainer": {
"epochs": 10,
"batch_size": 16,
"gradient_accumulation_steps": 2,
"logging_steps": 100,
"save_steps": 500
},
"distributed": {
"enabled": False, # 关键:关闭分布式
"world_size": 1,
"local_rank": 0
}
}
# 创建配置
config = Config.from_dict(config_dict)
# 初始化 OpenCLAW(单机模式)
claw = OpenCLAW(config)
# 准备数据
# 假设有自定义数据集
class SimpleDataset(torch.utils.data.Dataset):
def __init__(self, size=1000):
self.data = torch.randn(size, 10)
self.labels = torch.randint(0, 2, (size,))
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return {
"input_ids": self.data[idx],
"labels": self.labels[idx]
}
train_dataset = SimpleDataset(1000)
eval_dataset = SimpleDataset(200)
# 训练模型
claw.train(
train_dataset=train_dataset,
eval_dataset=eval_dataset,
# 单机训练相关参数
use_distributed_sampler=False, # 不使用分布式采样器
num_workers=4,
pin_memory=True
)
# 保存模型
claw.save_model("./saved_model")
# 加载并推理
loaded_claw = OpenCLAW.from_pretrained("./saved_model")
test_input = torch.randn(1, 10)
with torch.no_grad():
output = loaded_claw.model(test_input)
print(f"Output shape: {output.shape}")
if __name__ == "__main__":
main()
注意事项
- 内存管理:单机使用时要关注 GPU 内存,避免 OOM
- 数据并行:如需使用多卡,可改用
torch.nn.DataParallelmodel = nn.DataParallel(model, device_ids=[0, 1])
- 混合精度训练:可开启 AMP 节省显存
from openclaw.utils import AMPMixedPrecision trainer = Trainer(..., mixed_precision="fp16")
常见问题解决
# 问题1:分布式相关错误
# 解决方案:强制设置环境变量
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0" # 只使用第一张卡
# 问题2:Dataloader 错误
# 解决方案:设置正确的 worker 数量
train_loader = DataLoader(..., num_workers=0 if os.name == 'nt' else 4)
# 问题3:模型保存/加载
# 单机模式下直接使用 torch.save/load
torch.save(model.state_dict(), "model.pth")
model.load_state_dict(torch.load("model.pth"))
这样配置后,你就可以在单机上使用 OpenCLAW 进行模型训练和推理了。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。