我正在运行一个 RAG 管道,带有 LlamaIndex 和量化的 LLama3-8B-Instruct。我刚刚安装了这些库:
!pip install --upgrade huggingface_hub
!pip install --upgrade peft
!pip install llama-index bitsandbytes accelerate llama-index-llms-huggingface llama-index-embeddings-huggingface
!pip install --upgrade transformers
!pip install --upgrade sentence-transformers
然后我希望像这样运行量化管道:
import torch
from llama_index.llms.huggingface import HuggingFaceLLM
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
)
但是,我收到了这个错误:
ModuleNotFoundError: No module named 'huggingface_hub.inference._types'
。两个月前我上次使用这个管道时,代码工作了,所以我认为 LlamaIndex 已经改变了一些东西;特别是当我单击错误时,它引用了: from huggingface_hub.inference._types import ConversationalOutput
,但是 HuggingFace 文档中不存在 ConversationalOutput
模块。
那么,我应该怎么做才能修复此错误并能够运行此 RAG 管道?
错误
ModuleNotFoundError
表示代码正在尝试导入不存在的模块。发生这种情况是由于您计算机上的 huggingface_hub
版本与与 llama_index
兼容的版本之间的依赖性不匹配。
llama_index
使用最近从 huggingface_hub.inference
包中删除的名为 _types
的模块。我们可以从您发布的导入错误中推断出这一点:
from huggingface_hub.inference._types import ConversationalOutput
您可以看到在 v0.24.0 中存在
_types
模块。它在 v0.25.0 中被删除。
要解决此问题,您需要卸载 Hugginface_hub 并安装与
llama_index
兼容的版本。我会尝试 0.24.0,因为它的模块当前导致 ModuleNotFoundError
:
pip uninstall huggingface-hub
pip install huggingface-hub==0.24.0
对外部依赖项的升级永远不会导致现有项目的工作流程中断,因为项目应仔细管理其所需的依赖项以及与这些依赖项关联的版本。
在 Python 中,惯例是使用包含依赖项列表及其版本的
requirements.txt
文件。一旦你有了一个工作项目,你应该导出你的依赖项:
pip freeze > requirements.txt
这将捕获依赖项和版本。可以通过运行以下命令导入回需求文件中指定的依赖项:
pip install -r requirements.txt
为了隔离不同项目的依赖关系,您应该创建并使用虚拟环境:
python -m venv llama
source llama/bin/activate
这将为您的项目创建一个没有安装任何依赖项的隔离 python 环境。这为您的每个项目提供了一个全新的状态,您不必担心一个项目的依赖项会干扰另一个项目的依赖项。
请注意,当按照上面的建议捕获需求文件中的依赖项时,您应该确保仅包含当前项目所需的依赖项,而不是系统上的所有依赖项。将 pip freeze 与虚拟环境结合使用可以让这一切变得简单。
一般来说,当外部依赖项有新版本时,您应该尝试更新它们。这不仅可以确保您拥有库提供的最新功能,而且对于防范已知的安全漏洞也至关重要。
但是,这应该以结构化的方式完成。您负责跟踪外部依赖项何时更新。更新后,您应该手动升级版本并测试您的应用程序,以确保新的升级不会破坏您的工作流程。如果是这样,您必须重构代码以使用新代码或恢复到以前的工作版本。