visual-studio - 如何使用交互式 session 在远程 VS 代码的调试 session 中运行代码?

标签 visual-studio cluster-computing slurm

我正在使用集群(类似于 slurm,但使用 condor )并且我想使用 VS 代码(特别是它的调试器)运行我的代码,它是 remote sync extension .

我尝试在 VS 代码中使用我的调试器运行它,但它并没有像预期的那样工作。

首先,我像往常一样使用 VS 代码和远程同步登录到集群,效果很好。然后我继续使用以下命令获取交互式作业:

condor_submit -i request_cpus=4 request_gpus=1

然后成功地提供了一个节点/gpu 来使用。

一旦我尝试运行调试器,但它以某种方式将我从远程 session 中注销(看起来它从打印语句转到头节点)。那是 不是 我想要的是。我想在我分配的节点/gpu 的交互式 session 中运行我的工作。为什么 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

没有 Debug模式甚至不能运行

问题比我想象的要严重。我无法在交互式 session 中运行调试器,但我什至无法在没有它自己切换到 Python 调试控制台的情况下“运行而无需调试”。所以这意味着我必须手动运行 python main.py但这不允许我使用变量 Pane ......这是一个很大的损失!

我正在做的是将我的终端切换到 conoder_ssh_to_job然后单击按钮 Run Without Debugging (或 ^F5Control + fn + f5 ),虽然我确保在我的集成窗口底部的交互式 session 中,但它自己进入 Python 调试器窗口/ Pane ,该窗口/ Pane 未连接到我请求的交互式 session 我的集群...

有关的:
  • gitissue:https://github.com/microsoft/vscode-remote-release/issues/1722
  • 知乎:https://qr.ae/TqCiu8
  • 红迪网:https://www.reddit.com/r/vscode/comments/f1giwi/how_to_run_code_in_a_debugging_session_from_vs/
  • 最佳答案

    您可以尝试颠倒操作顺序;首先提交作业,获取分配给你的计算节点的名称,然后指示VSCode连接到计算节点而不是登录节点。
    所以首先是

    condor_submit -i request_cpus=4 request_gpus=1
    
    并记下计算节点的名称。假设 node001在下面的。
    然后,在您的笔记本电脑上打开 VSCode,单击远程开发扩展图标并选择“远程 SSH:连接到主机...”。选择“+ 添加新的 SSH 主机...”。在“输入 SSH 命令”框中,添加以下内容:
    ssh -J vision-sched.cs.illinois.edu miranda9@node001
    
    VSCode 会询问您应该更新哪个 SSH 配置文件。确保检查该配置:如果需要,指定 SSH key 、用户名等。还要确保您拥有 vision-sched.cs.illinois.edu在该文件中正确配置。
    然后您可以选择要连接的主机。然后 VSCode 将在计算节点上执行,并在分配完成时断开连接。

    关于visual-studio - 如何使用交互式 session 在远程 VS 代码的调试 session 中运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60141905/

    相关文章:

    python - 不能声明双数组?

    c# - Visual Studio 编译正常,但仍然显示红线

    java - 分布式微服务共享状态

    c - 如何根据我传递给程序的参数设置 slurm 中每个节点的任务数?

    hpc - Snakemake:如何实现将输入/输出文件复制到/从 tmp 文件夹并在那里应用规则的机制

    c# - 将解决方案从 Visual Studio 2005 转换为 2008

    c++ - cmake 不可见 Visual Studio 编译器

    msmq - 为群集设置 MSMQ

    java - 如何将 jar 的数据保存为具有集群感知的库

    sed - 多行匹配: extract separate lines