【AI】在本地 Docker 环境中搭建使用 Hugging Face 托管的 Llama 模型

目录

    • Hugging Face 和 LLMs 简介
      • 利用 Docker 进行 ML
      • 格式的类型
      • 请求 Llama 模型访问
      • 创建 Hugging Face 令牌
      • 设置 Docker 环境
    • 快速演示
      • 访问页面
    • 入门
      • 克隆项目
      • 构建镜像
      • 运行容器
    • 结论

推荐超级课程:

  • Docker快速入门到精通
  • Kubernetes入门到大师通关课
  • AWS云服务快速入门实战

Hugging Face 已经成为机器学习(ML)领域的强大力量。他们大量的预训练模型和用户友好的接口彻底改变了我们对人工智能/机器学习部署和空间的看法。如果你对深入了解 Docker 和 Hugging Face 模型的集成感兴趣,可以在文章“使用 Hugging Face 的 Docker Spaces 构建机器学习应用”中找到一份全面的指南。

大语言模型(LLM)——语言生成的奇迹——是一个令人惊叹的发明。在本文中,我们将探讨如何在 Docker 环境中使用 Hugging Face 托管的 Llama 模型,为自然语言处理(NLP)爱好者和研究人员开辟新的机会。
在这里插入图片描述

Hugging Face 和 LLMs 简介

Hugging Face(HF)为训练、微调和部署ML 模型提供了一个综合平台。而 LLMS 则提供了一种能够执行文本生成、补全和分类等任务的尖端模型。

利用 Docker 进行 ML

强大的Docker容器化技术使程序的打包、分发和运行变得更加简单。将 ML 模型封装在 Docker 容器中确保了在不同环境下模型的一致运行。这样就能保证可重现性,解决了“在我的机器上可以运行”的问题。

格式的类型

Hugging Face 上的大多数模型有两种选择:

  • GPTQ(通常是 4 位或 8 位,仅适用于 GPU)
  • GGML(通常是 4、5、8 位,CPU/GPU 混合)

AI 模型量化中使用的示例量化技术包括 GGML 和 GPTQ 模型。这可以意味着在训练期间或训练之后的量化。通过将模型权重减少到较低的精度,GGML 和 GPTQ 模型——两个众所周知的量化模型——减少了模型大小和计算需求。

HF 模型加载在 GPU 上,相比 CPU 执行推断要快得多。一般来说,这种模型非常庞大,你也需要很多 GPU 内存。在本文中,我们将使用 GGML 模型,该模型在 CPU 上运行良好,如果你没有一个好的 GPU,它可能会更快。

在本次演示中,我们还将使用 transformers 和 ctransformers,因此让我们先了解一下它们:

  • transformers:现代预训练模型可以通过 transformers 的 API 和工具轻松下载并训练。通过使用预先训练的模型,你可以减少从头开始训练模型所需的时间和资源,以及计算开销和碳足迹。
  • ctransformers:使用 GGML 库开发的 C/C++ 中的 transformer 模型的 Python 绑定。

请求 Llama 模型访问

我们将利用 Meta Llama 模型,注册并请求访问。

创建 Hugging Face 令牌

要创建将来使用的访问令牌,请转到你的 Hugging Face 个人资料设置,并从左侧边栏选择 访问令牌(图 1)。保存创建的访问令牌的值。

Hugging Face 个人资料设置的屏幕截图;选择访问令牌。

图 1. 生成访问令牌。

设置 Docker 环境

在探索 LLM 领域之前,我们必须首先配置 Docker 环境。首先安装 Docker,根据你的操作系统在官方Docker 网站上按照说明进行。安装完成后,执行以下命令以确认你的设置:

docker --version

快速演示

以下命令将使用 Hugging Face 的 harsh-manvar-llama-2-7b-chat-test:latest 映像运行一个容器,并将容器的端口 7860 暴露到主机机器。它还将设置环境变量 HUGGING_FACE_HUB_TOKEN 为你提供的值。

