unilm 运行时错误:CUDA错误:内存不足

irlmq6kh  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(68)

这是一个关于使用fairseq进行分布式训练的问题。在运行bash脚本时,出现了一个问题。具体来说,数据文件路径、保存目录和预训练模型的路径都正确,但是在初始化分布式训练时出现了问题。

从日志中可以看到,初始化分布式训练时,各个进程之间的通信出现了问题。为了解决这个问题,可以尝试以下方法:

  1. 确保所有进程都在同一个网络中,并且没有防火墙或其他安全设置阻止它们之间的通信。

  2. 检查fairseq库的版本是否与torch库的版本兼容。如果不兼容,请尝试更新或降级这两个库的版本。

  3. 检查fairseq的配置文件(例如config/distributed_training.yaml),确保其中的设置正确。特别是关于进程间通信的部分,如ranksworld_size等。

  4. 如果问题仍然存在,可以尝试在本地运行单个进程,看看是否能成功训练。如果在本地运行正常,那么问题可能出在分布式环境上。可以尝试使用其他分布式工具(如mpirun)进行训练。
    这个错误是由于CUDA内存不足导致的。你可以尝试以下方法来解决这个问题:

  5. 减小批量大小(batch size)。这将减少每次迭代中使用的GPU内存。

  6. 使用更大的显存的GPU。

  7. 在训练过程中定期清理不再使用的变量,以释放GPU内存。

  8. 如果可能的话,尝试在具有更多GPU的机器上进行训练。

py49o6xq

py49o6xq1#

我尝试了很多次,找到了答案。
参考自 https://github.com/microsoft/UniSpeech/tree/main/downstreams/speaker_verification
在提取特征时,我们应该添加 with torch.no_grad():
例如:

with torch.no_grad():
    feature = <<extract_feature_model>>(audio)
e5nqia27

e5nqia272#

set -ex
data_bin=$1
save_dir=$2
PRETRAINED_MODEL=$3
python train.py $data_bin 
 --save-dir $save_dir 
 --arch deltalm_base 
 --pretrained-deltalm-checkpoint $PRETRAINED_MODEL 
 --share-all-embeddings 
 --max-source-positions 128 --max-target-positions 128 
 --criterion label_smoothed_cross_entropy 
 --label-smoothing 0.1 
 --optimizer adam --adam-betas '(0.9, 0.98)' 
 --lr-scheduler inverse_sqrt 
 --lr 1e-4 
 --warmup-init-lr 1e-07 
 --stop-min-lr 1e-09 
 --warmup-updates 4000 
 --max-update 4000 
 --max-epoch 10 
 --batch-size 1 
 --update-freq 1 
 --seed 1 
 --log-format simple 
 --skip-invalid-size-inputs-valid-test 
 --fp16 
 --eval-bleu 
 --eval-bleu-args '{"beam": 5, "max_len_a": 1.2, "max_len_b": 10}' 
 --eval-bleu-detok moses 
 --eval-bleu-remove-bpe=sentencepiece 
 --eval-bleu-print-samples 
 --best-checkpoint-metric bleu --maximize-best-checkpoint-metric
8cdiaqws

8cdiaqws3#

使用GPU 9时出现这个问题。

相关问题