走出大模型部署新手村!小明这样用魔搭×函数计算

作者:拓山

前文介绍了魔搭 ModelScope 社区模型服务 SwingDeploy 服务。开发者可以将模型从魔搭社区的模型库一键部署至阿里云函数计算,当选择模型并部署时,系统会选择对应的机器配置。按需使用可以在根据工作负载动态的减少资源,节约机器使用成本。5 分钟完成从开源模型至模型推理 API 服务的生产转换……好,优势前文已经介绍过了。

那么,到底怎么应该怎么开始使用,本文将带小明(纯纯的小白)走出新手村,体验魔搭社区的一键部署服务(SwingDeploy [ 1] ),对小明的种种疑惑进行解答。开始!

图片

小明如何在魔搭社区一键部署开源模型?

魔搭开源社区当前只有热门开源模型支持一键部署(可支持部署的模型列表紧密扩充中),小明可以在模型库列表页面,过滤支持快速部署的 SwingDeploy 的模型列表,然后点击进模型详情页,其中模型详情页的右上角包含有部署按钮,可以进行快速部署(SwingDeploy)。

图片

模型列表页 过滤支持模型部署的模型列表。

图片

模型详情页: 右上快速部署。

另外,小明可以切换至首页,通过左侧【模型服务】进入模型部署服务(SwingDeploy)页面。

图片

在新建快速部署(SwingDeploy)后,小明可以针对模型部署信息进行配置,包括必要的部署模型版本、部署地域、部署卡型、部署显存等。

图片

当小明点击确认快速配置无误后,通过点击【一键部署】按钮,从而进入部署过程;整个过程一般持续 1-5 分钟,当部署完成后,可以看到服务状态切换为【部署成功】。

图片

小明在魔搭一键部署模型到 FC 后,实际在 FC 部署了什么?

当小明将魔搭开源模型一键部署(SwingDeploy)到阿里云函数计算 FC 后,实际上是在阿里云函数计算 FC 平台创建了对应的服务与函数;服务和函数是阿里云函数计算资源模型中的一级概念:

  • 服务:
    • 一个服务中可以包含多个函数。
    • 在服务级别上可以配置日志采集、网络通道、存储扩展等,服务中的所有函数继承服务中的这些配置。
  • 函数:
    • 函数是调度与运行的基本单位,是平台用户业务逻辑的所在,其中指明了代码/容器镜像,配置了 CPU/内存/显存/GPU 的运行规格等。

函数计算平台在收到该函数的推理请求调用后,会根据服务和函数的配置来创建对应的 CPU/GPU 容器实例。函数实例处理完请求后,再由平台将响应返回给用户。对应的 CPU/GPU 容器实例空闲一段时间没有处理调用请求后,函数计算平台会将其释放。所以默认情况下,空闲未使用的服务/函数没有资源消耗,函数计算仅对请求处理部分计费。

使用魔搭的“模型服务” SwingDeploy 一键部署模型到函数计算后,可以在部署列表中看到“服务名称”,使用服务名称可以到函数计算控制台 [ 2] 相应地域的服务列表找到部署好的服务和函数。

图片

在函数计算控制台的服务与函数页面,搜索指定的服务。

图片

用户通过魔搭一键部署模型后,在函数计算会对应生成的一个服务与其下的两个函数:

  • model_download_func 作用:用于部署阶段将魔搭模型下载至用户 NAS 内。
  • model_app_func作用:基于 Flask + 魔搭模型的推理 API,具体源码可见链接 [ 3]

图片

小明如何调用部署在 FC 的模型?

函数的调用是事件驱动的,我们定义一组规则,事件源产生的事件若匹配这些规则,就会触发函数的调用执行。这些规则的定义在函数计算中由“触发器” [ 4] 承载。具体到魔搭一键部署的函数,我们默认为其配置了一个 HTTP 触发器,若有相应的 HTTP 请求发生,即会触发函数的调用,详见函数计算平台 HTTP 触发器的使用文档 [ 5]

小明可以通过魔搭平台提供的示例代码调用已部署好的模型。

图片

魔搭示例代码中 API_URL 中的 HTTP URL,就是函数计算为每个魔搭模型函数配置的 HTTP 触发器。可以通过 FC 控制台,找到对应的魔搭服务下的 model_app_func 函数,通过查看函数详情页的“触发器管理”选项卡,查看更为详细的触发器信息。

图片

