Llama-Factory环境配置踩坑记录


作为一名NLP&LLM练习生,记录一下自己入门踩的坑和遇到的问题,在这里记录自己成长的脚步。

教程:https://blog.csdn.net/python12345678_/article/details/140346926sharetype=blog&shareId=140346926&sharerefer=APP&sharesource=bushiyangtuo&sharefrom=link

1 照着教程一步步走,配好环境

我的本地环境是win11 + i5-14600KF + Nvidia 4070s 12GB显存。然后环境配置是基于anaconda的,IDE用pycharm。虚拟环境操作比较方便。这个配置的话本地对Meta-Llama-3-8B-Instruct模型进行LoRA微调是可以满足的,后续考虑用实验室的算力做实验了,10个3090爽yy。

1.1 硬件环境校验

打开cmd显示GPU当前状态和配置信息

nvidia-smi

在这里插入图片描述
比如我的是12.7,就表明我想安装的CUDA版本11.8,12.1,12.4都是可以的。
在这里插入图片描述

1.2 CUDA和Pytorch环境校验

先把微调框架代码pull下来

git clone https://github.com/hiyouga/LLaMA-Factory.git 
cd LLaMA-Factory

后面就该决定你的python+pytorch+CUDA版本了,由于python包之间版本有史一样的依赖关系,版本的选择真要谨慎。最开始我在配requirement这里卡了两天多。🤣🤣

1.2.1 根据其中一个最难安装的包决定版本。

flash-attention这个包是越来越难安了哈,就是它卡了我一两天,可恶。win版本的轮子地址如下:
https://github.com/bdashore3/flash-attention/releases

经过两天的摸索,flash-attention的包的选择最终决定的是这个,所以决定了python3.11 + CUDA12.1 + pytorch2.1.2 版本,
在这里插入图片描述
把这个轮子下载下来,放在某个你知道的路径。我的是都放在E:\wheels

1.3 安好环境

1.3.1 用setup.py

创建一个虚拟环境叫llama_factory,转换到该环境下安装环境,不过这里不用 pip install -r requirement.txt的方式,而是用pip install -e .[metrics]这样的语法,你问为什么,因为框架已经为我们写好了安装环境的setup.py脚本。😍😍

conda create -n llama_factory python=3.11
conda activate llama_factory  
cd LLaMA-Factory  
pip install -e .[metrics]

这里指定metrics参数是安装jieba分词库等,方面后续可能要训练或者微调中文数据集。

1.3.2 安装CUDA12.1 + pytorch2.1.2

然后还要安装CUDA12.1 + pytorch2.1.2,因为上述方式似乎默认安装了一个CPU版本的pytorch,而且版本也不是我们想要的,直接自己安装覆盖即可。

要注意的是这里安装的命令是torch历史版本里面找的,因为我们要安装老版本2.1的
在这里插入图片描述

conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia

1.3.2 安装0.38.1版本的bitsandbytes

由于直接使用pip install bitsandbytes不可行,因为Requirements Python >=3.8. Linux distribution (Ubuntu, MacOS, etc.) + CUDA > 10.0.
因此需要自己下载编译安装。

git clone https://github.com/timdettmers/bitsandbytes.git
cd bitsandbytes
set CUDA_VERSION=121 
make cuda12x
python setup.py install

1.3.3 安装2.4.1版本的flash-attention

刚才下载轮子的位置是E:\wheels,要根据自己下载位置给参数

pip install E:\wheels\flash_attn-2.4.1+cu121torch2.1cxx11abiFALSE-cp311-cp311-win_amd64.whl

环境到这里就安装好了,后面测试一下。

1.4 测试环境

1.4.1 测试一

项目根目录加一个test_env.py

import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

