跳至主要内容

Vicuna-13B 教程:运行 Vicuna-13B 的指南

通过 FastAPI 服务器运行 Vicuna-13B 模型的完整指南。
· 15分钟 阅读

使用 AI 探索

大型语言模型的出现已经改变了各行各业,将 OpenAI 的 GPT-3.5 和 GPT-4 等技术的能力带入了各种应用。不过,高昂的成本和数据保密方面的顾虑常常让潜在用户望而却步。开源模型 Vicuna-13B 正是在此背景下应运而生,既能提供相近的性能,又能避免高成本和敏感信息风险。

若想进一步了解 GPT-3.5 和 GPT-4,欢迎参考我们的教程在 Python 中通过 OpenAI API 使用 GPT-3.5 和 GPT-4,这是理解如何借助 OpenAI Python 包以编程方式与 ChatGPT 对话的良好起点。

什么是 Vicuna-13B?

Vicuna-13B 是一个开源对话模型,由对 LLaMa 13B 模型进行微调而来,训练数据来自用户在 ShareGPT 上分享的对话。

使用 GPT-4 作为评审进行的初步评估显示,Vicuna-13B 的质量超过 chatGPT 和 Google Bard 的 90%,并在超过 90% 的案例中优于 LLaMa 和 Alpaca 等其他模型。整体微调与评估流程如下图所示:

Vicuna-13B fine-tuning and evaluation workflow (source)

Vicuna-13B 的微调与评估流程(来源)

尽管上述结果凸显了 Vicuna-13B 的实力,它也存在自身局限,尤其是在数学和推理等任务上并非毫无限制。

Image from LMSYSORG modified by author

图片来源于 LMSYSORG,作者有修改

Vicuna-13B 的应用

作为一款智能聊天机器人,Vicuna-13B 的应用场景不胜枚举,以下图示展示了其在客户服务、医疗健康、教育、金融以及旅游/酒店等行业的一些案例。

Five different applications of Vicuna-13 in real-life

Vicuna-13 在现实生活中的五种不同应用

  • 客户服务:凭借 24/7 在线服务能力,聊天机器人可用于支持客户、自动化处理重复且简单的咨询。例如,Sephora 使用聊天机器人帮助客户查找产品、查看订单状态,并从其网站获取化妆建议。
  • 医疗健康:患者可以快速获得个性化的健康信息,使医疗专家得以将精力投入到新疗法的研究上。例如,Babylon Health 利用AI 驱动的聊天机器人进行健康评估,以更好地监测患者的健康状况。
  • 教育:许多知名教育机构(如 Duolingo)正以更具创意的方式使用AI 机器人,以提升学生参与度,帮助他们理解更高级的概念。
  • 金融:我在需要账户帮助时与银行的首次交互通常是通过智能机器人进行的,我相信包括富国银行在内的许多银行都在使用类似技术来协助客户处理重复性任务,如查询账户余额、转账和账户管理等。
  • 旅游/酒店:与银行服务类似,聊天机器人可以根据用户预算与出行需求,帮助寻找最佳目的地,甚至充当虚拟礼宾。例如,纽约 Equinox 酒店的接待聊天机器人 Omar 能处理近 85% 的客户咨询,使其在不到三个月内处理了 2600 个新咨询,并在四个月内产生了 150 个合格线索。

以上清单并不详尽。我们的文章NLP 如何改变数据科学的未来探讨了 NLP 如何推动数据科学与机器学习的发展、其未来应用与风险,以及如何加以缓解。

学习如何运行 Vicuna-13B 的重要性与意义

基于上述真实应用,不难看出,各大行业对 Vicuna-13B 等 AI 对话代理的需求正与日俱增。

因此,掌握如何在行业流程中实现并集成此类技术正变得愈发重要。随着越来越多公司使用这些技术来增强客户互动、获取更多潜在客户,并整体提升投资回报,这项技能的价值水涨船高。