小明发现部署在 FC 的模型首次调用耗时长,后续调用耗时短,如何调优

如上所说,函数如果长时间空闲(没有调用发生),平台会通过回收函数实例来释放资源。函数计算平台在收到一个调用请求后,会判断当前是否有空闲的函数实例可供使用,如果没有,则需要新创建一个函数实例来服务该请求,这个过程称之为冷启动。

如果函数实例初始化时间耗时较长,那么服务该实例上发生的初次调用的时延也会增加,例如,初始化较大的模型文件(ChatGLM-6B 模型文件 15GB)。

为了应对上述场景,函数实例按照弹性规则,可以分为按量和预留两种模式。上述根据请求量弹出的实例我们称为按量实例。与之对应的,可以为函数配置弹性规则,增加预留模式 [ 6] 的实例。预留实例由函数计算平台预先创建,属于常驻资源,可用于平缓突发请求产生的时延毛刺。

FC 按量模式与预留模式的差异:

FC 按量模式为通过请求自动触发实例的创建,首次发起调用时,需要等待实例冷启动。如果您希望消除冷启动延时的影响,可以通过配置 FC 预留模式来解决。

FC 预留模式是将函数实例的分配和释放交由您管理,当配置预留函数实例后,预留的函数实例将会常驻,直到您主动将其释放。

在控制台中,可以在函数详情的“弹性管理”选项卡配置弹性规则。如下图示例,最小实例数即预留实例数,最大实例数与最小实例数之差即按量实例数的上限(避免弹出资源太多,控制成本上限)。弹性管理的配置方法详见文档 [7 ]

例如:可以通过如下操作指导,预留指定数量的 GPU 实例(测试目的:一般建议预留 1 个 GPU 实例)。

图片

  • 切换至函数的弹性管理 Tab 页

图片

  • 设置函数的 LATEST 版本,至少预留 1 个 GPU 实例

图片

  • 查看当前预留实例数量,是否满足目标预留实例数量。(上图表明完成指定数量的 GPU 实例预留)
  • 当预留实例就绪后,推理请求调用会被优先分配至该预留实例上执行,从而规避按量场景下的冷启动。
    • 小明可以通过请求级别的日志观测,来查看请求是由按量实例服务、还是预留实例服务。

图片

图片

图片

  • 通过删除弹性规则,可以删除对应预留实例。
    • 注意: 预留实例的生命周期,完全由小明全权负责。

小明想实现类似 MidJourney 异步调用效果,应该如何做呢?

类似于 StableDiffusion 的 AIGC 生图场景,Midjourney 提供了非常好的异步队列效果,基于函数计算如何实现呢?

函数计算同时提供同步调用、异步调用、异步任务三种处理能力。

  • 同步调用:
    • 当您同步调用一个函数时,事件将直接触发函数,函数计算会运行该函数并等待响应。当函数调用完成后,函数计算会将执行结果直接返回给您,例如返回结果、执行摘要和日志输出。
    • 详细文档:链接 [ 8]
  • 异步调用:
    • 函数计算系统接收异步调用请求后,将请求持久化后会立即返回响应,而不是等待请求执行完成后再返回。函数计算保证请求至少执行一次。
    • 详细文档:链接 [ 9]
  • 异步任务:
    • 当您对函数发起异步调用时,相关请求会被持久化保存到函数计算内部队列中,然后被可靠地处理。如果您想追踪并保存异步调用各个阶段的状态,实现更丰富的任务控制和可观测能力,可以选择开启任务模式处理异步请求。
    • 详细文档:链接 [ 10]

图片

当函数计算的异步调用能力与 GPU 相较合时(详细文档:链接 [1****1] ),小明可以很轻松的实现 AIGC 异步排队处理的良好用户体验。

小明发现模型/应用有问题,如何定位?

a. 可观测:配置 SLS 日志

SLS 是阿里云提供的日志类数据一站式服务。我们可以通过在函数对应的服务中配置 SLS 日志项目和日志库,函数实例执行过程中的输出就可以记录到配置的日志库中。之后可以通过函数计算控制台、 SLS 的控制台都可以对这些内容进行查看。

函数计算服务配置日志的详细内容,请见文档 [ 12] 。以下给出简要步骤。

  1. 在服务配置中确认日志功能已启用。

图片

  1. 在函数详情中,“调用日志”选项卡查看函数维度的日志、请求维度的日志、容器实例维度的日志。

图片

