想运行这个模型https://github.com/LlamaFamily/Llama-Chinese
按照网站下载了代码,去魔塔下载了模型,到了第 3 步:进行推理出问题了
(一切的根源,应该是由于我一开始分不清楚系统盘和数据盘,全下载到系统盘没成功,我后面把东西都下载到数据盘,清空了root文件夹导致的)
(我又想到不应该,我没有动chche里的东西,很懵……我感觉按理来说缓存里为什么会有一个huggingface文件,是不是我一开始在cache里加了huggingface文件夹就可以?等后面遇到了再试试吧,下面是我的解决办法,一个问题接着一个问题)
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
device_map = "cuda:0" if torch.cuda.is_available() else "auto"
model = AutoModelForCausalLM.from_pretrained('/hy-tmp/Llama-Chinese/Atom-7B-Chat',device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
model =model.eval()
tokenizer = AutoTokenizer.from_pretrained('/hy-tmp/Llama-Chinese/Atom-7B-Chat',use_fast=False)
tokenizer.pad_token = tokenizer.eos_token
input_ids = tokenizer(['<s>Human: 介绍一下中国\n</s><s>Assistant: '], return_tensors="pt",add_special_tokens=False).input_ids
if torch.cuda.is_available():
input_ids = input_ids.to('cuda')
generate_input = {
"input_ids":input_ids,
"max_new_tokens":512,
"do_sample":True,
"top_k":50,
"top_p":0.95,
"temperature":0.3,
"repetition_penalty":1.3,
"eos_token_id":tokenizer.eos_token_id,
"bos_token_id":tokenizer.bos_token_id,
"pad_token_id":tokenizer.pad_token_id
}
generate_ids = model.generate(**generate_input)
text = tokenizer.decode(generate_ids[0])
print(text)
执行上述代码时,是想通过已经下载好的模型去用的,出现了下面的问题
(llama) root@I19cba4205e006015ad:/hy-tmp/Llama-Chinese# python quick_start.py
There was a problem when trying to write in your cache folder (/root/.cache/huggingface/hub). You should set the environment variable TRANSFORMERS_CACHE to a writable directory.
Traceback (most recent call last):
File "/hy-tmp/Llama-Chinese/quick_start.py", line 4, in <module>
model = AutoModelForCausalLM.from_pretrained('/hy-tmp/Llama-Chinese/Atom-7B-Chat',device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/models/auto/auto_factory.py", line 523, in from_pretrained
config, kwargs = AutoConfig.from_pretrained(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/models/auto/configuration_auto.py", line 1147, in from_pretrained
config_class = get_class_from_dynamic_module(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 489, in get_class_from_dynamic_module
final_module = get_cached_module_file(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 319, in get_cached_module_file
create_dynamic_module(full_submodule)
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 67, in create_dynamic_module
init_hf_modules()
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 52, in init_hf_modules
os.makedirs(HF_MODULES_CACHE, exist_ok=True)
File "<frozen os>", line 215, in makedirs
File "<frozen os>", line 225, in makedirs
FileNotFoundError: [Errno 2] No such file or directory: '/root/.cache/huggingface'
根据错误信息,你的 Python 脚本在尝试访问 Hugging Face 的缓存目录 /root/.cache/huggingface/hub
时遇到了问题,因为该目录不可写。这通常发生在权限受限的环境中,如运行在 Docker 容器或者以非 root 用户身份运行时。为了解决这个问题,你可以指定一个不同的目录作为 Hugging Face 缓存的存储位置,这个目录应该是当前用户可以写入的。
解决步骤
-
创建一个新的缓存目录:
选择一个当前用户有权限写入的路径。例如,你可以创建一个目录在/hy-tmp/cache
。在 Linux 系统中,你可以使用以下命令来创建这个目录(如果它还不存在的话):
mkdir -p /hy-tmp/cache
-
设置环境变量:
设置TRANSFORMERS_CACHE
环境变量来指定新的缓存目录。你可以在终端中运行以下命令来设置这个变量,或者将它添加到你的.bashrc
或.bash_profile
文件中以便它在每次登录时自动设置。export TRANSFORMERS_CACHE=/hy-tmp/cache
如果你是在一个脚本中运行 Python 程序,你也可以在 Python 脚本中设置这个环境变量:
import os os.environ['TRANSFORMERS_CACHE'] = '/hy-tmp/cache'
确保这段代码在导入
transformers
库之前执行。 -
重新运行你的 Python 脚本:
重新运行你的脚本后,transformers
库应该会使用你指定的目录作为缓存目录,这应该会解决权限问题。
通过以上步骤,你应该能够解决在尝试写入缓存文件夹时遇到的权限问题。如果问题仍然存在,检查是否所有路径都正确设置且当前用户具有适当的写入权限。
但是我依然报相同的错误!
(llama) root@I19cba4205e006015ad:/hy-tmp/Llama-Chinese# python quick_start.py
/usr/local/lib/python3.11/dist-packages/transformers/utils/hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.
warnings.warn(
Traceback (most recent call last):
File "/hy-tmp/Llama-Chinese/quick_start.py", line 4, in <module>
model = AutoModelForCausalLM.from_pretrained('/hy-tmp/Llama-Chinese/Atom-7B-Chat',device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/models/auto/auto_factory.py", line 523, in from_pretrained
config, kwargs = AutoConfig.from_pretrained(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/models/auto/configuration_auto.py", line 1147, in from_pretrained
config_class = get_class_from_dynamic_module(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 489, in get_class_from_dynamic_module
final_module = get_cached_module_file(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 319, in get_cached_module_file
create_dynamic_module(full_submodule)
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 67, in create_dynamic_module
init_hf_modules()
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 52, in init_hf_modules
os.makedirs(HF_MODULES_CACHE, exist_ok=True)
File "<frozen os>", line 215, in makedirs
File "<frozen os>", line 225, in makedirs
FileNotFoundError: [Errno 2] No such file or directory: '/root/.cache/huggingface'
看起来尽管你尝试创建并使用了一个新的缓存目录,还是遇到了问题。出现的错误提示表示 Transformers 库仍在尝试访问默认的缓存目录 /root/.cache/huggingface
,这可能是因为环境变量 TRANSFORMERS_CACHE
的设置没有正确生效,或者库正在使用另一个环境变量。另外,也有警告提示使用 TRANSFORMERS_CACHE
已被弃用,并建议使用 HF_HOME
替代。
为了解决这个问题,我们应该尝试设置 HF_HOME
环境变量,这是 Transformers 库新的推荐方法。以下步骤说明如何操作:
1. 设置 HF_HOME
环境变量
你可以在你的终端会话中运行以下命令来设置 HF_HOME
环境变量,或者将其添加到你的 .bashrc
或 .bash_profile
文件中,确保每次登录时自动设置:
export HF_HOME=/hy-tmp/cache/huggingface
确保 /hy-tmp/cache/huggingface
目录存在,如果不存在可以创建它:
mkdir -p /hy-tmp/cache/huggingface
2. 确保目录可写
检查确保设置的目录是可写的。由于你是以 root 用户运行,通常应该没有权限问题,但确认一下总是好的。
3. 重新运行你的脚本
在设置了 HF_HOME
环境变量之后,再次运行你的 Python 脚本:
python quick_start.py
4. 检查环境变量是否正确生效
如果问题仍然存在,检查环境变量是否正确设置并在当前会话中生效。你可以使用 echo
命令检查环境变量:
echo $HF_HOME
这应该输出你刚设置的路径 /hy-tmp/cache/huggingface
。如果没有,你可能需要重新登录或重新启动你的终端会话来让改动生效。
这些步骤应该能够解决由于权限或配置问题导致的缓存目录错误。如果问题依然未解决,可能需要更详细地查看错误信息或检查其他配置可能的问题。
错误变了
(llama) root@I19cba4205e006015ad:/hy-tmp/Llama-Chinese# python quick_start.py
/usr/local/lib/python3.11/dist-packages/transformers/utils/hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.
warnings.warn(
Traceback (most recent call last):
File "/hy-tmp/Llama-Chinese/quick_start.py", line 4, in <module>
model = AutoModelForCausalLM.from_pretrained('/hy-tmp/Llama-Chinese/Atom-7B-Chat',device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/models/auto/auto_factory.py", line 550, in from_pretrained
model_class = get_class_from_dynamic_module(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 489, in get_class_from_dynamic_module
final_module = get_cached_module_file(
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 315, in get_cached_module_file
modules_needed = check_imports(resolved_module_file)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/transformers/dynamic_module_utils.py", line 180, in check_imports
raise ImportError(
ImportError: This modeling file requires the following packages that were not found in your environment: flash_attn. Run `pip install flash_attn`
(llama) root@I19cba4205e006015ad:/hy-tmp/Llama-Chinese# echo $HF_HOME
/hy-tmp/cache/huggingface
现在的错误信息表明,你在尝试加载模型时遇到了新的问题。这个问题不再是关于缓存目录的权限或配置问题,而是因为你的环境中缺少必要的 Python 包 flash_attn
。这个包是必需的,因为你的模型配置中指定了使用特定的功能(如use_flash_attention_2=True
),它依赖于这个包。
解决步骤
为了解决这个问题,你需要安装缺失的 flash_attn
包。可以通过以下步骤来完成安装:
-
安装
flash_attn
:
打开你的终端,运行以下命令来安装flash_attn
包:pip install flash_attn
这个命令将从 Python 的包管理器 PyPI 下载并安装
flash_attn
。确保你的环境中已经安装了 pip。如果你使用的是虚拟环境或特定的 Python 解释器,请确保在相应的环境中运行此命令。 -
验证包是否安装成功:
安装完成后,你可以通过运行以下命令来检查flash_attn
是否正确安装:python -c "import flash_attn; print(flash_attn.__version__)"
如果包已成功安装,这条命令应该不会抛出错误,并且可能会打印出包的版本号。
-
重新运行你的脚本:
在安装了必需的包之后,再次尝试运行你的 Python 脚本:python quick_start.py
这次操作应该解决因为缺少 flash_attn
包而引发的问题。如果在安装过程中遇到任何问题,比如兼容性或依赖冲突,可能需要检查更详细的错误信息来进行进一步的故障排除。
又遇到问题了
WARNING: Building wheel for flash_attn failed: [Errno 2] No such file or directory: '/root/.cache/pip/wheels'
Failed to build flash_attn
ERROR: Could not build wheels for flash_attn, which is required to install pyproject.toml-based projects
WARNING: There was an error checking the latest version of pip.
从你提供的错误信息来看,安装 flash_attn
包时遇到了一些问题,特别是在尝试构建 wheels 时。错误提示表明,/root/.cache/pip/wheels
这个目录不存在,这可能是因为权限问题或者 pip 缓存目录配置不正确所导致。
我们可以通过以下步骤解决这个问题:
1. 确保 pip
正确配置和更新
首先,确保你的 pip
是最新版本,这有助于避免安装过程中出现的兼容性问题。可以通过以下命令来更新 pip
:
pip install --upgrade pip
如果你在更新 pip
时也遇到了类似的问题,可能需要手动指定 pip
的缓存目录,或者尝试清理现有的缓存。
2. 清理或设置新的 pip 缓存目录
如果默认的 pip 缓存目录不可用或不可写,你可以指定一个新的缓存目录。首先,创建一个新的目录(例如 /hy-tmp/pip-cache
):
mkdir -p /hy-tmp/pip-cache
然后,使用以下命令指定这个新的缓存目录来运行 pip:
pip install --cache-dir=/hy-tmp/pip-cache flash_attn
这个命令会使用你指定的缓存目录来存储下载和构建过程中生成的数据。
3. 确保足够的权限
由于你是以 root 用户运行命令(基于命令提示符前的 root@...
),通常应该有足够的权限访问和修改文件系统上的大部分路径。但如果仍有问题,检查确保使用的目录具有适当的读写权限。
4. 直接尝试构建
如果安装时构建 wheel 仍然失败,尝试直接从源代码构建 flash_attn
:
pip install --no-binary :all: flash_attn
这个命令将尝试不使用预编译的 wheels,直接从源代码构建 flash_attn
包。
5. 检查具体错误
如果上述步骤都不能解决问题,建议检查 pip 的日志输出,寻找更具体的错误信息,这可能有助于进一步诊断问题。
按照这些步骤操作后,应该能够解决因为缓存目录问题导致的安装失败问题。如果问题仍然存在,可能需要更详细地检查 flash_attn
包的安装要求或者依赖项。
最后终于成功了
(llama) root@I19cba4205e006015ad:/hy-tmp/Llama-Chinese# python quick_start.py
/usr/local/lib/python3.11/dist-packages/transformers/utils/hub.py:124: FutureWarning: Using `TRANSFORMERS_CACHE` is deprecated and will be removed in v5 of Transformers. Use `HF_HOME` instead.
warnings.warn(
The `load_in_4bit` and `load_in_8bit` arguments are deprecated and will be removed in the future versions. Please, pass a `BitsAndBytesConfig` object in `quantization_config` argument instead.
The model was loaded with use_flash_attention_2=True, which is deprecated and may be removed in a future release. Please use `attn_implementation="flash_attention_2"` instead.
Loading checkpoint shards: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 3/3 [00:11<00:00, 3.81s/it]
/usr/local/lib/python3.11/dist-packages/transformers/generation/utils.py:2756: UserWarning: Specified kernel cache directory could not be created! This disables kernel caching. Specified directory is /root/.cache/torch/kernels. This warning will appear only once per process. (Triggered internally at ../aten/src/ATen/native/cuda/jit_utils.cpp:1442.)
next_tokens.tile(eos_token_id_tensor.shape[0], 1).ne(eos_token_id_tensor.unsqueeze(1)).prod(dim=0)
<s> Human: 介绍一下中国
</s><s> Assistant: 中华人民共和国简称“中”,位于亚洲东部、太平洋西岸。它是世界上人口最多的国家之一,也是世界第二大经济体体和中国古代文明的发源地之一。中国的历史悠久而丰富多彩,有着丰富的文化和传统习俗,是世界上最古老的文明之一的重要组成部分。同时它也是一个多民族的国家,拥有多种语言和文化背景的多元文化社会结构。在中国旅行时可以体验各种不同的风土人情与文化特色!
</s>