docker run -it -p 7860:7860 --platform=linux/amd64 \-e HUGGING_FACE_HUB_TOKEN="YOUR_VALUE_HERE" \registry.hf.space/harsh-manvar-llama-2-7b-chat-test:latest python app.py
  • -it 标志告诉 Docker 以交互模式运行容器并将终端附加到它。这将允许你与容器及其进程进行交互。
  • -p 标志告诉 Docker 将容器的端口 7860 暴露到主机机器。这意味着你将能够在主机机器的端口 7860 上访问容器的 Web 服务器。
  • --platform=linux/amd64 标志告诉 Docker 在具有 AMD64 架构的 Linux 机器上运行容器。
  • -e HUGGING_FACE_HUB_TOKEN="YOUR_VALUE_HERE" 标志告诉 Docker 将环境变量 HUGGING_FACE_HUB_TOKEN 设置为你提供的值。这对于从容器中访问 Hugging Face 模型是必需的。

app.py 脚本是你要在容器中运行的 Python 脚本。这将启动容器并打开一个终端。然后你可以在终端中与容器及其进程进行交互。要退出容器,请按 Ctrl+C

访问页面

要访问容器的 Web 服务器,请打开 Web 浏览器并导航至 http://localhost:7860。你应该会看到 Hugging Face 模型的初始页面(图 2)。

打开你的浏览器并转至http://localhost:7860。

本地 Docker llm 的初始页面截图,欢迎消息上写着:“你好,很高兴见到你。我可以帮你什么呢?还是想聊天吗?

图 2. 访问本地 Docker LLM。

入门

克隆项目

要开始,你可以克隆或下载 Hugging Face 现有的space/repository。

git clone https://huggingface.co/spaces/harsh-manvar/llama-2-7b-chat-test

文件: requirements.txt

requirements.txt 文件是一个列出项目需要运行的 Python 包和模块的文本文件。它用于管理项目的依赖项并确保所有开发人员使用的都是所需包的相同版本。

为了运行 Hugging Face 的 llama-2-13b-chat 模型,需要以下 Python 包。请注意,这个模型很大,可能需要一些时间来下载和安装。你可能还需要增加分配给 Python 进程的内存以运行该模型。

gradio==3.37.0
protobuf==3.20.3
scipy==1.11.1
torch==2.0.1
sentencepiece==0.1.99
transformers==4.31.0
ctransformers==0.2.27

文件: Dockerfile

FROM python:3.9
RUN useradd -m -u 1000 user
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --upgrade pip
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
USER user
COPY --link --chown=1000 ./ /code

接下来的部分将对 Dockerfile 进行详细说明。第一行告诉 Docker 使用官方的 Python 3.9 镜像作为我们镜像的基础镜像:

FROM python:3.9

接下来的一行使用用户 ID 1000 创建一个名为 user 的新用户。-m 标志告诉 Docker 为用户创建一个 home 目录。

RUN useradd -m -u 1000 user

接下来,这一行将容器的工作目录设置为 /code

WORKDIR /code

现在将 requirements 文件从当前目录复制到容器中的 /code 目录中。此外,该行升级容器中的 pip 软件包管理器。

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

这一行将容器的默认用户设置为 user。

USER user

下一行将当前目录的内容复制到容器中的 /code 目录中。--link 标志告诉 Docker 创建硬链接而不是复制文件,这可以提高性能并减小镜像的大小。--chown=1000 标志告诉 Docker 将拷贝文件的所有权更改为用户 user。

COPY --link --chown=1000 ./ /code

构建了 Docker 镜像之后,你可以使用 docker run 命令运行它。这将以非 root 用户 user 运行 Python 3.9 镜像的新容器。然后你可以使用终端与容器进行交互。

文件: app.py