图片

b. 可观测:如何查看监控

函数计算平台记录了多个层次的监控指标,我们可以通过控制台进行查询。

一方面,我们可以通过控制台左侧“高级功能”、“监控大盘”进入,在大盘页面下方依次选择服务名称、函数名称,查看不同层次的监控汇总信息。有关监控指标详细信息请见文档 [ 13]

图片

另一方面,我们可以在函数详情“监控指标”选项卡中,直接对函数自身相关的指标进行查看。

图片

最后,我们可以在函数详情“调用日志”选项卡中,查看函数运行的相关日志。

图片

c. 可观测:如何命令行调试

我们也可以通过函数计算控制台函数详情的“实例列表”选项卡,使用“登录实例”功能进入到函数实例里面,通过直接的交互对执行环境、函数行为进行调试。

图片

如果当前“实例列表”为空,可以通过测试调用触发函数计算平台新弹出一个实例。

图片

登陆 GPU 实例后,小明就可以执行相关的 shell 命令了#

Tips: 需要注意的是,登录实例的过程中,函数实例处于活跃状态,和调用函数采用相同的计量规则。为避免忘记关闭会话而意外产生费用,通过控制台进行命令行操作时,会话默认会在空闲 10 分钟之后断开连接。如有需要,可以通过执行例如 top 来进行保活。

小明想让模型跑在不同的 CPU/GPU 上,在 FC 上应如何设置呢?

如果我们通过监控指标发现函数实例的资源使用较为饱和或者空闲,可以在“函数配置”选项卡上,对函数的资源规格进行配置,包括 CPU/磁盘/内存/显存等。

特别地,对于 GPU 函数,我们可以通过切换 GPU 卡型,还提升单个函数实例最大可配置的显存大小(T4 最大 16GB,A10 最大 24GB)。关于 GPU 函数的更多信息,可见文档 [ 14]

  1. 查看函数当前配置

图片

  1. 编辑函数基础信息

图片

小明调优后的模型可以批量推理,在 FC 上应该如何设置呢?

函数计算平台在收到一个推理调用请求后,会判断现有函数容器实例的并发度是否够用,决定是否将该推理调用请求转发给现有函数容器实例来处理,还是新弹出一个函数容器实例处理该请求。

单个函数容器实例同时能处理的调用请求数为函数实例的并发度 [ 15] 。如果应用本身能够同时处理多个请求,相比默认的 1 并发度,可以减少函数的冷启动次数。

建议根据不同应用场景的需要,选择不同的并发度配置。

  • 计算密集型的推理应用:建议 GPU 函数实例的并发度保持默认值 1。
  • 支持请求批量聚合的推理应用:建议 GPU 函数实例的并发度根据能同时聚合的推理请求数量进行设置,以便批量推理。

我们可以在编辑函数的“基础信息”过程中,调整函数实例的并发度。

图片

特别地,对于 GPU 函数,默认情况下,无论 Tesla 系列 T4 卡型、还是 Ampere 系列 A10 卡型的 GPU 实例,单个阿里云账号地域级别的 GPU 物理卡上限为 10 卡(示例请见文档 [ 16] )。在高并发场景下,如您有更高的物理卡需求,请加入钉钉用户群(钉钉群号:11721331)申请。

函数计算 FC小明完成了函数计算新手村课程,对小明还有其他嘱咐嘛?

  • GPU 实例 FAQ [ 17]
  • GPU 函数镜像使用说明 [ 18]
  • GPU 应用场景使用说明 [ 19]

相关链接:

[1] SwingDeploy

https://www.modelscope.cn/docs/%E9%83%A8%E7%BD%B2FC?spm=a2c6h.13046898.publish-article.20.210e6ffavCYCyQ

[2] 函数计算控制台

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Ffcnext.console.aliyun.com%2Foverview%3Fspm%3Da2c6h.13046898.publish-article.22.210e6ffavCYCyQ&lang=zh

[3] 链接

https://www.devsapp.cn/details.html?name=start-modelscope

[4] 触发器

https://help.aliyun.com/zh/fc/trigger-overview

[5] 使用文档

https://help.aliyun.com/zh/fc/configure-an-http-trigger-that-invokes-a-function-with-http-requests

[6] 预留模式

https://help.aliyun.com/zh/fc/configure-provisioned-instances-and-auto-scaling-rules#section-cra-c7p-wbo

[7] 文档

