【自然语言处理与大模型】离线环境的单机多卡分布式微调或推理存在的问题

一、问题总结

离线环境的单机多卡,在分布式推理和微调的时候出现了三个现象:

序号 问题描述 具体情况
1 回答速度非常慢 在离线环境下,尽管服务器配置了三张高性能卡(每张显存80G,算力大于9),推理速度依旧非常慢。同时,显存利用率高达80%。
2 输出乱七八糟 输出结果不可理解,包含多个国家语言的混合以及奇怪符号,与预期输出严重不符,但此现象不同于编码解码错误。
3 多轮对话报错 前几轮对话不仅响应速度慢且输出无意义内容。大约在第三轮对话时出现技术错误提示:“torch.distributed.distbackenderror:NCLL error unhandled system error”,疑似分布式引擎出现问题。

二、可能的原因分析

        首先使用transformers库写一个脚本,测试一下模型本身有没有问题,能正常推理,没有问题。然后把llamafactory里面所有可能影响显存的超参数都设置到很小的值,无法正常训练和推理。说明有可能是llamafactory的框架问题。但之前又在报分布式的错误!

        于是分析可得,是llamafactory在执行分布式推理和训练的时候配置有问题!查询官方文档,可知单机多卡命令如下:

# 使用CUDA_VISIBLE_DEVICES来制定哪几块GPU参与分布式
CUDA_VISIBLE_DEVICES=0,1 llamafactory-cli train config/config1.yaml

【注】如果你配置CUDA_VISIBLE_DEVICES环境变量为多张显卡,那么llamafactory将会使用分布式引擎。如果你没有设置CUDA_VISIBLE_DEVICES,默认使用开启分布式且使用所有GPU

        于是,我测试了只用一张卡,看看能否正常工作。也就是CUDA_VISIBLE_DEVICES只设置一张卡,命令如下:

# 指定只用cuda:0这张卡
CUDA_VISIBLE_DEVICES=0 llamafactory-cli train config/config1.yaml

        结果问题消失了,模型可以正常输出且使用huggingface推理的速度也很快。这就让我费解,为什么单机多卡无法成功?经过思考得出——离线单机多卡可能,也许,无法工作。

我猜测是因为以下这几点可能的原因:

  • 多机多卡训练:LLaMA-Factory支持使用DeepSpeed、DDP和FSDP等分布式引擎进行多机多卡训练。这些引擎依赖于网络通信来同步模型参数和梯度。没有网络连接,分布式训练将无法进行,限制了利用多台服务器资源加速训练的能力。
  • 单机多卡训练虽然单机多卡训练在同一台机器上进行,但某些分布式设置和协调仍可能依赖于网络接口。部分情况下,网络中断可能导致通信问题,影响训练效率或稳定性。

你可能感兴趣的:(【自然语言处理与大模型】,【学习心得】,自然语言处理,人工智能)