我想通过脚本main.py多次使用不同的参数运行python脚本sbatch_run.sh,如下所示:
#!/bin/bash
#SBATCH --job-name=sbatch_run
#SBATCH --array=1-1000
#SBATCH --exclude=node047
arg1=10 #arg to be change during runs
arg2=12 #arg to be change during runs
python main.py $arg1 $arg2
Run Code Online (Sandbox Code Playgroud)
参数在sbatch运行的bash文件中编码.我担心如果我一个接一个地运行sbatch_run.sh多次但是在每次运行期间更改arg1和arg2的值,那么它可能会导致我的运行中出错.例如,如果我这样做:
sbatch sbatch_run.sh # with arg1=10 and arg2=12
Run Code Online (Sandbox Code Playgroud)
然后我立即更改后sbatch_run.sh再次运行该文件,如下所示:
sbatch sbatch_run.sh # with arg1=69 and arg2=666
Run Code Online (Sandbox Code Playgroud)
将我的运行全部运行到最后一个(即arg1=69和arg2=666)而不是每个运行与自己的参数.
我确信如果我在main.py中对参数进行硬编码然后运行相同的sbatch脚本但是更改main.py它将运行最后一个.我想知道如果我改变sbatch_run.sh脚本也是如此.
只是你知道,我确实尝试过这个实验,运行1000个脚本,然后有些人排队并发出一个睡眠命令然后更改sbatch_run.sh.它似乎并没有改变我的跑步,但是,如果我错了,这太重要了,不会出错,并且想确保我也问过.
为了记录,我跑了:
#!/bin/bash
#SBATCH --job-name=ECHO
#SBATCH --array=1-1000
#SBATCH --exclude=node047
sleep 15
echo helloworld
echo …Run Code Online (Sandbox Code Playgroud) 我正在pytorch论坛中浏览这篇文章,我也想这样做。原始帖子删除并添加了图层,但我认为我的情况没有什么不同。我还想添加图层或更多过滤器或单词嵌入。我的主要动机是AI代理不知道全部词汇/词典,因为它很大。我强烈希望(暂时)不要按字符进行RNN。
所以对我来说,发生的事情是,当代理开始向前传递时,它可能会找到从未见过的新单词,并且需要将它们添加到嵌入表中(或者可能在开始向前传递之前添加新的过滤器)。
所以我想确定的是:
如何做到这一点?任何有效的示例代码?
我认为我的主要问题是 github 页面不支持 jekyll 4。这对我来说没问题,但是无论如何我如何将 jekyll 降级以使其正常工作?
我尝试按照此处的说明进行操作:https : //github.com/github/pages-gem/issues/577
这基本上似乎建议使用旧版本的 jekyll。我这样做很好,但似乎bundle拒绝服从我,我不知道为什么,或者我进入了一个我无法摆脱的奇怪循环。
所以我得到的主要错误是:
$ bundle
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
You have requested:
jekyll ~> 3.8.5
The bundle currently has jekyll locked at 4.0.0.
Try running `bundle update jekyll`
If you are updating multiple gems in your Gemfile at once,
try passing them all to `bundle update`
Run Code Online (Sandbox Code Playgroud)
但似乎我被锁定为 4。我尝试解锁,但似乎无法使其正常工作。我最近的尝试如下:
$ gem install jekyll -v 3.8.5
Fetching kramdown-1.17.0.gem
Fetching jekyll-3.8.5.gem
Fetching sass-listen-4.0.0.gem
Fetching sass-3.7.4.gem
Fetching …Run Code Online (Sandbox Code Playgroud) 我本来想在 DGX A100 上设置 DDP(分布式数据并行),但它不起作用。每当我尝试运行它时,它就会挂起。我的代码非常简单,只需为 4 个 GPU 生成 4 个进程(为了调试,我只是立即销毁该组,但它甚至没有到达那里):
def find_free_port():
""" /sf/ask/95568581/ """
import socket
from contextlib import closing
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.bind(('', 0))
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
return str(s.getsockname()[1])
def setup_process(rank, world_size, backend='gloo'):
"""
Initialize the distributed environment (for each process).
gloo: is a collective communications library (https://github.com/facebookincubator/gloo). My understanding is that
it's a library/API for process to communicate/coordinate with each other/master. It's a backend library.
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_DISABLE=1
/sf/ask/4275277331/
https://pytorch.org/docs/stable/distributed.html#common-environment-variables
"""
if rank …Run Code Online (Sandbox Code Playgroud) 为什么torchtext找不到这个符号?
(synthesis) miranda9~/ultimate-utils $ python ~/type-parametric-synthesis/src/main.py --reproduce_10K --serial --debug --num_workers 0
Traceback (most recent call last):
File "/home/miranda9/type-parametric-synthesis/src/main.py", line 32, in <module>
from data_pkg.data_preparation import get_dataloaders, get_simply_type_lambda_calc_dataloader_from_folder
File "/home/miranda9/type-parametric-synthesis/src/data_pkg/data_preparation.py", line 10, in <module>
from torchtext.vocab import Vocab, vocab
File "/home/miranda9/miniconda3/envs/synthesis/lib/python3.9/site-packages/torchtext/__init__.py", line 5, in <module>
from . import vocab
File "/home/miranda9/miniconda3/envs/synthesis/lib/python3.9/site-packages/torchtext/vocab.py", line 13, in <module>
from torchtext._torchtext import (
ImportError: /home/miranda9/miniconda3/envs/synthesis/lib/python3.9/site-packages/torchtext/_torchtext.so: undefined symbol: _ZN2at6detail10noopDeleteEPv
Run Code Online (Sandbox Code Playgroud) 我做了:
!pip install kora
import kora.install.py38
Run Code Online (Sandbox Code Playgroud)
但出现错误:
Requirement already satisfied: kora in /usr/local/lib/python3.7/dist-packages (0.9.19)
Requirement already satisfied: ipython in /usr/local/lib/python3.7/dist-packages (from kora) (5.5.0)
Requirement already satisfied: fastcore in /usr/local/lib/python3.7/dist-packages (from kora) (1.3.26)
Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from fastcore->kora) (21.0)
Requirement already satisfied: pip in /usr/local/lib/python3.7/dist-packages (from fastcore->kora) (21.1.3)
Requirement already satisfied: simplegeneric>0.8 in /usr/local/lib/python3.7/dist-packages (from ipython->kora) (0.8.1)
Requirement already satisfied: pygments in /usr/local/lib/python3.7/dist-packages (from ipython->kora) (2.6.1)
Requirement already satisfied: traitlets>=4.2 in /usr/local/lib/python3.7/dist-packages (from ipython->kora) (5.1.0)
Requirement already satisfied: …Run Code Online (Sandbox Code Playgroud) 我在 python 包中组织我的代码(通常在虚拟环境中virtualenv和/或conda),然后通常调用:
python <path_to/my_project/setup.py> develop
Run Code Online (Sandbox Code Playgroud)
这样我就可以使用我的代码的最新版本。由于我主要开发统计或机器学习算法,因此我会制作大量原型并每天更改代码。但是,最近在我可以访问的集群上运行我们的实验的推荐方法是通过 docker。我了解了 docker,我想我对如何使其工作有一个粗略的想法,但我不太确定我的解决方案是否好或者是否有更好的解决方案。
我认为的第一个解决方案是使用以下解决方案复制我的 docker 映像中的数据:
COPY /path_to/my_project
pip install /path_to/my_project
Run Code Online (Sandbox Code Playgroud)
然后pip安装它。这个解决方案的问题是我每次都必须实际构建一个新图像,这看起来很傻,并希望我能有更好的东西。为此,我想拥有一个 bash 文件,例如:
#BASH FILE TO BUILD AND REBUILD MY STUFF
# build the image with the newest version of
# my project code and it pip installs it and its depedencies
docker build -t image_name .
docker run --rm image_name python run_ML_experiment_file.py
docker kill current_container #not sure how to do get id of container
docker rmi image_name
Run Code Online (Sandbox Code Playgroud)
正如我所说,我的直觉告诉我这很愚蠢,所以我希望有一种使用 …
我试图在后台运行带有srun的slurm作业。不幸的是,由于现在我不得不通过docker运行某些东西,因此使用sbatch有点烦人,所以我试图找出是否可以完全避免。
根据我的观察,每当我运行srun时,请说:
srun docker image my_job_script.py
Run Code Online (Sandbox Code Playgroud)
并关闭我正在运行命令的窗口(以避免接收所有打印语句),并打开另一个终端窗口以查看命令是否仍在运行,看来我的运行脚本由于某种原因被取消了。由于它不是通过sbatch进行的,因此不会向我发送带有错误日志的文件(据我所知),所以我不知道为什么它会关闭。
我也尝试过:
srun docker image my_job_script.py &
Run Code Online (Sandbox Code Playgroud)
在终端将控制权还给我。不幸的是,如果我这样做,它仍然会继续在终端屏幕上打印内容,这是我试图避免的。
本质上,我通过ssh登录到远程计算机,然后执行srun命令,但是似乎如果我终止ssh连接的通信,则srun命令会自动终止。有办法阻止这种情况吗?
理想情况下,我基本上希望发送脚本以使其运行,并且不要由于任何原因取消该脚本,除非我将其取消,并且该脚本scancel不应打印到屏幕上。所以我理想的解决方案是:
这将是我的想法解决方案。
对于想了解sbatch问题的好奇人群,我希望能够这样做(这是理想的解决方案):
sbatch docker image my_job_script.py
Run Code Online (Sandbox Code Playgroud)
但是,人们会知道它是行不通的,因为sbatch接收到了不是“ batch”脚本的命令docker。本质上,一个简单的解决方案(实际上不适用于我的情况)是将docker命令包装在批处理脚本中:
#!/usr/bin/sh
docker image my_job_script.py
Run Code Online (Sandbox Code Playgroud)
不幸的是,我实际上是在使用批处理脚本来编码我正在运行的任务的很多信息(类似于配置文件)。因此这样做可能会影响我所做的工作,因为其基础文件正在更改。通过将作业直接发送到sbatch可以避免这种情况,因为它实际上创建了批处理脚本的副本(如本问题所述:在运行期间更改发送给sbatch的bash脚本运行时是一个坏主意吗?)。因此,解决我的问题的真正方法是使批处理脚本包含我的脚本所需的所有信息,然后在python中以某种方式呼叫docker并同时传递所有信息。不幸的是,其中一些信息是函数指针和对象,因此我什至不知道如何将此类信息传递给在python中运行的docker命令。
或者也许能够直接运行docker进行分批处理,而不是使用批处理脚本来解决问题。
如何查看我在开发模式下安装的软件包?
我试过了,conda list但它没有显示任何熟悉的东西。
我跑了conda develop .,它似乎安装了它:
(automl-meta-learning) brandomiranda~/automl-meta-learning/automl ? conda develop .
path exists, skipping /Users/brandomiranda/automl-meta-learning/automl
completed operation for: /Users/brandomiranda/automl-meta-learning/automl
Run Code Online (Sandbox Code Playgroud)
但是,运行脚本时出现错误:
(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/automl/meta_optimizers ? python differentiable_SGD.py
Traceback (most recent call last):
File "differentiable_SGD.py", line 8, in <module>
from automl.utils.torch_utils import helloworld
ModuleNotFoundError: No module named 'automl.utils'
Run Code Online (Sandbox Code Playgroud)
但是当我做 conda list 时,我看不到任何我认识的东西:
(automl-meta-learning) brandomiranda~/automl-meta-learning/automl/automl/meta_optimizers ? conda list
# packages in environment at /Users/brandomiranda/miniconda3/envs/automl-meta-learning:
#
# Name Version Build Channel
appnope 0.1.0 py37_0
asn1crypto 1.3.0 py37_0
astroid 2.3.3 py37_0 …Run Code Online (Sandbox Code Playgroud) colab:https://colab.research.google.com/drive/1poFdFYmkR_rDM5U5Z2WWjTepMQ8h vzNc?usp=sharing
HF falcon 教程有以下行:
tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪。pad 和 eos 是相同的,但为什么首先要在它们之间做出区分呢?
请注意,这样做 pad = eos. 这意味着在微调期间,模型永远不会被训练为输出 eos(最有可能),因为 eos 被视为填充令牌并且不会反向传播:
I just observed that when I set tokenizer.pad_token = tokenizer.eos_token during training, the model won't stop generating during inference, since it was trained to not output the eos token (per discussions above).
Run Code Online (Sandbox Code Playgroud)
我看到了这个(这里https://github.com/huggingface/transformers/issues/22794):
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
Run Code Online (Sandbox Code Playgroud)
但这假设模型有 pad_token。我认为必须进行额外的检查,确保它确实具有 pad_token 的嵌入,以便不存在运行时错误(〜从嵌入“表”/矩阵提取矩阵中的类型错误)。
但如果这样做,可能需要注意初始化新令牌,以便它主导生成: https: //nlp.stanford.edu/~johnhew/vocab-expansion.html
代码:
tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)
该死的,这仍然不起作用:
UserWarning: You …Run Code Online (Sandbox Code Playgroud) machine-learning pytorch huggingface-transformers huggingface-tokenizers huggingface