https://help.aliyun.com/zh/fc/configure-provisioned-instances-and-auto-scaling-rules#section-7v8-a44-j5q

[8] 链接

https://help.aliyun.com/zh/fc/user-guide/synchronous-invocations

[9] 链接

https://help.aliyun.com/zh/fc/user-guide/overview-34

[10] 链接

https://help.aliyun.com/zh/fc/overview-25

[11] 链接

https://help.aliyun.com/zh/fc/use-cases/offline-asynchronous-task-scenarios

[12] 文档

https://help.aliyun.com/zh/fc/user-guide/configure-the-logging-feature

[13] 文档

https://help.aliyun.com/zh/fc/user-guide/configure-the-logging-feature

[14] 文档

https://help.aliyun.com/zh/fc/use-cases/introduction-to-serverless-gpus

[15] 函数实例的并发度

https://help.aliyun.com/zh/fc/configure-instance-concurrency

[16] 文档

https://help.aliyun.com/zh/fc/use-cases/quasi-real-time-inference-scenarios#p-p53-jwq-172

[17] GPU 实例 FAQ

https://help.aliyun.com/zh/fc/support/faq-about-gpu-accelerated-instances

[18] GPU 函数镜像使用说明

https://help.aliyun.com/zh/fc/use-cases/image-usage-notes

[19] GPU 应用场景使用说明

https://help.aliyun.com/zh/fc/use-cases/scenarios/

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在WordPress网站中添加多语言搜索(2种简单方法)

您想在WordPress网站中添加多语言搜索吗? 如果您有一个多语言 WordPress 网站,那么添加多语言搜索功能可以帮助用户通过使用自己的语言进行搜索来更快地找到信息。 在本文中,我们将向您展示如何在 WordPress 中轻松添加多语言搜索&#xff…

C#,入门教程(31)——预处理指令的基础知识与使用方法

上一篇: C#,入门教程(30)——扎好程序的笼子,错误处理 try catchhttps://blog.csdn.net/beijinghorn/article/details/124182386 Visual Studio、C#编译器以及C#语法所支持的预处理指令,绝对是天才设计。 编译程序的时候会发现&am…

EasyRecovery2024易恢复专业免费可靠的国产数据恢复软件

EasyRecovery TM (易恢复中国)是由全球著名数据厂商Ontrack 出品的一款数据文件恢复软件。支持恢复不同存储介质数据:硬盘、光盘、U盘/移动硬盘、数码相机、Raid文件恢复等,能恢复包括文档、表格、图片、音视频等各种文件。 Easy…

Docker Ipvlan l3s模式说明