import torch
print("PyTorch Version:", torch.__version__)
print("CUDA Available:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("CUDA Version:", torch.version.cuda)
    print("Current CUDA Device Index:", torch.cuda.current_device())
    print("Current CUDA Device Name:", torch.cuda.get_device_name(0))
else:
    print("CUDA is not available on this system.")

然后console里面 python test_env.py,期望输出如下:
在这里插入图片描述

1.4.2 测试二

对本库的基础安装做一下校验,输入以下命令获取训练相关的参数指导, 否则说明库还没有安装成功

llamafactory-cli train -h

1.4.3 测试三

这里要先自己下载Llama-3-8B-Instruct模型,也是要用到绝对路径的。

git clone https://www.modelscope.cn/models/LLM-Research/Meta-Llama-3-8B-Instruct.git
cd Meta-Llama-3-8B-Instruct
git lfs pull

然后回到LLaMA-Factory文件夹下,根目录再加一个test_env1.py

# 跑一下官方raedme里提供的原始推理demo,验证模型文件的正确性和transformers库等软件的可用
import transformers
import torch

# 切换为你下载的模型文件目录, 这里的demo是Llama-3-8B-Instruct
# 如果是其他模型,比如qwen,chatglm,请使用其对应的官方demo
model_id = "E:\myWork\ICL\model\Meta-Llama-3-8B-Instruct"

pipeline = transformers.pipeline(
    "text-generation",
    model=model_id,
    model_kwargs={"torch_dtype": torch.bfloat16},
    device_map="auto",
)

messages = [
    {"role": "system", "content": "You are a pirate chatbot who always responds in pirate speak!"},
    {"role": "user", "content": "Who are you?"},
]

prompt = pipeline.tokenizer.apply_chat_template(
        messages,
        tokenize=False,
        add_generation_prompt=True
)

terminators = [
    pipeline.tokenizer.eos_token_id,
    pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]

outputs = pipeline(
    prompt,
    max_new_tokens=256,
    eos_token_id=terminators,
    do_sample=True,
    temperature=0.6,
    top_p=0.9,
)
print(outputs[0]["generated_text"][len(prompt):])

没有报错并且生成输出了一段海盗措辞的船长回答那就说明环境没问题了。

2 原始模型直接推理

这里原文给的命令是适用于Linux命令行的,我们需要对应修改。

//linux
CUDA_VISIBLE_DEVICES=0 llamafactory-cli webchat \  
    --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct \  
    --template llama3

win不支持CUDA_VISIBLE_DEVICES=0指定显卡,并且也不支持”\“换行console,分别对应修改:
对于第一个问题,一种方式是修改环境变量,在用户变量或者系统变量加一行就可以。CUDA_VISIBLE_DEVICES 0 在这里插入图片描述
终端要重启,然后命令要换在一行,终端输入

llamafactory-cli webchat --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct --template llama3

另一种方式是终端提前输入一行

set CUDA_VISIBLE_DEVICES=0
llamafactory-cli webchat --model_name_or_path /media/codingma/LLM/llama3/Meta-Llama-3-8B-Instruct --template llama3

除此之外,后面的参数指定是可以通过配置文件的,在E:\myWork\ICL\LLaMA-Factory\examples\inference路径下修改
llama3.yaml

model_name_or_path: E:\myWork\ICL\model\Meta-Llama-3-8B-Instruct
template: llama3
infer_backend: huggingface  # choices: [huggingface, vllm]

则上述llamafactory-cli指令可以等价为(修改好环境变量后)

llamafactory-cli webchat E:\myWork\ICL\LLaMA-Factory\examples\inference\llama3.yaml

然后就可以通过本地主机的 http://localhost:7860/ 进行webui访问llama3模型了。

<think>好的,我现在需要解决用户提到的LlamaFactory无法检测到CUDA环境的问题。根据用户提供的引用内容,问题可能出在NVIDIA驱动或CUDA安装上。首先,我应该按照用户提供的步骤逐一排查。 首先,用户提到运行nvidia-smi时出现错误,显示无法与NVIDIA驱动通信。这说明驱动可能没有正确安装或者没有加载。引用[1]和引用[3]都提到了安装驱动的步骤。用户之前安装的是410.78版本,但可能需要更高版本,比如引用[3]中提到的550版本。需要检查当前安装的驱动是否兼容CUDA 9.0,因为用户通过nvcc -V显示CUDA版本是9.0,而驱动版本和CUDA版本需要匹配。 接下来,用户可能安装了不兼容的驱动版本。CUDA 9.0需要特定的驱动版本支持,比如根据NVIDIA官方文档,CUDA 9.0要求驱动版本至少为384.81。但用户安装的是410.78,这理论上支持CUDA 9.0,不过可能存在冲突。或者,用户可能在安装过程中驱动没有正确加载,需要重新安装或更新驱动。 另外,用户尝试过重新安装驱动,使用dkms,但可能没有成功。引用[3]中的步骤建议使用sudo apt-get install cuda-drivers-550,但用户的CUDA版本是9.0,可能550驱动对应的是更高版本的CUDA,比如CUDA 11.x,这可能导致不兼容。这时候需要确认CUDA版本和驱动版本的对应关系。 然后,用户的环境问题也可能影响检测。用户提到在安装依赖时是否在正确的环境(llma)中执行,引用[2]指出要确保在正确的环境中安装依赖。如果环境变量没有正确设置,可能导致CUDA路径未被识别。需要检查环境变量如PATH和LD_LIBRARY_PATH是否包含CUDA的路径,例如/usr/local/cuda-9.0/bin和/lib64。 此外,用户可能没有正确安装CUDA工具包。nvcc -V显示的是CUDA 9.0,但系统可能没有正确配置。可能需要重新安装CUDA工具包,并确保安装后执行必要的环境变量配置,比如在.bashrc中添加export PATH=/usr/local/cuda-9.0/bin:$PATH和export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH,然后source ~/.bashrc。 另外,检查CUDA是否与PyTorch版本兼容。用户使用pip安装依赖时指定了[torch,metrics],但PyTorch版本可能不支持CUDA 9.0。例如,PyTorch 1.x之后的版本可能需要CUDA 10或更高版本。如果LlamaFactory依赖的PyTorch版本较新,而CUDA 9.0过旧,会导致检测不到CUDA。需要确认PyTorch版本与CUDA版本的兼容性,可能需要升级CUDA到更高版本,如11.8,并安装对应的驱动。 还有,用户可能没有安装cudnn库,或者安装的版本与CUDA不匹配,这也会导致检测失败。需要确保安装正确的cudnn版本,并正确配置其路径。 最后,用户可能需要重启系统以确保驱动正确加载,或者使用modprobe nvidia加载内核模块。如果驱动加载失败,可能需要查看日志文件,如/var/log/nvidia-install.log,以确定安装过程中的错误。 总结步骤应该是:检查驱动状态,确保正确安装并加载;验证CUDA安装和配置;检查环境变量;确认PyTorch与CUDA版本兼容;安装必要的库如cudnn;最后在正确的环境中安装项目依赖。</think>### LlamaFactory无法检测CUDA环境的解决方案 #### **步骤1:验证NVIDIA驱动状态** - 运行命令检查驱动是否正常: ```bash nvidia-smi ``` - 若报错`NVIDIA-SMI has failed...`,说明驱动未正确加载或版本不兼容[^1]。 - 解决方案:重新安装推荐版本驱动(需与CUDA版本匹配): ```bash sudo apt-get install -y cuda-drivers-550 # 以CUDA 11.x为例[^3] ``` #### **步骤2:检查CUDA工具包安装** - 确认CUDA版本兼容性: ```bash nvcc -V # 查看CUDA编译器版本 ``` -CUDA版本过旧(如用户环境中的9.0),需升级至PyTorch支持的版本(如11.8)[^1]。 - 卸载旧版CUDA后,从[NVIDIA官网](https://developer.nvidia.com/cuda-toolkit-archive)下载并安装新版。 #### **步骤3:配置环境变量** - 在`~/.bashrc`中添加CUDA路径: ```bash export PATH=/usr/local/cuda-11.8/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH ``` - 应用配置: ```bash source ~/.bashrc ``` #### **步骤4:验证PyTorch与CUDA的兼容性** - 在Python环境中运行以下代码: ```python import torch print(torch.__version__) # 查看PyTorch版本 print(torch.cuda.is_available()) # 应输出True ``` - 若输出`False`,需安装与CUDA版本匹配的PyTorch: ```bash pip install torch==1.13.1+cu117 --extra-index-url https://download.pytorch.org/whl/cu117 ``` #### **步骤5:在正确环境中安装项目依赖** - 确保激活虚拟环境(如`llma`): ```bash conda activate llma # 或使用其他虚拟环境工具 ``` - 安装LlamaFactory依赖: ```bash pip install -e ".[torch,metrics]" # 确保依赖关联到当前CUDA环境[^2] ``` #### **步骤6:排查CUDA相关库缺失** - 安装`cudnn`和`nccl`库: ```bash sudo apt install libcudnn8 libnccl2 # 版本需与CUDA匹配 ``` #### **步骤7:重启系统并验证** - 重启后再次运行: ```bash nvidia-smi # 确认驱动加载 python -c "import torch; print(torch.cuda.is_available())" # 应输出True ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值