当前位置: 首页 > news >正文

LLMOps — 使用 BentoML 为 Llama-3 模型提供服务

使用 BentoML 和 Runpod 快速设置 LLM API

经常看到数据科学家对 LLM 的开发感兴趣,包括模型架构、训练技术或数据收集。然而,我注意到,很多时候,除了理论方面,许多人在以用户实际使用的方式提供这些模型时遇到了问题。在这个简短的教程中,我想以一种非常简单的方式展示如何使用BentoML 提供 LLM,特别是 llama-3 。

BentoML 是用于机器学习模型服务的端到端解决方案。它帮助数据科学团队开发可用于生产的模型服务端点,并在每个阶段采用 DevOps 最佳实践和性能优化。

我们需要 GPU

如您所知,在深度学习中,拥有合适的硬件至关重要。特别是对于像 LLM 这样的非常大的模型,这一点变得更加重要。不幸的是,我没有任何 GPU 😔 这就是为什么我依赖外部提供商,所以我租了他们的一台机器并在那里工作。我选择在Runpod上撰写本文,因为我了解他们的服务,而且我认为遵循本教程的价格是可以承受的。但是,如果您有可用的 GPU 或想要使用任何其他提供商,请随意跳过此部分。

首先,确保您有一个 Runpod 帐户。接下来,我们需要创建一个加密密钥对,我们可以通过SSH 连接向 Runpod 进行身份验证。 我有一台 MacOS,所以我使用以下教程来生成密钥。但对于 Linux 和 Windows,过程应该没有太大区别。

您现在应该有一个公钥和一个私钥。请确保不要在任何地方分享您的私钥!在设置中,Runpod 将要求您输入公钥以便您进行身份验证,因此请继续将其复制到相应的插槽中,如图所示。

添加图片注释,不超过 140 字(可选)

现在我们准备创建一个 pod,也就是一个可以用来编码的虚拟机。单击“ +Deploy ”按钮。

添加图片注释,不超过 140 字(可选)

Runpod 会要求您指定要使用的 GPU 类型。价格会根据您所需的 GPU 性能而变化。我们只是一个教程,因此我们在延迟或吞吐量方面没有极端需求。在这种情况下,我选择了 RTX 4090。

添加图片注释,不超过 140 字(可选)

您可以进一步修改模型,并将磁盘大小增加到 40GB。

添加图片注释,不超过 140 字(可选)

如果您单击“连接”按钮,Runpod 将向您显示可以从 bash 使用的命令,以远程连接到为您提供的机器。

添加图片注释,不超过 140 字(可选)

不过,在开始工作之前,我们还需要做一件事。上面显示的命令指定了一个 IP 地址和一个端口。 现在您需要进入终端并访问保存 SSH 密钥的 .ssh 文件夹。

添加图片注释,不超过 140 字(可选)

使用“ vim config ”命令编辑“ config ”文件。像我的情况一样,向文件中添加一个条目。我将主机命名为“ bentoml ”,并添加了 IP、端口以及我的私钥所在的路径,这样,当尝试连接到此主机时,电脑将自动知道在哪里找到要连接的密钥。

添加图片注释,不超过 140 字(可选)

但是,如果从 VSCode 连接而不是使用 CLI会更好,对吗?只需按照几个简单的步骤操作即可。打开 VSCode 并单击左下角的蓝色箭头,如图所示。现在在下拉菜单中单击“连接到主机”。

添加图片注释,不超过 140 字(可选)

现在 VSCode 会知道哪些主机可用,因为我们首先在配置文件中输入了它们,实际上,它会将bentoml识别为主机。单击它。

添加图片注释,不超过 140 字(可选)

您现在位于 Runpod 虚拟机内!打开/workspace文件夹即可开始工作。

添加图片注释,不超过 140 字(可选)

使用 BentoML 提供服务

使用 Runpod 设置开发环境可能是本教程中最复杂的部分,因为 BentoML 使 llama-3 的服务变得非常容易。

首先,使用 CLI 我们可以克隆 BentoML 团队开发的存储库。

 
 

git克隆https://github.com/bentoml/BentoVLLM.git

在存储库中,我们将找到不同模型的几个示例。

添加图片注释,不超过 140 字(可选)

