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之无参数读取文件
什么是无参数? 顾名思义,就是只使用函数,且函数不能带有参数,这里有种种限制:比如我们选择的函数必须能接受其括号内函数的返回值;使用的函数规定必须参数为空或者为一个参数等 例题: <?…...

Python GUI开发必看:Tkinter Button控件使用详解
Button(按钮)组件用于实现各种各样的按钮。 Button组件可以包含文本或图像,你可以将一个Python的函数或方法与之相关联,当按钮被按下时,对应的函数或方法将被自动执行。 Button组件仅能显示单一字体的文本,…...
上海市计算机学会竞赛平台2024年7月月赛丙组得分排名
题目描述 给定 nn 名学生的考试得分,这些学生的学号为 11 到 nn,其第 ii 号学生的得分为 aiai,请将这些学生按照分数从大到小的顺序排列并输出学号序列。 若两个学生得分相同,则先输出较小的学号。 输入格式 第一行…...

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

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

C代码做底层及Matlab_SimuLink做应用层设计单片机程序
前言:SimuLink工具极其强大,但是能直接支持单片机自主开发的很少,造成这个问题的原因主要是我们使用的芯片底层多是C代码工程,芯片厂家也只提供C代码库,很少能提供SimuLink的支持库,即使提供也不是很不完善,如NXP的一些芯片提供的SimuLink库不含盖高级应用,再比如意法半…...
Cloud Kernel SIG 月度动态:ANCK OOT 驱动基线更新,发布 2 个 ANCK 版本
Cloud Kernel SIG(Special Interest Group):支撑龙蜥内核版本的研发、发布和服务,提供生产可用的高性价比内核产品。 01 SIG 整体进展 1. 发布 ANCK 5.10-016.4 小版本。 2. 发布 ANCK 5.10-017.1 小版本。 3. ANCK 新增海光平…...

vue3仿飞书头像,根据不同名称生成不同的头像背景色
效果展示: 传递三个参数: name:要显示的名称;size:头像的大小;cutNum:分割当前名称的最后几位数; 代码如下: <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是三个流行的前端框架,采用组件化的开发方式。支持虚拟DOM(Virtual DOM)技术,有丰富的生态系统、大量的插件和工具可以使用。Vue的语法是传统的HTML和JavaScript,React使用JSX语法,Angu…...
深度学习--长短期记忆网络
1.引入 RNN 可以将以前的信息与当前的信息进行连接。例如,在视频中,可以用前面的帧来 帮助理解当前帧的内容;在文本中,可以用前面半句话的内容来预测后面的内容。但是, RNN 存在一个记忆消失的问题。例如,…...

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

基于vue框架的CKD电子病历系统nfa2e(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
系统程序文件列表 项目功能:患者,医生,药品信息,电子病历,临时医嘱,长期医嘱,健康科普 开题报告内容 基于Vue框架的CKD电子病历系统 开题报告 一、选题背景 随着信息技术的飞速发展和医疗信息化的深入推进,电子病历系统(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,当前已安装 setuptools 并且版本超过40.8.0 解决方案 缺包了&am…...
575. 分糖果
哈喽!大家好,我是奇哥,一位专门给面试官添堵的职业面试员 文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】更有我为大家准备的福利哟! 文章目录 一、题目二、答案三、总结 一、题目 …...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...