好消息是,本教程的宗旨就是帮助您掌握运行 Vicuna-13B 模型所需的技能,并能将其集成至任何企业信息系统的工作流中。

先决条件

在深入了解如何运行 Vicuna-13B 模型之前,务必正确配置先决条件,包括:

  • 理解 Vicuna-13B 的工作流
  • 设置必要的硬件与软件
  • 获取用于 Vicuna-13B 的 LLaMa 权重

满足这些要求后,我们将更好地理解输入与输出格式,并能够成功运行该模型。

理解 Vicuna-13B 的工作流

更好地理解 Vicuna-13B 的输入与输出格式,可为开发者提供影响模型决策因素的基本认识。

本节将说明输入中需要的主要参数,以及 Vicuna-13B 模型的预期输出格式。

Minimalist workflow of the end-to-end workflow

端到端流程的极简工作流

我们来解读上述流程。首先,用户提交期望的输入,其中包含提示词(prompt),即用户希望获得响应的主要文本请求。

提示词需配合以下附加参数:

  • Max-length:用于指定模型在最终回复中应考虑的最大字符数。
  • Temperature:取值范围为 0 到 1。值越低,结果越确定;值越高,随机性越强,因而输出更为多样和富有创意。
  • Top-p:用于控制预测的多样性,即选择累积概率超过给定阈值的最可能的 token。从 0 开始,值越高越有可能得到更好的输出,但需要更多计算。
  • Repetition_penalty:当某个词被频繁提及时,该参数可避免过度重复该词,使最终结果更具多样性。
  • Seed:确保同一输入在多次运行中得到一致的结果。
  • Debug:当用户希望开启调试模式时,该参数会很有用,有助于诊断模型行为与性能。

提交带有上述参数的提示词后,Vicuna-13B 模型将在后台执行相关处理以生成所需输出,其架构如下:

  • Text:由 Vicuna 模型生成的文本输出
  • Metadata:模型生成的一些附加信息。下一节将进行深入说明。

设置必要的硬件与软件

既然我们已更好地理解了输入与输出,接下来可着手识别成功运行 vicuna 模型所需的主要库。

  • Conda:为 vicuna 模型的依赖提供干净、隔离的环境。
  • FastAPI:提供现代化框架,用于开发 Vicuna 模型的 API,并自动解析用户的提示词。
  • Uvicorn:为 Vicuna 模型的 FastAPI 应用提供服务,确保高效可靠的性能。
  • LLaMa.cpp:处理构成 vicuna 模型的大型语言模型的计算复杂性。

创建虚拟环境

本节所有命令均在终端中运行。使用 conda create 语句,我们创建名为 vicuna-env 的虚拟环境。

conda create --name vicuna-env

成功创建虚拟环境后,使用 conda activate 语句激活该环境,如下所示:

conda activate vicuna-env

上述命令执行后,终端开头会以方括号显示环境名称,如下图所示:

Name of the virtual environment after activation

激活后显示的虚拟环境名称

安装依赖库

上述库有两种安装方式。第一种是为每个库分别手动运行 pip install,当库较多时会很耗时,在工业级项目中也不够理想。

第二种是更优的方式:使用包含所有必需库的 requirements.txt 文件。下面给出了 requirements.txt 的内容,以及使用单条 pip install 命令进行安装的方法。

# Content of the requirements.txt file

llama-cpp-python==0.1.48
fastapi 
uvicorn[standard]

可按如下方式一次性安装以上三个库:

pip install -r requirements.txt

获取 LLaMa 权重

我们可以从 Hugging Face 平台下载 Vicuna 模型权重,如下所示:

Two main steps to download Vicuna-13B weight from Hugging face

从 Hugging Face 下载 Vicuna-13B 权重的两步流程

为更好地组织代码,我们可以将下载的模型权重移动到新的 model 文件夹中。

打包与构建 API

尽管通过命令行已具备运行模型的全部先决条件,但部署一个与模型交互的 API 在实践中更为可行,这将使更多用户更容易访问模型。

