容器内微调mistral-7b遇ImportError:已装包无法识别排查
问题:容器内微调Mistral-7b时出现bitsandbytes导入错误
错误信息
ImportError: Using `bitsandbytes` 8-bit quantization requires Accelerate: `pip install accelerate` and the latest version of bitsandbytes: `pip install -i https://pypi.org/simple/ bitsandbytes`
我的Dockerfile内容
# Use NVIDIA CUDA 12.0.0 development image based on Ubuntu 22.04 as the base image FROM nvidia/cuda:12.4.0-devel-ubuntu22.04 # Set non-interactive mode to avoid prompts during package installation ENV DEBIAN_FRONTEND=noninteractive # Update the package list and install python3-pip RUN apt-get update RUN apt-get install -y --no-install-recommends git curl wget python3 python3-pip python3-dev && rm -rf /var/lib/apt/lists/* # Set the working directory in the container WORKDIR /app # Copy the requirements.txt file to the container COPY *.sh /app/ COPY *.py /app/ COPY *.txt /app/ RUN pip3 install -q -U git+https://github.com/huggingface/accelerate.git RUN pip3 install -q -U bitsandbytes RUN pip3 install -q -U git+https://github.com/huggingface/transformers.git RUN pip3 install -q -U git+https://github.com/huggingface/peft.git RUN pip3 install -q trl xformers wandb datasets einops sentencepiece # Command to run your application # CMD ["python3", "finetune.py"]
问题排查与解决思路
1. Python环境路径不匹配
Ubuntu 22.04中python和python3是独立的可执行文件,pip3安装的包仅在python3环境生效。如果启动命令误用python而非python3,会出现包找不到的情况。
- 解决:确保Dockerfile的CMD命令使用
python3,或运行容器时明确执行python3 finetune.py。
2. bitsandbytes与CUDA版本兼容性问题
基础镜像使用CUDA 12.4,但默认pip安装的bitsandbytes可能未适配该版本,导致无法正确加载。
- 解决:安装适配CUDA 12的bitsandbytes版本,修改Dockerfile中的安装命令:
或针对CUDA 12.4从源码编译:RUN pip3 install -q -U bitsandbytes --upgrade --force-reinstallRUN git clone https://github.com/TimDettmers/bitsandbytes.git WORKDIR /app/bitsandbytes RUN CUDA_VERSION=124 make cuda12x RUN python3 setup.py install WORKDIR /app
3. 缺少系统依赖库
bitsandbytes依赖部分CUDA系统库,基础镜像可能未预装。
- 解决:在安装Python包前添加系统依赖安装命令:
RUN apt-get install -y --no-install-recommends libcudnn8 libcudnn8-dev
4. 环境变量未配置
bitsandbytes需要读取CUDA库路径,需确保LD_LIBRARY_PATH包含CUDA库目录。
- 解决:在Dockerfile中添加环境变量:
ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
5. 依赖安装顺序冲突
分散的pip安装命令可能导致依赖冲突,合并命令让pip自动处理依赖关系更稳妥。
- 解决:修改Dockerfile中的安装命令为:
RUN pip3 install -q -U git+https://github.com/huggingface/accelerate.git \ bitsandbytes \ git+https://github.com/huggingface/transformers.git \ git+https://github.com/huggingface/peft.git \ trl xformers wandb datasets einops sentencepiece
6. 容器未启用GPU支持
即使包安装正确,运行容器时未挂载GPU设备,后续也会出现运行错误(需提前规避)。
- 解决:启动容器时添加
--gpus all参数:docker run --gpus all your-image-name
内容的提问来源于stack exchange,提问作者mchd
相关产品推荐
相关产品推荐