看到Docker Ipvlan中有三种模式L2、L3、L3S模式,查阅了L3S,记录如下: 起因 Docker链接: IPvlan network driver 概念 注释说明(摘选自: ipvlan-l3s模式) L3S mode与L3 mode 的区别在于启用了iptables (conn-track…

服务优雅下线

服务优雅下线 问题背景描述 运维同事反馈上线滚动发布,旧实例接收的请求发生业务中断,没有处理完成, 为保证服务质量,期望发布时旧实例将已有请求处理完成再回收。先说可能会带来的影响:业务处理中断 导致数据不完整…

开源项目CuteSqlite开发笔记(八):Windows 64位/32位使用GetWindowLongPtr钩子函数

需求描述 在开发CuteSqlite的时候, 有一个功能需要实现,鼠标移到WTL::CStatic上后,发送消息通知CToolTipCtrl弹出。 遇到问题 WTL::CStatic控件没有相应 WM_MOUSEMOVE 消息,需要返回一个HTCLIENT消息来让窗口处理函数执行 WM_MO…

【QT+QGIS跨平台编译】之六:【LZMA+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、lzma介绍二、文件下载三、文件分析四、pro文件五、编译实践一、lzma介绍 LZMA(Lempel-Ziv-Markov chain-Algorithm的缩写),是一个Deflate和LZ77算法改良和优化后的压缩算法。 libLzma是基于LZMA压缩算法封装的开源库。2001年被首次应用于7-Zip压缩工具中,是 …

点亮流水灯

目录 1.water_led 2.tb_water_led 50MHZ一个周期是20ns,0.5秒就是20ns0.02um0.00002ms0.000_00002s。0.5/0.000_00002s25_000_000个时钟周期,表示要从0计数到24_999_999 LED灯是低电平点亮,前0.5秒点亮第一个LED灯,当检测到脉冲信号点亮第二…

关于缓存 db redis local 取舍之道

文章目录 前言一、影响因素二、db or redis or local1.db2.redis3. local 三、redisson 和 CaffeineCache 封装3.1 redisson3.1.1 maven3.1.2 封装3.1.3 使用 3.2 CaffeineCache3.1.1 maven3.1.2 封装3.1.3 使用 总结 前言 让我们来聊一下数据缓存,它是如何为我们带…

【C/C++】C/C++编程——为什么学习 C++?

当提到C的时候,很多人会觉得语法复杂、学习曲线陡峭,并且好像与C语言还有点"纠缠不清"。尽管如此,C仍然是当今世界上最受欢迎和最有影响力的编程语言之一。特别是在当今快速发展的人工智能(AI)领域&#xff…

vue3前端开发,如何引入element-plus前端框架及配置参数

vue3前端开发,如何引入element-plus前端框架及配置参数!这是一个简单的教程,帮助大家快速在自己的项目中引入element-plus框架。 主要是介绍的引入流程和参数的配置情况。 如图,这个就是elment-plus前端框架里面的一个主按钮展示。表示我们配…

NodeJs 第二十章 代理

在计算机网络中,代理是一种中间服务,能够代理用户与网络资源之间的通信。代理服务器可以缓存网页内容、过滤网络流量或隐藏用户的真实IP地址等功能。 在日常开发中,我们接触最多的是客户端发送ajax到服务端。但是服务端并不是 node &#xf…

pod 报错Failed to connect to github.com port 443

pod 报错Failed to connect to github.com port 443 1、排查代理问题1.1、查找网络代理1.2、修改 Git 的代理 2、排查DNS解析问题2.1、查找 ip地址2.2、修改 host 文件 1、排查代理问题 1.1、查找网络代理 打开 设置 --> 网络与Internet --> 查找代理 1.2、修改 Git …

k8s中服务器容器tcp连接数量优化

netty的http1服务器在运行一段时间后会无法提供服务,返回客户端socket hang up 使用apipost测试抓包显示三次握手后被reset 修改net/core/somaxconn 登录容器,cat /proc/sys/net/core/somaxconn显示128,对于一个服务器来说,这个…

PLAN方法:解决 GAN 生成医学图像 Latent 空间中的隐私保护方法

PLAN方法:解决 GAN 生成医学图像 Latent 空间中的隐私保护方法 PLAN 原理StyleGAN 生成视网膜图k-SALSA 生成视网膜图PLAN方法 生成视网膜图 总结 PLAN 原理 论文:https://arxiv.org/abs/2307.02984 代码:https://github.com/perceivelab/P…

vulhub之redis篇

CVE-2022-0543 | redis的远程代码执行漏洞 简介 CVE-2022-0543 该 Redis 沙盒逃逸漏洞影响 Debian 系的 Linux 发行版本,并非 Redis 本身漏洞, 漏洞形成原因在于系统补丁加载了一些redis源码注释了的代码 原理分析 redis一直有一个攻击面,就是在用户连接redis后,可以通过ev…

企业微信开发:本地运行一个页面应用

问题 在开发环境本地运行一个页面应用,将网页URL配置到企业微信的应用主页网址中,此时应用在企业微信中能够正常打开网页吗? 结论是:能够正常访问页面。 能够访问的前提 能够访问的前提条件,企业微信客户端所在的网…

界面控件DevExpress ASP.NET Data Grid组件 - 可快速处理各类型数据!(一)

由DevExpress开发的快速且功能完整的ASP.NET Web Forms的Data Grid组件,从全面的数据塑造和数据过滤选项到十多个集成数据编辑器,该套件提供了帮助用户构建极佳数据所需的一些,没有限制! P.S:DevExpress ASP.NET Web …

k8s--helm

什么是helm?在没有这个helm之前,deployment service ingress helm的作用 通过打包的方式,把deployment service ingress等打包在一块,一键式的部署服务,类似yum安装 官方提供的一个类似与安装仓库额功能,…

C语言——结构体讲解

目录 一、结构体类型的声明 二、结构体变量的定义和初始化 三、结构体的重命名 四、结构体的自引用 五、结构体内存对齐 六、结构体传参 七、结构体实现位段 7.1 什么是位段 7.2 位段的声明和使用 7.3 位段的空间大小计算 7.4 位段的内存分配 7.5 位段的跨平…