ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【控制算法】肌肉骨骼仿真环境MyoAssist服务器部署

【控制算法】肌肉骨骼仿真环境MyoAssist服务器部署 目标在Windows11服务器的WSL2 Ubuntu中部署MyoAssist建立可用于人体-外骨骼交互研究的仿真平台。关于MyoAssistMyoAssist是一个基于生物力学模拟可穿戴辅助设备的开源Python工具包它是MyoSuite的一个工具包MyoSuite是一个基于MoJoCo构建的肌肉骨骼环境集合用于强化学习和控制研究。MyoAssist中包含有多种仿真环境包含了多种仿真环境例如髋关节外骨骼、踝关节外骨骼、背部外骨骼等等能够加快研究人员的开发进度。除此之外包中还有标准强化学习、模仿学习和迁移学习的网络架构以及外骨骼控制算法中常用的优化方法。使用者能够根据自身情况调整train_configs即可完成个性化仿真环境的训练。跨网络访问服务器设置这部分是服务器的设置部分由于笔者当时在这里遇到了一些坑所以想记录一下不需要进行服务器配置的可以直接跳过。在配置SSH前已为服务器进行如下配置项目配置WindowsWindows11Windows NVIDIA 驱动580.88CUDA13.0WSLWSL2Ubuntu 24.04Windows的.wslconfig为[wsl2]networkingModemirroreddnsTunnelingtrueautoProxytruefirewalltrue接下来打开服务器的WSL2Ubuntu 24.04安装SSH服务sudoaptupdatesudoaptinstall-yopenssh-serversudosystemctlenable--nowsshsudosystemctl statusssh--no-pager安装过程出现报错Could not execute systemctl: at /usr/bin/deb-systemd-invoke line148. dpkg: error processing package openssh-server(--configure): installed openssh-server package post-installation script subprocess returned errorexitstatus1Processing triggersforman-db(2.12.0-4build2)... Processing triggersforlibc-bin(2.39-0ubuntu8.8)... Errors were encounteredwhileprocessing: openssh-server E: Sub-process /usr/bin/dpkg returned an error code(1)这里显示的是安装后的处理过程出现了问题接下来通过命令查询SSH服务情况sudosystemctl status ssh.service ssh.socket --no-pager-l输出如下○ ssh.service - OpenBSD Secure Shell server Loaded: loaded(/usr/lib/systemd/system/ssh.service;disabled;preset: enabled)Active: inactive(dead)TriggeredBy: × ssh.socket Docs: man:sshd(8)man:sshd_config(5)× ssh.socket - OpenBSD Secure Shell server socket Loaded: loaded(/usr/lib/systemd/system/ssh.socket;enabled;preset: enabled)Active: failed(Result: resources)Triggers: ● ssh.service Listen:0.0.0.0:22(Stream)[::]:22(Stream)CPU: 368us Sep3017:36:20 hit(sd-listen[1039]: ssh.socket: Failed to create listening socket(0.0.0.0:22): Address alreadyinuse Sep3017:36:20 hit systemd[1]: ssh.socket: Failed to receive listening socket(0.0.0.0:22): Input/output error Sep3017:36:20 hit systemd[1]: ssh.socket: Failed to listen on sockets: Input/output error Sep3017:36:20 hit systemd[1]: ssh.socket: Failed with resultresources.Sep3017:36:20 hit systemd[1]: Failed to listen on ssh.socket - OpenBSD Secure Shell server socket. Sep3017:41:27 hit(sd-listen[1275]: ssh.socket: Failed to create listening socket(0.0.0.0:22): Address alreadyinuse Sep3017:41:27 hit systemd[1]: ssh.socket: Failed to receive listening socket(0.0.0.0:22): Input/output error Sep3017:41:27 hit systemd[1]: ssh.socket: Failed to listen on sockets: Input/output error Sep3017:41:27 hit systemd[1]: ssh.socket: Failed with resultresources.Sep3017:41:27 hit systemd[1]: Failed to listen on ssh.socket - OpenBSD Secure Shell server socket.意思是22端口发生了监听冲突导致ssh.socket启动失败进而让软件包配置失败。通过Windows的服务管理器发现确实有应用占用了22端口这里通过更改监听的端口解决首先创建覆盖文件sudomkdir-p/etc/systemd/system/ssh.socket.dsudonano/etc/systemd/system/ssh.socket.d/override.conf编辑器中输入以下内容将原有使用的22端口改为2223端口[Socket]ListenStreamListenStream0.0.0.0:2223ListenStream[::]:2223保存退出然后让配置生效sudosystemctl daemon-reloadsudosystemctl reset-failed ssh.socket ssh.servicesudosystemctl restart ssh.socketsudosystemctl status ssh.socket --no-pager-l若显示active (listening)就可以继续完成安装sudodpkg--configure-asudoapt--fix-brokeninstall由于这里WSL使用的是Mirrored镜像网络模式需要放行WSL的SSH端口在服务器的管理员PowerShell中执行New-NetFirewallHyperVRule-NameWSL-SSH-2223-DisplayNameWSL SSH 2223-DirectionInbound-VMCreatorId{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}-ProtocolTCP-LocalPorts2223完成后就可以完成SSH登录ssh-p2223idip接下来使用Tailscale实现跨网络访问首先在服务器的WSL中安装Tailscalecurl-fsSLhttps://tailscale.com/install.sh-o/tmp/tailscale-install.shsh/tmp/tailscale-install.sh这是官方安装脚本第一条命令成功后再执行第二条即可。安装完成后启动服务并登录sudosystemctlenable--nowtailscaledsudotailscale up--hostnameyour_name终端会显示登录链接复制到浏览器打开用你的账号登录并授权设备加入网络。加入后服务器的WSL就拥有了一个Tailscale地址tailscaleip-4tailscale status然后可以使用这个地址实现跨网络访问了ssh-p2223idtailscale_ipMyoAssist安装以及测试安装系统依赖sudoaptupdatesudoaptinstall-ygitcurlca-certificates python3-venv\build-essential pkg-config libglfw3 libegl1 libgl1\libosmesa6 ffmpeg tmux安装虚拟环境mkdir-p~/.venvs python3-mvenv ~/.venvs/uv-tools ~/.venvs/uv-tools/bin/python-mpipinstall--upgradepip uv下载项目并创建Python 3.11环境mkdir-p~/projectscd~/projectsgitclone https://github.com/neumovelab/myoassist.gitcdmyoassist然后执行~/.venvs/uv-tools/bin/uv pythoninstall3.11~/.venvs/uv-tools/bin/uv venv--python3.11.venvsource.venv/bin/activate安装MyoAssist进入目录~/projects/myoassist输入命令~/.venvs/uv-tools/bin/uv pipinstall-e.安装完成后记录版本gitrev-parse HEADsource-commit.txt ~/.venvs/uv-tools/bin/uv pip freezeenvironment-lock.txt检查PyTorch是否真正能够使用GPUpython -PY import torch import mujoco print(MuJoCo:, mujoco.__version__) print(PyTorch:, torch.__version__) print(PyTorch CUDA:, torch.version.cuda) print(CUDA available:, torch.cuda.is_available()) if torch.cuda.is_available(): print(GPU:, torch.cuda.get_device_name(0)) print(VRAM GiB:, round( torch.cuda.get_device_properties(0).total_memory / 1024**3, 1)) x torch.randn(512, 512, devicecuda) y x x torch.cuda.synchronize() print(GPU calculation passed:, tuple(y.shape)) PY验证安装和短训练先启用模型缓存并为远程会话选择无窗口渲染exportMYOASSIST_CACHE_DIR$HOME/.cache/myoassistexportMUJOCO_GLeglexportMPLBACKENDAgg执行官方安装检查python test_setup.py检查通过后运行短训练先不加实时渲染选项python rl_train/run_train.py\--config_file_pathrl_train/train/train_configs/test.json这是最小训练入口结果保存在rl_train/results/train_session_*这个是用于验证训练流程并不要求学会稳定行走因此输出结果是模型马上就摔倒了需要注意的是我这里第一次运行训练脚本会出现报错RuntimeError: Cannot re-initialize CUDAinforked subprocess. To use CUDA with multiprocessing, you must use thespawnstart method这是CUDA与多进程启动方式冲突了我这里直接在训练脚本开头手动指定CUDA的子进程通过spawn方式启动而不是fork具体原因下面这篇文章给出了解释https://blog.csdn.net/handsomeboysk/article/details/149935280训练完成后结果会放在rl_train/results文件夹下找到本次的train_session_*目录其中会有session_config.json本次配置train_log.json训练日志trained_models/保存的权重。加载策略进行评估把下面路径替换为本次真实的结果目录python rl_train/run_policy_eval.py\rl_train/results/train_session_实际时间戳\--no-show测试后发现一开始就出现了摔倒的情况下一步开展较长的训练接下来先保留原有配置创建第一轮的200万步试跑复制rl_train/train/train_configs/imitation_tutorial_22_separated_net_partial_obs.json并将副本命名为imitation_pilot_22.json并修改以下参数参数新值total_timesteps2000000env_params.num_envs8ppo_params.n_steps512ppo_params.batch_size2048ppo_params.device‘cpu’logger_params.logging_frequency8logger_params.evaluate_frequency16evaluate_param_list[0].num_timesteps600完成后再次运行python rl_train/run_train.py\--config_file_pathrl_train/train/train_configs/imitation_pilot_22.json基于已有模型继续训练如果观察结果还是不满意想继续增加训练步数可以指定已有的训练模型再启动一个新的训练会话。例如复制最新结果目录中的session_config.json放到rl_train/train/train_configs/imitation_continue_3m.json修改json文件total_timesteps:3000000以及env_params中的prev_trained_policy_path:/home/lenovo/projects/myoassist/rl_train/results/实际会话目录/trained_models/实际模型文件名值得注意的是复制模型路径后需要去掉末尾的.zip。接下来就可以继续启动训练了python rl_train/run_train.py\--config_file_pathrl_train/train/train_configs/imitation_continue_3m.json总结到这里我们已经实现跨网络对服务器进行访问然后完成了MyoAssist在服务器上的部署并初步尝试了训练以及测试。下一步计划对现有的工作进行复现。
返回列表