在本例中,我们将专门使用 llama3–8b-instruct。因此我们进入该文件夹。

 
 

cd BentoVLLM/ cd llama3-8b-instruct/

我们需要安装所有必要的要求。

 
 

pip 安装 -r 要求.txt && pip 安装 -f -U “pydantic>=2.0”

实际代码位于service.py文件中。 但是,我们只需调用以下命令即可为模型提供服务。

 
 

bentoml 发球。

当模型被服务时,IP 地址将向您开放,以便您在本地查看 API。如果您将路径“ /docs ”添加到 IP 地址,您将找到包含所有可用方法的 swagger。

添加图片注释,不超过 140 字(可选)

您会看到主要的 API 是/generate,您可以在其中输入提示和系统提示并等待模型的输出。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

当然,除了 swagger 之外,您还可以使用代码中的 API,例如,如果您想开发自己的自定义前端!

结论

在本文中,我们了解了如何使用 SSH 连接连接到远程计算机。在本教程中,我们使用了 Runpod,但所有提供商都遵循类似的程序。 直接从 VSCode 通过 SSH 连接非常有用,这样我们就可以从我们最喜欢的 IDE 编写代码并可视化文件,我们在本文中看到了如何通过在配置文件上注册主机数据以简单的步骤完成此操作。

具有讽刺意味的是,llama-3 的服务是这个简单教程中最快的部分,因为多亏了 bento,我们只需要调用一个命令就可以运行模型并通过 swagger 使用。

相关文章:

LLMOps — 使用 BentoML 为 Llama-3 模型提供服务

使用 BentoML 和 Runpod 快速设置 LLM API 经常看到数据科学家对 LLM 的开发感兴趣,包括模型架构、训练技术或数据收集。然而,我注意到,很多时候,除了理论方面,许多人在以用户实际使用的方式提供这些模型时遇到了问题…...

微软蓝屏事件揭秘:有问题的数据引发内存读取越界

讲动人的故事,写懂人的代码 CrowdStrike前一阵在官网上发布了上周爆发的全球企业微软蓝屏事件的官方初步复盘结果。其中谈到了这次事件的根本原因: 2024年7月19日,我们部署了两个额外的IPC模板实例。由于内容验证器中的一个bug,使…...

NASA:北极ARCTAS差分吸收激光雷达(DIAL)遥感数据

ARCTAS Differential Absorption Lidar (DIAL) Remotely Sensed Data ARCTAS差分吸收激光雷达(DIAL)遥感数据 简介 ARCTAS差分吸收激光雷达(DIAL)遥感数据是一种远程感测技术,用于测量大气中不同波长的激光辐射被大…...

Android 文件上传与下载

在实际开发涉及文件上传不会自己写上传代码,一般 会集成第三网络库来做图片上传,比如android-async-http,okhttp等,另外还有七牛也提供 了下载和上传的API。 1.项目用到的图片上传的关键方法: 这里用到一个第三方的库…...

Java语言的充电桩系统Charging station system

介绍 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5-1.6协议新能源汽车二轮车公交车二轮车充电-四轮车充电充电源代码充电平台源码Java源码-共享充电桩-充电桩软件 软件介绍 小程序端:城市切换、附近电站、电桩详情页…...

RCE之无参数读取文件

什么是无参数&#xff1f; 顾名思义&#xff0c;就是只使用函数&#xff0c;且函数不能带有参数&#xff0c;这里有种种限制&#xff1a;比如我们选择的函数必须能接受其括号内函数的返回值&#xff1b;使用的函数规定必须参数为空或者为一个参数等 例题&#xff1a; <?…...

Python GUI开发必看:Tkinter Button控件使用详解

Button&#xff08;按钮&#xff09;组件用于实现各种各样的按钮。 Button组件可以包含文本或图像&#xff0c;你可以将一个Python的函数或方法与之相关联&#xff0c;当按钮被按下时&#xff0c;对应的函数或方法将被自动执行。 Button组件仅能显示单一字体的文本&#xff0c…...

上海市计算机学会竞赛平台2024年7月月赛丙组得分排名

