我目前正在使用脚本进行分布式训练。训练逻辑是该脚本可以在没有密码的情况下登录另一台服务器并进行相同的Python调用。我在每台主机上使用 conda 进行环境维护。
现在看来,如果我直接使用
ssh -o StrictHostKeyChecking=no -p 22 43.0.0.1 'cd /sgnn/dist; conda activate sgnn;(export OMP_NUM_THREADS=2; python3 distDemo.py)'
这样的命令,就会报类似下面的错误信息:
bash: conda: command not found
Traceback (most recent call last):
File "distDemo.py", line 8, in <module>
import torch
ModuleNotFoundError: No module named 'torch'
但是如果我人为地将登录和命令调用分开,似乎就不会有问题了。我想知道如何解决这个问题。
ssh -o StrictHostKeyChecking=no -p 22 43.0.0.1
cd /sgnn/dist; conda activate sgnn;(export OMP_NUM_THREADS=2; python3 distDemo.py) # right run
通过 ssh 登录时,您的配置文件脚本将被执行;当您直接通过 ssh 命令运行脚本时,它们就不是了。
我们过去常常通过类似的方式发送 ssh 命令(根据我的记忆):
ssh user@server bash -c "test; source ~/.bash_profile; my command"
如果你想知道“测试”是什么,它是一个虚拟命令,被视为可执行文件的名称($0),如果我完全理解我读过的内容的话;)
抱歉这个不完整的回复,那是在另一种职业生活中;)。希望您能够使用它作为测试的起点。