Cha*_*ker 12 cluster-computing visual-studio slurm
我正在使用一个集群(类似于 slurm 但使用condor),我想使用 VS 代码(特别是它的调试器)运行我的代码,它是远程同步扩展。
我尝试在 VS 代码中使用我的调试器运行它,但它并没有像预期的那样工作。
首先,我像往常一样使用 VS 代码和远程同步登录到集群,效果很好。然后我继续使用以下命令获取交互式作业:
condor_submit -i request_cpus=4 request_gpus=1
Run Code Online (Sandbox Code Playgroud)
然后成功地提供了一个节点/gpu 来使用。
一旦我尝试运行调试器,但它以某种方式将我从远程会话中注销(看起来它从打印语句转到头节点)。那不是我想要的。我想在我分配的节点/gpu 的交互式会话中运行我的工作。为什么 VS 代码在错误的地方运行它?我怎样才能在正确的地方运行它?
集成终端的一些输出:
source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
/home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py
conda activate base
(automl-meta-learning) miranda9~/automl-meta-learning $ source /home/miranda9/miniconda3/envs/automl-meta-learning/bin/activate
(automl-meta-learning) miranda9~/automl-meta-learning $ /home/miranda9/miniconda3/envs/automl-meta-learning/bin/python /home/miranda9/.vscode-server/extensions/ms-python.python-2020.2.60897-dev/pythonFiles/lib/python/new_ptvsd/wheels/ptvsd/launcher /home/miranda9/automl-meta-learning/automl/automl/meta_optimizers/differentiable_SGD.py
--> main in differentiable SGD
hello world torch_utils!
vision-sched.cs.illinois.edu
Files already downloaded and verified
Files already downloaded and verified
Files already downloaded and verified
-> initialization of DiMO done!
---> i = 0, iteration/it 1 about to start
lp_norms(mdl) = 18.43514633178711
lp_norms(meta_optimized mdl) = 18.43514633178711
[e=0,it=1], train_loss: 2.304989814758301, train error: -1, test loss: -1, test error: -1
---> i = 1, iteration/it 2 about to start
lp_norms(mdl) = 18.470401763916016
lp_norms(meta_optimized mdl) = 18.470401763916016
[e=0,it=2], train_loss: 2.3068909645080566, train error: -1, test loss: -1, test error: -1
---> i = 2, iteration/it 3 about to start
lp_norms(mdl) = 18.548133850097656
lp_norms(meta_optimized mdl) = 18.548133850097656
[e=0,it=3], train_loss: 2.3019633293151855, train error: -1, test loss: -1, test error: -1
---> i = 0, iteration/it 1 about to start
lp_norms(mdl) = 18.65604019165039
lp_norms(meta_optimized mdl) = 18.65604019165039
[e=1,it=1], train_loss: 2.308889150619507, train error: -1, test loss: -1, test error: -1
---> i = 1, iteration/it 2 about to start
lp_norms(mdl) = 18.441967010498047
lp_norms(meta_optimized mdl) = 18.441967010498047
[e=1,it=2], train_loss: 2.300947666168213, train error: -1, test loss: -1, test error: -1
---> i = 2, iteration/it 3 about to start
lp_norms(mdl) = 18.545459747314453
lp_norms(meta_optimized mdl) = 18.545459747314453
[e=1,it=3], train_loss: 2.30662202835083, train error: -1, test loss: -1, test error: -1
-> DiMO done training!
--> Done with Main
(automl-meta-learning) miranda9~/automl-meta-learning $ conda activate base
(automl-meta-learning) miranda9~/automl-meta-learning $ hostname vision-sched.cs.illinois.edu
Run Code Online (Sandbox Code Playgroud)
问题比我想象的要严重。我无法在交互式会话中运行调试器,但我什至不能在没有它自己切换到 Python 调试控制台的情况下“运行而无需调试”。所以这意味着我必须手动运行,python main.py但这不允许我使用变量窗格......这是一个很大的损失!
我正在做的是将我的终端切换到conoder_ssh_to_job,然后单击按钮Run Without Debugging(或^F5或Control + fn + f5),虽然我确保在我的集成窗口底部的交互式会话中,但它本身会进入 Python 调试器窗口/窗格,它是未连接到我从集群请求的交互式会话...
有关的:
小智 14
我最近偶然发现了一个相关问题(我想在计算节点上使用 VsCode 交互式 Python 功能),上面的方法不起作用,但这解决了它:
ssh cluster~/.ssh/id_rsa.pub密钥中,因此通常将(本地计算机)的内容附加到.ssh/authorized_keys(远程集群)srun --pty bash)username@nodename)。为了便于论证,让我们假设我得到一个通用名称,例如node001~/.ssh/config文件并将其编辑为:Host cluster
# stuff written
Host node*
HostName %h
ProxyJump cluster
User $USERNAME
Run Code Online (Sandbox Code Playgroud)
现在我可以使用 .ssh 从本地计算机(只要计算节点正在运行)通过 ssh 连接到它ssh node001。
在 VsCode 中,这可以归结为
CTRL+P>Remote-SSH: Connect to Host...node001我不知道这个解决方案有多通用,我希望它至少能帮助某人!
这是一个更简单的解决方法:
bash例如,在远程服务器上创建一个名为某处的文件/home/myuser/pathto/bashchmod +x bashsalloc [your desired options for the interactive job]中bash"terminal.integrated.automationShell.linux": "/home/myuser/pathto/bash"并保存(使用绝对路径。例如~/pathto/bash对我来说不起作用)现在,每次运行调试器时,它都会首先请求交互式作业,然后调试器将在其上运行。但请注意,这也适用于您在tasks.json 中运行的任务。
您也可以使用srun代替salloc. 例如srun --pty -t 2:00:00 --mem=8G bash
您可以尝试颠倒操作顺序;首先提交作业,获取分配给你的计算节点的名称,然后指示VSCode连接到计算节点而不是登录节点。
所以首先是
condor_submit -i request_cpus=4 request_gpus=1
Run Code Online (Sandbox Code Playgroud)
并记下计算节点的名称。假设node001在下面。
然后,在您的笔记本电脑上打开 VSCode,单击远程开发扩展图标并选择“远程 SSH:连接到主机...”。选择“+ 添加新的 SSH 主机...”。在“输入 SSH 命令”框中,添加以下内容:
ssh -J vision-sched.cs.illinois.edu miranda9@node001
Run Code Online (Sandbox Code Playgroud)
VSCode 会询问您应该更新哪个 SSH 配置文件。确保检查该配置:如果需要,指定 SSH 密钥、用户名等。还要确保vision-sched.cs.illinois.edu在该文件中正确配置。
然后您可以选择要连接的主机。然后 VSCode 将在计算节点上执行,并在分配完成时断开连接。
| 归档时间: |
|
| 查看次数: |
2597 次 |
| 最近记录: |