题目描述 给定 nn 名学生的考试得分&#xff0c;这些学生的学号为 11 到 nn&#xff0c;其第 ii 号学生的得分为 aiai​&#xff0c;请将这些学生按照分数从大到小的顺序排列并输出学号序列。 若两个学生得分相同&#xff0c;则先输出较小的学号。 输入格式 第一行&#xf…...

Can GPT-3 Perform Statutory Reasoning?

文章目录 题目摘要相关工作SARAGPT-3 对美国法典的了解GPT-3 在对合成法规进行简单推理时遇到困难结论 题目 GPT-3 可以进行法定推理吗&#xff1f; 论文地址&#xff1a;https://arxiv.org/abs/2302.06100 摘要 法定推理是用事实和法规进行推理的任务&#xff0c;法规是立法机…...

redis面试(十一)锁超时

boolean res lock.tryLock(100, 10, TimeUnit.SECONDS); RedissonLock里面有这样一个方法tryLock()&#xff0c;意思是尝试获取锁的结果。 最大等待时间100s&#xff0c;并且获取到锁之后&#xff0c;10s之内没有释放的话&#xff0c;锁会自动失效。 尝试获取锁超时 time …...

C代码做底层及Matlab_SimuLink做应用层设计单片机程序

前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…...

Cloud Kernel SIG 月度动态:ANCK OOT 驱动基线更新,发布 2 个 ANCK 版本

Cloud Kernel SIG&#xff08;Special Interest Group&#xff09;&#xff1a;支撑龙蜥内核版本的研发、发布和服务&#xff0c;提供生产可用的高性价比内核产品。 01 SIG 整体进展 1. 发布 ANCK 5.10-016.4 小版本。 2. 发布 ANCK 5.10-017.1 小版本。 3. ANCK 新增海光平…...

vue3仿飞书头像,根据不同名称生成不同的头像背景色

效果展示&#xff1a; 传递三个参数&#xff1a; name&#xff1a;要显示的名称&#xff1b;size&#xff1a;头像的大小&#xff1b;cutNum&#xff1a;分割当前名称的最后几位数&#xff1b; 代码如下&#xff1a; <template><div:style"{color: #fff,borde…...

SpringBoot整合三方

SpringBoot整合redis 引入redis依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId&g…...

React之组件的使用

Vue、React和Angular是三个流行的前端框架&#xff0c;采用组件化的开发方式。支持虚拟DOM&#xff08;Virtual DOM&#xff09;技术&#xff0c;有丰富的生态系统、大量的插件和工具可以使用。Vue的语法是传统的HTML和JavaScript&#xff0c;React使用JSX语法&#xff0c;Angu…...

深度学习--长短期记忆网络

1.引入 RNN 可以将以前的信息与当前的信息进行连接。例如&#xff0c;在视频中&#xff0c;可以用前面的帧来 帮助理解当前帧的内容&#xff1b;在文本中&#xff0c;可以用前面半句话的内容来预测后面的内容。但是&#xff0c; RNN 存在一个记忆消失的问题。例如&#xff0c;…...

研0 冲刺算法竞赛 day29 P2249 【深基13.例1】查找

P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路&#xff1a; ①二分查找 ②stl函数&#xff1a;lower_bound(a.begin(),a.end(),x) 返回第一个大于等于 x的数的地址 代码&#xff1a; #include<iostream> #include<algorithm> …...

基于vue框架的CKD电子病历系统nfa2e(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;患者,医生,药品信息,电子病历,临时医嘱,长期医嘱,健康科普 开题报告内容 基于Vue框架的CKD电子病历系统 开题报告 一、选题背景 随着信息技术的飞速发展和医疗信息化的深入推进&#xff0c;电子病历系统&#xff08;Electronic Medic…...

笔记:python 安装tar包报错

报错信息 ERROR: Could not find a version that satisfies the requirement setuptools>40.8.0 (from versions: none)ERROR: No matching distribution found for setuptools>40.8.0分析 1&#xff0c;当前已安装 setuptools 并且版本超过40.8.0 解决方案 缺包了&am…...

575. 分糖果

哈喽&#xff01;大家好&#xff0c;我是奇哥&#xff0c;一位专门给面试官添堵的职业面试员 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff01; 文章目录 一、题目二、答案三、总结 一、题目 …...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...