为实现这一目标,我们需要完成以下步骤:

  • 从本地机器加载模型
  • 构建 API 以对外暴露模型

源码的整体结构如下,完整代码可在 GitHub 获取。

------ model
         |------- ggml-vicuna-13b-4bit.bin

------ requirements.txt
------ vicuna_app.py
  • ggml-vicuna-13b-4bit.bin 是 model 文件夹中的已下载模型权重
  • requirements.txt 包含运行模型所需的依赖
  • vicuna_app.py 包含用于创建 API 的 Python 代码,本节主要关注该文件。

API 主要路由的定义

在我们的案例中,需要以下两个主要路由。在此之前,我们需要导入相关库、加载模型并创建一个 FastAPI 实例。

# Import the libraries
from fastapi import FastAPI, HTTPException
from llama_cpp import Llama

# Load the model 
vicuna_model_path = "./model/ggml-vicuna-13b-4bit.bin"
vicuna_model = Llama(model_path=vicuna_model_path)

app = FastAPI()
  • 第一条路由:默认路由 "/" 通过不带参数的 home() 函数返回以下 JSON:"Message": "Welcome to the Vicuna Demo FastAPI"。
# Define the default route
@app.get("/")
def home():
   return {"Message": "Welcome to the Vicuna Demo FastAPI"}
  • 第二条路由:"/vicuna_says" 负责触发 answer_prompt() 函数,该函数接收用户的提示词作为参数,并返回包含 Vicuna 模型结果及部分附加元数据的 JSON 响应。
@app.post("/vicuna_says")
def answer_prompt(user_prompt):

   if (not (user_prompt)):
       raise HTTPException(status_code=400,
                           detail="Please Provide a valid text message")

   response = vicuna_model(user_prompt)

   return {"Answer": response}

路由的执行

我们终于可以在命令行(位于 vicuna_app.py 文件所在目录)运行以下指令来启动 API。

uvicorn vicuna_app:app --reload
  • uvicorn 用于启动 Uvicorn 服务器。
  • vicuna_app:对应 Python 文件 vicuna_app.py,位于冒号左侧。
  • app:对应在 vicuna_app.py 中通过 app = FastAPI() 创建的对象。若文件名为 main.py,指令则为 uvicorn main:app --reload。
  • --reload:用于在代码变更后自动重启服务器。请注意,该选项仅在开发阶段使用,部署阶段不应启用。

