基于VMware搭建HY-Motion 1.0多机训练集群
基于VMware搭建HY-Motion 1.0多机训练集群想自己动手训练一个像HY-Motion 1.0这样能“一句话生成3D动画”的大模型但被动辄几十张显卡的硬件需求吓退了别急今天咱们就来聊聊一个“曲线救国”的妙招用你手头的普通电脑通过虚拟化技术搭建一个模拟的多机训练环境。说白了就是用软件“变”出好几台“电脑”来让它们协同工作模拟出分布式训练的效果。这招特别适合想学习大模型训练流程、做算法验证或者预算有限但想折腾一下的朋友。虽然虚拟机的性能比不上真刀真枪的物理机集群但对于理解原理、跑通流程来说完全够用。接下来我会手把手带你走一遍整个搭建过程。咱们的目标很明确用VMware Workstation Pro或者Player版也行从零开始构建一个能跑HY-Motion 1.0分布式训练任务的小型“虚拟集群”。你会发现原来门槛并没有想象中那么高。1. 准备工作与核心思路在开始敲命令之前咱们先得把思路理清楚。为什么要用VMware直接装多系统不行吗核心价值降低成本与复杂度。你不需要购买多台物理服务器也不需要复杂的网络交换设备。一台性能尚可的宿主机就是你正在用的电脑通过VMware就能虚拟出多个独立的“虚拟机”。这些虚拟机拥有各自的操作系统、IP地址可以像真实机器一样通过网络通信共同执行一个训练任务。你需要准备的东西宿主机建议CPU核心数多一些比如8核16线程以上内存至少32GB越多越好因为要分给虚拟机硬盘空间预留200GB以上。操作系统Windows、Linux都行。VMware WorkstationPro版功能最全Player免费版也基本够用。确保已经安装好。Linux镜像咱们选用Ubuntu 22.04 LTS Server版。因为它轻量、稳定社区支持好是AI开发环境的主流选择。HY-Motion 1.0代码提前从GitHubTencent-Hunyuan/HY-Motion-1.0把项目仓库克隆或下载好后面会用到。我们的集群规划 为了简单演示我们计划搭建一个包含3个节点的微型集群master主节点负责调度任务、汇总结果。IP设为192.168.10.10。worker1工作节点1负责一部分计算。IP设为192.168.10.11。worker2工作节点2负责另一部分计算。IP设为192.168.10.12。它们将处于同一个虚拟局域网内可以互相访问。2. 打造“黄金模板”虚拟机一台台安装和配置虚拟机太麻烦了。我们的策略是先精心打造一台“样板机”然后直接复制它。这能节省大量重复劳动。2.1 创建并安装第一台虚拟机打开VMware创建新的虚拟机。选择“自定义”安装以便进行更细致的设置。硬件兼容性选最新的版本比如“Workstation 17.x”。操作系统选择“稍后安装操作系统”。客户机操作系统选择“Linux”版本为“Ubuntu 64位”。处理器根据宿主机能力分配。例如给2个处理器核心每个核心1个线程。这能保证虚拟机有基本的计算能力。内存分配至少8GB。如果宿主机内存充足给12GB更好。网络这里很关键。选择“使用桥接网络”。这样虚拟机会直接从你的路由器获取一个IP和你的宿主机在同一个网段方便后续操作。如果你对网络不熟用“NAT模式”也可以但需要多一步端口转发。磁盘创建一个新的虚拟磁盘类型用SCSI大小建议40GB以上选择“将虚拟磁盘拆分成多个文件”。完成创建后在虚拟机设置里加载你下载的Ubuntu 22.04 Server ISO镜像文件到CD/DVD驱动器。启动虚拟机开始安装Ubuntu Server。安装过程中有几个注意点系统语言选英文避免后续终端出现乱码。镜像源可以选择国内的源比如阿里云或清华的镜像这样安装和更新软件会快很多。安装OpenSSH Server在软件选择环节一定要勾选上这是实现多机远程管理的关键。分区新手可以使用“使用整个磁盘并设置LVM”的自动方案。用户设置一个用户名和密码记住它。安装完成后重启进入系统。2.2 基础环境配置与模板化登录进这台崭新的Ubuntu我们开始把它配置成“黄金模板”。第一步更新系统并安装必要工具sudo apt update sudo apt upgrade -y sudo apt install -y vim wget curl net-tools openssh-server python3-pip第二步配置SSH免密登录为后续集群通信做准备在模板机上为自己生成密钥对ssh-keygen -t rsa -b 4096一路按回车使用默认路径和空密码。然后将公钥添加到本机的授权列表这样自己登录自己就不需要密码了为后续脚本自动化做准备cat ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys第三步安装Python和PyTorch环境以CPU版为例GPU版需要额外配置CUDApip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu因为我们是在虚拟机里模拟通常不直接传递宿主机的GPU给虚拟机虽然VMware支持但配置复杂所以先安装CPU版本。重点是搭建分布式框架。第四步设置静态IP确保集群IP固定编辑网络配置文件sudo vim /etc/netplan/00-installer-config.yaml将内容修改为如下根据你的网络情况调整这里以桥接模式为例network: ethernets: ens33: # 你的网卡名称可能是ens32或其他用ip a命令查看 dhcp4: no addresses: [192.168.10.10/24] # 模板机先用master的IP gateway4: 192.168.10.1 # 你的路由器网关地址 nameservers: addresses: [8.8.8.8, 114.114.114.114] version: 2应用配置sudo netplan apply现在这台虚拟机就有了固定的IP192.168.10.10。第五步关闭虚拟机并清理临时信息在关机前运行以下命令清理机器特有的标识如SSH主机密钥这样复制出来的新机器才不会冲突sudo truncate -s 0 /etc/machine-id sudo rm /var/lib/dbus/machine-id sudo ln -s /etc/machine-id /var/lib/dbus/machine-id sudo systemctl poweroff现在这台配置好的虚拟机就是我们的“黄金模板”了。在VMware的库中找到它右键选择“管理”-“克隆”就可以开始复制了。3. 批量克隆与集群网络搭建回到VMware主界面找到你刚刚关机的那个“模板”虚拟机。克隆虚拟机右键点击它选择“管理”-“克隆”。在克隆类型中选择“创建完整克隆”这样性能更好。给克隆的虚拟机起名为“worker1”选择好存储位置。修改克隆机的硬件配置可选但推荐克隆完成后先不要启动worker1。右键点击它选择“设置”。为了模拟不同的机器你可以微调一下内存大小比如比master少1GB或者CPU核心数。最重要的是在“网络适配器”的高级设置里点击“生成”一个新的MAC地址。这能确保每台虚拟机在网络中被识别为独立的设备。重复步骤再次克隆模板创建“worker2”同样生成新的MAC地址。启动并配置克隆机现在依次启动master、worker1、worker2。登录worker1修改其静态IP为192.168.10.11修改/etc/netplan/00-installer-config.yaml文件然后sudo netplan apply。登录worker2修改其静态IP为192.168.10.12。分别在三台机器上修改/etc/hostname文件为对应的名称master, worker1, worker2并重启生效sudo reboot。配置集群主机名解析为了让机器之间能用名字互相访问需要在每台机器的/etc/hosts文件中添加所有节点的信息。在每台机器上执行sudo vim /etc/hosts添加以下行192.168.10.10 master 192.168.10.11 worker1 192.168.10.12 worker2现在你的三台虚拟机已经组成了一个简单的网络。从master上尝试ping一下worker1应该能通了ping worker14. 配置分布式训练核心环境集群网络通了接下来要让它们能协同训练。这里我们以PyTorch的分布式数据并行DDP为例进行配置。第一步配置SSH免密登录集群在master上操作我们已经有了master自己的密钥。现在需要把master的公钥分发到worker1和worker2上这样master就能无密码访问所有节点。# 将公钥复制到worker1需要输入worker1的密码 ssh-copy-id your_usernameworker1 # 将公钥复制到worker2需要输入worker2的密码 ssh-copy-id your_usernameworker2完成后在master上执行ssh worker1应该可以直接登录不需要密码。第二步准备共享代码和数据目录可选但重要为了让所有节点访问同一份代码和数据有几种方法NFS网络文件系统在master上设置一个共享目录worker1和worker2挂载它。这是最接近生产环境的方式。rsync同步训练前用脚本将代码从master同步到各个worker。版本控制每个节点都从Git仓库拉取代码。这里简单演示一下用rsync同步。在master上写一个同步脚本sync_code.sh#!/bin/bash WORKERS(worker1 worker2) CODE_PATH/home/your_username/hy-motion # master上的代码路径 for worker in ${WORKERS[]}; do echo Syncing to $worker... rsync -avz --delete -e ssh $CODE_PATH/ $worker:$CODE_PATH/ done echo Sync completed.给脚本加执行权限chmod x sync_code.sh。以后代码更新了运行一下这个脚本就行。第三步安装分布式训练依赖在所有节点上安装必要的Python包。假设你已经把HY-Motion 1.0的代码放在了~/hy-motion目录。cd ~/hy-motion # 查看项目的requirements.txt安装依赖 pip3 install -r requirements.txt # 确保安装了mpi4pyPyTorch DDP常用 pip3 install mpi4py5. 运行一个简单的分布式测试任务环境都配好了不跑个程序验证一下心里不踏实。我们不用立刻上完整的HY-Motion训练那需要大量数据和GPU而是写一个简单的PyTorch DDP测试脚本看看集群能不能协同工作。在master上创建一个测试文件test_ddp.pyimport os import torch import torch.distributed as dist import torch.multiprocessing as mp from torch.nn.parallel import DistributedDataParallel as DDP def setup(rank, world_size): 初始化进程组 os.environ[MASTER_ADDR] master # 主节点主机名 os.environ[MASTER_PORT] 12355 # 一个空闲端口 dist.init_process_group(gloo, rankrank, world_sizeworld_size) # 用gloo后端CPU友好 def cleanup(): dist.destroy_process_group() def demo_basic(rank, world_size): print(fRunning basic DDP example on rank {rank}.) setup(rank, world_size) # 创建一个简单的模型把它包装进DDP model torch.nn.Linear(10, 10).to(rank) # 注意这里to(rank)在CPU环境下就是to(cpu) ddp_model DDP(model) # 演示一个前向传播 inputs torch.randn(20, 10) outputs ddp_model(inputs) print(fRank {rank}: Output shape: {outputs.shape}) cleanup() def run(rank, world_size): demo_basic(rank, world_size) if __name__ __main__: # 假设我们在单机多进程模拟实际应由torchrun或mpirun在多个节点启动 world_size 3 # 我们的集群有3个节点 # 这个脚本需要在每个节点上单独运行并指定不同的rank # 这里仅展示单节点多进程模拟 mp.spawn(run, args(world_size,), nprocsworld_size, joinTrue)这个脚本是为单机多进程写的。要真正在集群上跑我们需要一个启动器。PyTorch推荐使用torchrun。但跨节点需要更复杂的协调。一个简单粗暴的方法是写一个shell脚本用SSH到每个节点上启动Python进程。在master上创建启动脚本launch_test.sh#!/bin/bash # 在master节点上启动 MASTER_ADDRmaster MASTER_PORT12355 WORLD_SIZE3 # 在master上启动rank 0 echo Launching rank 0 on master... python3 -m torch.distributed.run \ --nnodes$WORLD_SIZE \ --node_rank0 \ --nproc_per_node1 \ --master_addr$MASTER_ADDR \ --master_port$MASTER_PORT \ test_ddp.py # 在worker1上启动rank 1 echo Launching rank 1 on worker1... ssh worker1 cd /home/your_username/hy-motion python3 -m torch.distributed.run \ --nnodes$WORLD_SIZE \ --node_rank1 \ --nproc_per_node1 \ --master_addr$MASTER_ADDR \ --master_port$MASTER_PORT \ test_ddp.py # 在worker2上启动rank 2 echo Launching rank 2 on worker2... ssh worker2 cd /home/your_username/hy-motion python3 -m torch.distributed.run \ --nnodes$WORLD_SIZE \ --node_rank2 \ --nproc_per_node1 \ --master_addr$MASTER_ADDR \ --master_port$MASTER_PORT \ test_ddp.py wait echo All processes launched.记得给脚本执行权限chmod x launch_test.sh。然后运行它./launch_test.sh。如果一切配置正确你应该能在三个节点的终端上看到对应的输出比如“Running basic DDP example on rank X”。这就证明你的虚拟集群已经成功建立了分布式通信可以协同工作了6. 总结与后续方向走完这一趟你应该已经成功在VMware里搭建起了一个迷你分布式训练集群。从制作模板、配置网络到部署环境、运行测试整个过程虽然有些繁琐但每一步都是在理解现代AI基础设施的基石。这个虚拟集群最大的意义在于学习和验证。你可以在上面练习各种分布式训练框架PyTorch DDP, Horovod等的配置调试通信脚本而不用担心搞坏物理硬件。当你的脚本在这个小集群上跑通后迁移到真正的多GPU服务器或者云上集群时思路会清晰很多。当然要真正训练HY-Motion 1.0这样的模型虚拟机的CPU算力是远远不够的。后续如果你想向生产环境迈进可以考虑探索GPU直通PCI Passthrough如果宿主机有强大的显卡可以尝试将GPU直接分配给某个虚拟机使用大幅提升其计算能力。但这需要主板和CPU支持VT-d/AMD-Vi技术。转向专业虚拟化/云平台像vSphere、OpenStack或者直接使用AWS、GCP、阿里云等云服务商提供的GPU实例它们提供了更成熟的大规模集群管理方案。使用容器化技术Docker Kubernetes (K8s) 是当前AI训练和部署的主流。你可以在虚拟机里先搭建一个K8s集群来练手编排和管理训练任务会比手动SSH更加优雅和高效。搭建环境本身就是一个充满成就感的学习过程。希望这个基于VMware的指南能成为你探索大模型分布式训练世界的第一块垫脚石。动手试试吧遇到问题就去搜索、去社区提问你会发现很多难题早已有前辈给出了答案。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2442081.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!