Type something to search...
轻松加载llama和其他hugging Face Llms:5个简单步骤实现离线使用

轻松加载llama和其他hugging Face Llms:5个简单步骤实现离线使用

Image generated using DALL-E

你知道吗,你可以直接在本地机器上加载大多数大型语言模型,而无需依赖Ollama、AI Studio、Llama.cpp或任何此类依赖项!Hugging Face提供了一个庞大的开源LLM库,包括流行的Llama系列,你可以通过几个简单的步骤加载。在本指南中,我将带你完成整个过程,从请求访问到本地加载模型并生成模型输出——甚至在初始设置后可以离线工作,无需互联网连接。

无论你是开发者、研究人员还是AI爱好者,本指南将帮助你使用Hugging Face API加载像**Llama 3.1 8B Instruct model**这样的LLM。通过稍微调整,你可以将这些步骤应用于加载Hugging Face上其他可用的模型。

在我们开始之前,请确保你具备以下条件:

  1. Python环境:在本地系统上设置Python(最好是3.9或更高版本)。
  2. 具有足够显存的GPU:建议至少15GB的显存用于较小的模型(对于本文中使用的模型已足够)。对于较大的模型,你可能需要更强大的GPU硬件。
  3. Hugging Face账户/GitHub:你需要一个账户来访问模型并生成用户访问API令牌。
  4. 互联网连接:仅在初始下载时需要。一旦模型被缓存,你可以离线加载。

Hugging Face上许多LLM,包括Llama系列,即使是开源的,也需要填写访问请求。以下是操作步骤:

  1. 访问Hugging Face上模型的页面(例如,Llama 3.1 8B Instruct)。
  2. 点击**“Expand to Review and Access”**,并填写你的详细信息。
  3. 提交表单。访问通常在几分钟到几个小时内授予。

Step 2: 生成您的 Hugging Face 访问令牌

在您的访问请求处于审批阶段时,创建一个用户访问令牌以验证您的 Hugging Face 请求:

  1. 登录到您的 Hugging Face 账户。

  2. 导航到 设置 > 访问令牌

  3. 点击 “新令牌” 并根据您的需求自定义其权限:

    • 如果您只需要下载、推理和测试模型,请使用 读取令牌
    • 如果您正在上传模型、数据集或更改仓库,请使用 写入令牌
    • 如果您需要对模型的特定资源进行安全的生产级访问,请使用 细粒度令牌

对于我们的用例,我们只需要对模型仓库的 读取访问,将所有其他设置保持为默认,然后点击“创建令牌”。创建后,您将收到一个新的用户访问令牌。请安全保存此令牌,因为在后续步骤中将需要进行身份验证。

Step 3: 验证模型访问并保存模型详情

在生成令牌后,重新访问 Hugging Face 上的模型页面,验证您的访问权限是否已被授予。如果成功,页面将不再显示“请求访问”按钮或待处理请求。一旦您的访问权限获得批准,您还将收到来自 Hugging Face 的电子邮件确认。

一旦访问权限被授予,从模型 URL 页面复制 模型名称 ID。它通常采用以下格式: meta-llama/Llama-3.1-8B-Instruct。将此信息保存以供您的代码使用。

第4步:设置您的编码环境

您可以使用您选择的任何编码平台,例如 VS CodeAnaconda Jupyter Notebookpycharm 或任何其他代码编辑器。确保您的本地系统具有 GPU启用环境,因为大型语言模型需要大量计算资源。

我们可以使用以下命令检查显存和其他GPU使用情况:

Image 2

output of nvidia-smi

1. 创建虚拟环境

如果您正在本地系统上工作,请根据您的操作系统创建一个 Python 虚拟环境 并激活它,以隔离您的项目依赖。

2. 安装所需库

接下来,安装运行模型所需的最新版本库。使用以下代码安装核心依赖项:

!pip install -U bitsandbytes  
!pip install -U transformers  
!pip install -U accelerate    
!pip install -U torch

第5步:导入库

一旦库安装完成,您可以开始编写代码:

import transformers
from transformers import AutoModelForCausalLM
from transformers import AutoTokenizer
from transformers import BitsAndBytesConfig
import torch

接下来,使用您之前生成的访问令牌对Hugging Face请求进行身份验证。将YOUR_HUGGINGFACE_ACCESS_TOKEN替换为您在第2步中保存的令牌。此步骤确保您拥有访问模型所需的权限。用您的模型ID和令牌初始化变量:

model_id = "meta-llama/Meta-Llama-3.1-8B-Instruct"
access_token = "YOUR_HUGGINGFACE_ACCESS_TOKEN"

Step 6: 在本地系统上高效运行的配置

现在您已经设置好环境,是时候配置和加载模型了。我们将使用经过量化的模型版本,该版本针对显存有限的系统进行了优化。量化通过压缩权重来减少模型的内存使用。对于低显存的GPU,我们将使用 BitsAndBytesConfig 来启用4位量化,这对于高效性能是理想的。

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

load_in_4bit=True 超参数确保模型以4位量化格式加载。

第7步:从Hugging Face Hub加载模型

以下是将模型从Hugging Face的库加载到您的本地系统的.cache文件夹(位于根目录)中的代码:

tokenizer = AutoTokenizer.from_pretrained(model_id, token=access_token)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    token=access_token,
    quantization_config=bnb_config,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto"
)
  • 首次加载:您需要互联网连接才能加载模型。加载后,它将被缓存到您的.cache文件夹中以供将来使用。

第8步:在通过Hugging Face访问令牌加载模型后使用缓存文件夹进行离线模型加载

在第一次下载后,模型存储在您的本地缓存中(通常位于您本地系统的根文件夹:~/.cache/huggingface/hub/models--[model_id]/snapshots/[hash])。要离线加载它:

  1. 定位并复制缓存快照路径(例如,~/.cache/huggingface/hub/models--meta-llama--Meta-Llama-3.1-8b-Instruct/snapshots/abcdef12345)。
  2. 修改您的代码以引用复制的本地路径:
model_id = "~/.cache/huggingface/hub/models--meta-llama--Meta-Llama-3.1-8b-Instruct/snapshots/khjkfoweomcla4dsflknvowhg"

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_use_double_quant=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16
)

tokenizer = AutoTokenizer.from_pretrained(model_id)

model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=bnb_config,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto"
)
  • 无需访问令牌:由于模型已被缓存,您无需提供访问令牌。
  • 消除了对互联网连接的依赖。

第9步. 从模型生成响应

一旦模型加载完成,您可以使用它生成响应。以下是一个简单的函数以供开始:

def get_response(text, prompt, model, tokenizer, temperature=0.3, max_length=10000):
    messages = [
        {"role": "system", "content": prompt},
        {"role": "user", "content": text},
    ]

    input_ids = tokenizer.apply_chat_template(
        messages,
        add_generation_prompt=True,
        return_tensors="pt"
    ).to("cuda")

    terminators = [
        tokenizer.eos_token_id,
        tokenizer.convert_tokens_to_ids("")
    ]

    outputs = model.generate(
        input_ids,
        max_new_tokens=max_length,
        eos_token_id=terminators,
        do_sample=True,
        temperature=temperature,
        top_p=0.9
    )

    res = tokenizer.decode(outputs[0][input_ids.shape[-1]:], skip_special_tokens=True)

    return res
  • 自定义超参数: 使用 max_lengthtemperaturetop_p 进行实验,以微调模型的输出。
prompt = "在给定主题上写一篇40-60行的文章"
text = "人工智能:人机交互的进步"

response = get_response(text, prompt)
print(response)
  • 尝试不同的量化级别: 为了获得更精确的结果,您可以通过修改量化代码块以 8位16位 量化加载模型。

(额外) 从GitHub加载模型

如果模型在GitHub上可用,您可以直接从克隆的仓库加载它。以下是操作步骤:

  1. 从GitHub克隆模型仓库:
!git lfs install
!git clone https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct

从克隆的仓库中复制缓存快照的路径,将 model_id 变量替换为该路径,并运行第8步中的相同步骤。

model_id = "~github_path/model_name/snapshots/alktohlsnvosoikljsljldj"

总结一下,以下是主要要点:

  • 离线访问:一旦模型被缓存或克隆,您可以在没有互联网连接的情况下加载和使用它(离线加载)。

  • 灵活性:根据您的偏好,从 Hugging Face 或 GitHub 加载模型。

  • 针对低显存进行优化:量化确保模型在资源有限的 GPU 系统上高效运行。

  • 可定制:尝试不同的量化级别和超参数,以适应您的特定用例。

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...