LLM模型训练一些报错
- A: OPENCL和CUDA分别是什么
- fatal error: ‘omp.h’ file not found
- error 61 connection refused
- Package ‘poppler-utils’ has no installation candidate
- ChatVectorDBChain is deprecated - please use from langchain.chains import ConversationalRetrievalChain
- How to fix “RuntimeError: expected scalar type Half but found Float” when using fp16
- AttributeError: ‘Logger’ object has no attribute ‘warning once’
- nltk报错zipfile.BadZipFile: File is not a zip file
- RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0!
On this page
- A: OPENCL和CUDA分别是什么
- fatal error: ‘omp.h’ file not found
- error 61 connection refused
- Package ‘poppler-utils’ has no installation candidate
- ChatVectorDBChain is deprecated - please use from langchain.chains import ConversationalRetrievalChain
- How to fix “RuntimeError: expected scalar type Half but found Float” when using fp16
- AttributeError: ‘Logger’ object has no attribute ‘warning once’
- nltk报错zipfile.BadZipFile: File is not a zip file
- RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0!
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)确实解决了问题。