这段 Python 代码展示了如何使用 Gradio 创建一个使用 transformers 训练的文本生成模型的演示。该代码允许用户输入文本提示并生成文本的延续。

Gradio 是一个 Python 库,使您可以轻松创建和分享交互式机器学习演示。它提供了一个简单直观的界面来创建和部署演示,并支持多种机器学习框架和库,包括 transformers。

这个 Python 脚本是一个文本聊天机器人的 Gradio 演示。它使用一个预训练的文本生成模型来生成用户输入的响应。我们将对文件进行拆分,并查看每个部分。

以下行从 typing 模块导入 Iterator 类型。这种类型用于表示可以遍历的值序列。下一行也导入了 gradio 库。

from typing import Iterator
import gradio as gr

接下来的一行从 transformers 库导入 logging 模块,该库是一个流行的自然语言处理机器学习库。

from transformers.utils import logging
from model import get_input_token_length, run

接下来的一行从 model 模块中导入 get_input_token_length()run() 函数。这些函数用于计算文本的输入令牌长度和使用预训练文本生成模型生成文本,分别。接下来的两行配置了 logging 模块,以打印信息级别消息并使用 transformers 记录器。

from model import get_input_token_length, runlogging.set_verbosity_info()
logger = logging.get_logger("transformers")

以下行定义了在代码中使用的一些常量。还有定义在 Gradio 演示中显示的文本。

DEFAULT_SYSTEM_PROMPT = """"""
MAX_MAX_NEW_TOKENS = 2048
DEFAULT_MAX_NEW_TOKENS = 1024
MAX_INPUT_TOKEN_LENGTH = 4000DESCRIPTION = """"""LICENSE = """"""

这行记录一个信息级别消息,指示代码正在启动。该函数清除文本框并将输入消息保存到 saved_input 状态变量中。

logger.info("Starting")
def clear_and_save_textbox(message: str) -> tuple[str, str]:return '', message

以下函数显示输入消息的聊天机器人,并将消息添加到聊天历史记录中。

def display_input(message: str,history: list[tuple[str, str]]) -> list[tuple[str, str]]:history.append((message, ''))logger.info("display_input=%s",message)             return history

此函数从聊天历史记录中删除之前的响应,并返回已更新的聊天历史记录和之前的响应。