运行上述命令后,结果如下所示。可以看到服务器在本地 8000 端口运行(http://127.0.0.1:8000)。

Url of the API running on localhost

在本地主机上运行的 API 地址

访问默认路由非常简单,只需在任意浏览器中输入以下 URL。

Response from the default route

默认路由返回的响应

接下来是有趣的部分。URL http://127.0.0.1:8000/docs 提供了一个完整的仪表盘用于与 API 交互,结果如下图所示。

Graphical visualization of the two routes

两条路由的可视化界面

从上图可见,当我们在绿色方框中选择 /vicuna_says 时,会得到一份与 API 交互的完整指南,如下所示。

The three main steps to execute the user’s prompt

执行用户提示词的三个主要步骤

只需选择 Try it out 选项卡,并在 text_message 区域中提供您希望进行预测的消息。

最后,点击 Execute 按钮后即可得到如下结果。

Server response from the Vicuna model to the user’s query

Vicuna 模型对用户查询的服务器响应

Vicuna 模型的响应位于 “text” 字段,效果相当出色。

还提供了其他元数据,如所用模型、响应创建日期、提示词的 token 数以及响应的 token 数等。

关于部署如何提升 Vicuna-13B 使用体验的一些见解

部署如此强大的模型,可以在多方面提升用户体验与运营效率,且不限于以下几点:

  • 访问便捷:通过 API 提供访问,用户无需本地下载与配置模型。
  • 资源管理:充足的服务器资源可处理多并发请求,提供可靠的服务。
  • 可扩展性:可根据增长的用户需求扩展资源,确保性能稳定。
  • 更新与维护:集中式的更新与维护可确保用户始终使用模型的最新版本。
  • 集成性:更易与其他系统和应用集成,拓展模型的潜在用例与通用性。

总体而言,部署可使 Vicuna-13B 的使用更易得、更可靠且更具通用性,从而拓宽其在不同用户与应用场景中的适用范围。

Vicuna-13B 的最佳实践与技巧

在使用 Vicuna-13B 模型时,遵循一些最佳实践与技巧有助于开发者优化体验与结果,并排查常见问题。

优化 Vicuna-13B 性能的技巧

遵循以下最佳实践与技巧,您将能在使用 Vicuna-13B 模型时获得更顺畅的体验与更出色的结果。

4 tips to optimize the performance of the Vicuna-13B model

优化 Vicuna-13B 性能的 4 个技巧

  • 硬件优化:确保承载 Vicuna-13B 的服务器具备充足的内存与 CPU 资源,以高效满足模型的计算需求。
  • 批处理:在可能的情况下,利用模型的并行处理能力对数据进行批量处理。
  • 结果缓存:对常见查询结果实施缓存,减少重复计算并加快响应速度。
  • 输入预处理:对输入数据进行预处理,确保其为模型的最佳输入格式,从而提升准确性与性能。

常见问题排查

在性能优化之外,熟练排查 Vicuna-13B 使用过程中可能出现的常见问题同样重要,以下为四个示例:

Some common troubleshooting issues

一些常见的排查问题

  • 内存错误:若遇到内存错误,可考虑增加服务器内存,或优化输入大小以便模型更易处理。
  • 响应缓慢:升级服务器 CPU,或采用批处理以改善模型的响应时间。
  • 输出不正确:如出现不正确或意外的输出,请仔细检查输入数据,排除可能影响结果的异常或错误。
  • 集成问题:如果在将 Vicuna-13B 与其他系统或应用集成时遇到挑战,请认真查阅 API 文档,并核实各集成点是否配置正确。

结语

总而言之,本文系统介绍了如何设置并使用 Vicuna-13B 模型。我们涵盖了必要的先决条件,包括硬件、软件,以及成功运行模型所需的 LLaMa 权重。

文中提供了搭建工作环境、安装必要软件与设置 Vicuna-13B 权重的详细步骤,并强调了权重在语言模型中的重要性。

此外,我们还探讨了 Vicuna-13B 的打包与部署,强调了部署如何促进其作为 Web 界面与 API 的使用。

最后,我们分享了与 Vicuna-13B 交互的实用见解、其能力示例,以及优化性能与排查常见问题的最佳实践。

准备更深入地探索 AI 与机器学习的世界了吗?用业界专业人士使用的强大深度学习框架提升您的技能。立即加入PyTorch 深度学习课程。

Zoumana Keita

作者

Zoumana Keita

一位多才多艺、乐于分享知识并回馈他人的数据科学家。Zoumana 是 YouTube 内容创作者,也是 Medium 上的顶尖科技写作者。他热爱演讲、编程与教学。Zoumana 拥有两个硕士学位:其一是在法国巴黎获得的计算机科学硕士,专注于机器学习;其二是在美国德州理工大学获得的数据科学硕士。他的职业生涯始于法国 Groupe OPEN 的软件开发工程师,随后加入 IBM 担任机器学习顾问,为保险公司构建端到端的 AI 解决方案。之后,Zoumana 加入了 Axionable——一家总部位于巴黎与蒙特利尔的首家“可持续 AI”初创公司。在那里,他担任数据科学家,为来自法国、蒙特利尔、新加坡和瑞士的客户交付 AI 产品,主要聚焦 NLP 场景。此外,他将 5% 的时间投入到研发工作。目前,他在 IFC(世界银行集团)担任高级数据科学家。

主题