LLM模型训练一些报错

A: OPENCL和CUDA分别是什么

GPT: OpenCL(Open Computing Language)和 CUDA(Compute Unified Device Architecture)都是用于通用计算的 API(应用程序编程接口)和平台。 OpenCL 是一个开放标准,由 Khronos Group 组织进行开发和维护。它允许开发人员在不同的硬件设备上使用相同的代码进行并行计算,包括 CPU、GPU 和 FPGA 等。OpenCL 平台支持多种编程语言,包括 C、C++ 和 Python 等。

CUDA 是一个由 NVIDIA 公司开发的通用并行计算平台和编程模型。它是为 NVIDIA 的 GPU 设计的,也是 NVIDIA GPU 上最流行的编程模型。CUDA 允许开发人员使用 C/C++、Fortran 和 Python 等编程语言进行并行计算,提供了许多优化工具和算法库,可以帮助开发人员更高效地利用 NVIDIA GPU 的计算能力。 总的来说,OpenCL 和 CUDA 都是用于通用计算的平台和编程模型,允许开发人员在 CPU、GPU 和其他加速器上进行并行计算。

fatal error: ‘omp.h’ file not found

LLVM的OpenMP是一种用于并行计算的API(应用程序接口)。它允许程序员在应用程序中标记需要并行执行的代码段,并指定如何分配计算资源。OpenMP使用线程级并行化来加速代码的执行,其中每个线程都可以在不同的计算核心上运行,从而实现更高的计算性能。LLVM的OpenMP实现支持多种编程语言,包括C,C++,Fortran和Python。

LLVM是一个开源的编译器基础设施项目,提供了一个通用的编译器框架、编译器前端和后端、代码优化、代码生成等功能,可以用于构建编译器、调试器、静态分析工具等。LLVM最初的开发目标是为了提供给Clang编译器使用,后来发展成为一个完整的编译器基础设施项目。LLVM还提供了许多工具和库,例如LLDB调试器、libc++标准C++库、AddressSanitizer内存错误检测工具等。LLVM的开发语言是C++,其开源协议是Apache 2.0许可证。

解决办法是安装libomp类库

brew install libomp

可以查看下包信息:

brew info libomp
libomp: stable 6.0.1 (bottled)
LLVM's OpenMP runtime library
https://openmp.llvm.org/
/usr/local/Cellar/libomp/6.0.1 (12 files, 1.2MB) *
  Poured from bottle on 2018-11-20 at 16:12:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libomp.rb
==> Dependencies
Build: cmake ✘
==> Requirements
Required: macOS >= 10.10 ✔
==> Caveats
On Apple Clang, you need to add several options to use OpenMP's front end
instead of the standard driver option. This usually looks like
  -Xpreprocessor -fopenmp -lomp

You might need to make sure the lib and include directories are discoverable
if /usr/local is not searched:

  -L/usr/local/opt/libomp/lib -I/usr/local/opt/libomp/include

For CMake, the following flags will cause the OpenMP::OpenMP_CXX target to
be set up correctly:
  -DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" -DOpenMP_CXX_LIB_NAMES="omp" -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib

error 61 connection refused

安装nltk后,执行nltk.download() 弹出界面弹出如下错误;或者 只想下载stopwords语料库时,提示错误如下: error 61 connection refused 原因是无法建立到 raw.githubusercontent.com 服务器的连接问题,可能dn没有解析到该域名,需要在host中添加ip映射;

sudo vi /etc/hosts

添加IP地址

# github download nltk package
199.232.68.133  raw.githubusercontent.com

按 esc 键退出,输入wq保存退出;

Package ‘poppler-utils’ has no installation candidate

apt install poppler-utils -y      

报错,需要

# 更新软件包
apt update         

# 查询下
apt-cache search poppler-utils       

再试下重新安装

ChatVectorDBChain is deprecated - please use from langchain.chains import ConversationalRetrievalChain

新版本langchain更新了api,换一下安装旧的版本

langchain==0.0.124

我自己的试了下并不行,后来又降了几个版本,最后好像是langchain==0.0.120 但是又来了新的问题,哭晕

How to fix “RuntimeError: expected scalar type Half but found Float” when using fp16

google了一下这个问题挺多的,我的transformers的版本4.27.1已经很高了,不用升级,后来用下面的方法解决了 I came across the same error. I am also using diffusers 1.4. I added the with torch.autocast(“cuda”): line above the pipe(prompt, latents=latents) and problem solved.

# 部分代码
    with torch.autocast("cuda"): 
        trainer.train()

AttributeError: ‘Logger’ object has no attribute ‘warning once’

modeling_chatglm.py中报错了logger.warning_once没有这个warning_once方法,查了全网没有找到,可能是我的transformers版本低了?

from transformers.utils import logging

我看是从这里引入的,但是我本地transformers的版本4.27.1已经很高了,算了最后用了一个简单的方法,修改了代码:

logger.warning_once = logger.warn

nltk报错zipfile.BadZipFile: File is not a zip file

过去下载的语料路径有问题,删除掉系统中nltk_data文件夹,重新下载对应的语料

RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0!

报这个错是应为采用gpu做数据运算,但是部分参与运算的数据在cpu上,可能是中间过程被移到了cpu上,需要重新移到gpu上,可以查看下具体报错信息,看一下是什么数据。 解决方法是将数据移动到gpu上,比如:

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model = model.to(device)

其实我也比较奇怪,我前面明明是用下面的方法加载模型的,因该是在gpu上的,

model = AutoModel.from_pretrained(
    # "thuglm", trust_remote_code=True
    "THUDM/chatglm-6b", 
    # load_in_8bit=True,   # 将模型参数转换为 8 位整数格式,以减少模型大小和显存占用,但可能会影响模型的精度和性能。8bit不支持用half,这里先注释, 8bit训练模型有问题,计算的loss都是零
    trust_remote_code=True, 
    # device_map="auto"  # 将模型参数和计算转换为特定设备的格式,以在多个设备上运行时提高性能。
).half().cuda() 

我把load_in_8bit和device_map都关掉了,怎么还是会在cpu上呢?而且后面还制定了.cuda,但是上面的model.to(device)确实解决了问题。



请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部