def delete_prev_fn(history

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2904665.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

每日算法之接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1…

Zookeeper节点ZNode和相关属性

节点类型: Znode两种类型 : 持久的(persistent):客户端和服务器端断开连接后,创建的节点不删除(默认)。 短暂的(ephemeral):客户端和服务器端断…

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回:OpenCV系列文章目录(持续更新中......) 上一篇:如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍: 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目?如何对 OpenCV …

2023中国制造业标杆工厂数字化转型场景地图报告(可下载)

请前往星球下载(可领取优惠券):https://t.zsxq.com/18gRm06pe

VsCode的json文件不允许注释的解决办法

右下角找到注释点进去 输入Files: Associations搜索出此项 改为项为*.json值为jsonc保存即可 然后会发现VsCode的json文件就允许注释了

[BT]BUUCTF刷题第10天(3.28)

第10天(共3题) Basic BUU SQL COURSE 1 打开网站看到右上角有个登录界面,怀疑是SQL注入 但是多次尝试都无果 通过看题解知道了还有一个隐藏网页(content_detail.php) 随便点一个测试新闻进去后点F12看网络&#xf…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

如何调试Clang源码

下载编译Clang 这个就直接去LLVM官网下载&#xff0c;然后编译好Clang就行&#xff0c;注意得debug模式&#xff0c;保存符号信息。 调试Clang 可以直接通过命令行来调试 #进入调试环境&#xff0c;这里的clang得是刚刚编译好的 lldb ./clang # r是运行&#xff0c;后面是正…

OpenHarmony实战开发-滑动容器组件Swiper的使用

介绍 本篇Codelab主要介绍了滑动容器组件Swiper的几种常见的应用场景&#xff0c;包括顶部导航、轮播图以及视频滑动播放。 相关概念 Swiper&#xff1a;滑动容器&#xff0c;提供子组件切换滑动的能力。Stack&#xff1a;堆叠容器&#xff0c;子组件按照顺序依次入栈&#x…

IC-随便记

1、移远通信---通信模组 物联网解决方案供应商&#xff0c;可提供完备的IoT产品和服务&#xff0c;涵盖蜂窝模组(5G/4G/3G/2G/LPWA)、车载前装模组、智能模组&#xff08;5G/4G/边缘计算&#xff09;、短距离通信模组(Wi-Fi&BT)、GNSS定位模组、卫星通信模组、天线等硬件产…

深圳区块链交易所app系统开发,撮合交易系统开发

随着区块链技术的迅速发展和数字资产市场的蓬勃发展&#xff0c;区块链交易所成为了数字资产交易的核心场所之一。在这个快速发展的领域中&#xff0c;区块链交易所App系统的开发和撮合交易系统的建设至关重要。本文将探讨区块链交易所App系统开发及撮合交易系统的重要性&#…

Unity3d使用Jenkins自动化打包(Windows)(一)

文章目录 前言一、安装JDK二、安装Jenkins三、Jenkins插件安装和使用基础操作 实战一基础操作 实战二 四、离线安装总结 前言 本篇旨在介绍基础的安装和操作流程&#xff0c;只需完成一次即可。后面的篇章将深入探讨如何利用Jenkins为Unity项目进行打包。 一、安装JDK 1、进入…

每日一题 --- 链表相交[力扣][Go]

链表相交 题目&#xff1a;面试题 02.07. 链表相交 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交**&#xff1a;** 题目数据 保证 整个链式结…

RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…

【IP 组播】PIM-SM

目录 原理概述 实验目的 实验内容 实验拓扑 1.基本配置 2.配置IGP 3.配置PIM-SM 4.用户端DR与组播源端DR 5.从RPT切换到SPT 6.配置PIM-Silent接口 原理概述 PIM-SM 是一种基于Group-Shared Tree 的组播路由协议&#xff0c;与 PIM-DM 不同&#xff0c;它适合于组播组成…

京东云搭建幻兽帕鲁Palworld多人游戏联机服务器教程,1分钟开服

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云atengyun.…

[flink] flink macm1pro 快速使用从零到一

文章目录 快速使用 快速使用 打开 https://flink.apache.org/downloads/ 下载 flink 因为书籍介绍的是 1.12版本的&#xff0c;为避免不必要的问题&#xff0c;下载相同版本 解压 tar -xzvf flink-1.11.2-bin-scala_2.11.tgz启动 flink ./bin/start-cluster.sh打开 flink web…

Mac添加和关闭开机应用

文章目录 mac添加和关闭开机应用添加开机应用删除/查看 mac添加和关闭开机应用 添加开机应用 删除/查看 打开&#xff1a;系统设置–》通用–》登录项–》查看登录时打开列表 选中打开项目&#xff0c;点击“-”符号

STM32实现三个串口同时开启发送接收数据

程序目的&#xff1a; 实现STM32开通三个串口&#xff0c;每个串口都可以实现接收和发送数据。 注意事项&#xff1a; 编程时&#xff0c;严禁在中断函数中写入发送串口数据代码&#xff0c;否则会出错&#xff0c;具体原因不清楚&#xff08;有大佬知道的话帮我指出&#xff…

YOLOv9改进策略 | 损失函数篇 | InnerIoU、InnerMPDIoU二次创新损失函数助力小目标检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是InnerIoU以及包含其它二次创新的代码InnerCIoU、InnerMPDIoU等一些列利用Inner形成的二次创新损失函数&#xff0c;到此大家可能比较模糊为啥Inner能够和其他损失函数形成二次创新&#xff0c;Inner又是一个什么样的机制&#xff0c;开…