ModuleNotFoundError:没有名为“huggingface_hub.inference._types”的模块

问题描述 投票:0回答:1

我正在运行一个 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 管道?

python large-language-model huggingface llama-index retrieval-augmented-generation
1个回答
0
投票

根本原因和修复

错误

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 与虚拟环境结合使用可以让这一切变得简单。

处理依赖项更新

一般来说,当外部依赖项有新版本时,您应该尝试更新它们。这不仅可以确保您拥有库提供的最新功能,而且对于防范已知的安全漏洞也至关重要。

但是,这应该以结构化的方式完成。您负责跟踪外部依赖项何时更新。更新后,您应该手动升级版本并测试您的应用程序,以确保新的升级不会破坏您的工作流程。如果是这样,您必须重构代码以使用新代码或恢复到以前的工作版本。

© www.soinside.com 2019 - 2024. All rights reserved.