如何在亚马逊 SageMaker 进行 Stable Diffusion 模型在线服务部署

news2024/10/6 4:08:55

文章目录

  • 前言 - 浅谈 AIGC
    • AIGC - 引领人工智能走向春天
    • 春天里盛开的 AI 绘画
    • AI 绘画之Stable Diffusion 2.0 登场
    • 人人都有机会成为前沿的技术探索者
  • 基于Amazon SageMaker进行Stable Diffusion 模型部署
    • 认识 Amazon SageMaker
    • 借助 Amazon SageMaker 进行环境搭建和模型推理
      • 1. 创建 jupyter notebook 运行环境
      • 2. 一键运行所有代码
    • 关键代码分析如下
      • 1. 环境准备,代码模型下载
      • 2. 在Notebook中配置并使用模型
      • 3. 部署模型至Sagemaker 推理终端节点
    • 在 Amazon Cloud9 创建前后端 Web 应用
      • 1. 创建云服务实例,并进行web环境安装
      • 2. 运行启动web服务,输入想要生成的图像参数和提示词,调用推理服务
      • 3. 文本图像生成示例
      • 4. Stable Diffusion 2.0 模型效果优缺点分析
  • 亚马逊云科技之云上探索实验室
    • 亚马逊云服务使用体验总结
    • 前沿技术有待大家一起去探索

前言 - 浅谈 AIGC

2-10

AIGC - 引领人工智能走向春天

随着人工智能技术的发展与完善,AI Generated Content (AIGC,人工智能自动生成内容) 在内容的创作上为人们的工作和生活带来前所未有的帮助,具体表现在能够帮助人类提高内容生产的效率,丰富内容生产的多样性、提供更加动态且可交互的内容。AIGC 相关技术可以在创意、表现力、迭代、传播、个性化等方面,充分发挥技术优势,打造新的数字内容生成与交互形态。在这两年AIGC在AI作画、AI 作曲、AI 作诗、AI写作、AI视频生成、 AI语音合成等领域持续大放异彩;尤其是近段时间火遍全网的AI绘画,作为用户的我们只要简单输入几个关键词几秒钟之内一幅画作就能诞生。

春天里盛开的 AI 绘画

最近以AIGC带来巨大生产力提升的时尚宠儿不断进化升级,争相亮相。我们迎来ChatGPT 系列技术带给我们一波又一波的AI盛宴,而在计算机视觉领域,AI 绘画近两年正在逐渐走向图像生成舞台的中央。

0-1
文本生成图像(AI 绘画)是根据文本生成图像的的新型生产方式,相比于人类创作者,文本生成图像展现出了创作成本低、速度快且易于批量化生产的优势。

AI 绘画之Stable Diffusion 2.0 登场

近一年来,AI绘画领域迅猛发展,国内外科技巨头和初创企业争相涌入,出现了不少文本生成图像的技术产品。这些产品背后主要使用基于扩散生成算法的 dall-e-2 和 stable diffusion 等模型。

2022年 Stable Diffusion 2.0 版本的发布,再次点燃了无数创作者使用AI文本图像生成技术来生成高质量创意图像的热情 ,如下图所示,Stable Diffusion相关代码仓库,gitHub star 数量正在飞速增长:

1-98

与 Stable Diffusion 上一个版本相比,Stable Diffusion 2.0 取得了更加优异的图像生成效果,具体表现如下:

  1. 通过在模型体系结构中引入交叉注意力层,将扩散模型转化为强大而灵活的生成器,用于文本或边界框等一般条件输入,并以卷积方式实现高分辨率图像生成;
  2. 基于 latent diffusion models(LDM)在图像修复和类条件图像合成方面获得了目前最优的分数;
  3. 在多项任务上都取得了非常有竞争力的表现,包括无条件图像生成、文本到图像合成和超分辨率;
  4. 同时与 pixel-based 扩散模型方法相比显著降低了计算要求,使得它的推理速度大大提升。

人人都有机会成为前沿的技术探索者

Stable Diffusion 2.0 和 chatGPT 等系列模型在计算机视觉和自然语言处理两大AI应用领域的优异表现, 引起学术界和工业界的极大轰动,人工智能事业发展似乎迎来了又一个春天。

众所周知,随着 AI 任务复杂性和应用范围增加,高精度大规模不断涌现,AI模型的训练和推理对算力的要求越来越高,对于中小企业和个人开发者而言,如果想训练或者部署稍微大的AI模型就不得不面对购买大量算力资源高投入的风险,而具备高算力资源的企业则能够有机会把握住各种神奇AIGC技术全面开花落地的历史机遇。

我们普通的创业者和开发者,有没有机会去训练和部署我们所看好领域的AIGC模型呢,答案是肯定的,在当下这个云服务时代,人人都有机会成为前沿的技术探索者。

最近受邀参加了亚马逊云科技 『云上探索实验室』实践云上技术的系列活动,通过Amazon SageMaker 平台快速完成 AIGC模型推理服务在线web部署,带给我很多启发和惊喜,原来在云端进行AI模型推理部署可以如此简洁,优雅、流畅。在参加这次活动实践的过程中,我也学到了很多有益的知识和技能, 接下来的博文就会以我的一次AIGC模型(Stable Diffusion 2.0 )web服务部署之旅带大家一起体验如何在云端去落地AI模型服务:

  • 传送门:Stable Diffusion 2.0 GitHub 仓库

  • 传送门:亚马逊云科技之云上探索实验室活动:从实践中探索机器学习边界

基于Amazon SageMaker进行Stable Diffusion 模型部署

认识 Amazon SageMaker

Amazon SageMaker 是一项完全托管的机器学习服务:借助SageMaker的多种功能,数据科学家和开发人员可以快速轻松地构建和训练机器学习模型,然后直接部署至生产环境就绪的托管环境。SageMaker涵盖了ML 的整个工作流,可以标记和准备数据、选择算法、训练模型、调整和优化模型以便部署、预测和执行操作。

经过过去一周多的学习和实践体验,我发现这个平台简直就是为我们这些创业者和个人开发者量身打造的AI服务落地利器。许多AI工程项目,我们只需去构造好自己的训练集和测试集,其余的模型训练、推理、部署,Amazon SageMaker 都能够帮我们轻松完成。

本次博文所分享的 Stable Diffusion 2.0,通过参考官方提供的技术文档,只用了 20分钟左右的时间,我就在Amazon SageMaker 上成功搭建了一套流畅的AI绘画在线服务,接下来,让我们一起揭秘。

借助 Amazon SageMaker 进行环境搭建和模型推理

1. 创建 jupyter notebook 运行环境

  • 点击链接登录至亚马逊云科技管理控制台

在搜索框中搜索 SageMaker ,如下图所示

1-0

这里我们创建一个笔记本编程实例

1-1

我这里选择的配置如下:

1-2

选择角色,其他的默认即可

1-4

大概5分钟左右,实例就创建成功啦

1-5

  • 点击链接,下载代码

上传刚刚下载的代码

1-5

直接打开这个代码

1-6

选择合适的conda环境

1-7

2. 一键运行所有代码

这里我们直接一键运行运行所有代码即可,代码执行过程中会依次完成 Stable Diffusion 模型相关类和函数的代码定义、推理测试,并打包代码和模型,然后部署模型至Sagemaker 推理终端节点 (PS:这里的所有代码运行完毕大概需要5到10分钟左右)

1-8

关键代码分析如下

1. 环境准备,代码模型下载

检查当前 pyTorch 版本

!nvcc --version
!pip list | grep torch

安装 Stable Diffusion 代码运行额外需要的依赖库,这网速飞快

!sudo yum -y install pigz
!pip install -U pip
!pip install -U transformers==4.26.1 diffusers==0.13.1 ftfy accelerate
!pip install -U torch==1.13.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
!pip install -U sagemaker
!pip list | grep torch

下载代码和模型文件,这里直接下载Hugging Face提供的代码和模型即可

1-10

2. 在Notebook中配置并使用模型

直接调用 函数进行模型加载

import torch
import datetime
from diffusers import StableDiffusionPipeline
# Load stable diffusion 
pipe = StableDiffusionPipeline.from_pretrained(SD_MODEL, torch_dtype=torch.float16)

在 Cuda 上进行模型的推理,这里 Stable Diffusion V2 能够支持生成的最大图像尺寸为 768 * 768

# move Model to the GPU
torch.cuda.empty_cache()
pipe = pipe.to("cuda")

# V1 Max-H:512,Max-W:512
# V2 Max-H:768,Max-W:768

print(datetime.datetime.now())
prompts =[
    "Eiffel tower landing on the Mars",
    "a photograph of an astronaut riding a horse,van Gogh style",
]
generated_images = pipe(
    prompt=prompts,
    height=512,
    width=512,
    num_images_per_prompt=1
).images  # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/)

print(f"Prompts: {prompts}\n")
print(datetime.datetime.now())

for image in generated_images:
    display(image)

友情提示 :如果报错,遇到推理时 GPU 内存不够,则可以尝试以下三种方式进行解决

  1. 试一试生成分辨率小一点的图片
  2. 减少生成图片的数量
  3. 升级机型,选择更强的GPU服务器

3. 部署模型至Sagemaker 推理终端节点

我们这里直接使用 AWS 的 SageMaker Python 开发工具包部署模型刚刚已经验证能够运行成功的模型和打包好的代码。

  • 编写初始化的Sagemaker代码用于部署推理终端节点
import sagemaker
import boto3

'''
# 创建 Session
'''
sess = sagemaker.Session()
# sagemaker session bucket -> used for uploading data, models and logs
# sagemaker will automatically create this bucket if it not exists
sagemaker_session_bucket=None

if sagemaker_session_bucket is None and sess is not None:
    # set to default bucket if a bucket name is not given
    sagemaker_session_bucket = sess.default_bucket()

try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client('iam')
    role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']

sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)

print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")
  • 创建 inference.py 脚本,进行模型的加载和推理
%%writefile ./$SD_MODEL/code/inference.py
import base64
import torch
from io import BytesIO
from diffusers import StableDiffusionPipeline

'''
# 加载模型到CUDA
'''
def model_fn(model_dir):
    # Load stable diffusion and move it to the GPU
    pipe = StableDiffusionPipeline.from_pretrained(model_dir, torch_dtype=torch.float16)
    pipe = pipe.to("cuda")

    return pipe

'''
# 推理方法
'''
def predict_fn(data, pipe):

    # 解析参数 get prompt & parameters
    prompt = data.pop("prompt", "")
    # set valid HP for stable diffusion
    height = data.pop("height", 512)
    width = data.pop("width", 512)
    num_inference_steps = data.pop("num_inference_steps", 50)
    guidance_scale = data.pop("guidance_scale", 7.5)
    num_images_per_prompt = data.pop("num_images_per_prompt", 1)
    # 传入参数,调用推理 run generation with parameters
    generated_images = pipe(
        prompt=prompt,
        height=height,
        width=width,
        num_inference_steps=num_inference_steps,
        guidance_scale=guidance_scale,
        num_images_per_prompt=num_images_per_prompt,
    )["images"]

    # create response
    encoded_images = []
    for image in generated_images:
        buffered = BytesIO()
        image.save(buffered, format="JPEG")
        encoded_images.append(base64.b64encode(buffered.getvalue()).decode())

    # create response
    return {"generated_images": encoded_images}

在 Amazon Cloud9 创建前后端 Web 应用

AWS Cloud9 是一种基于云的集成开发环境 (IDE),只需要一个浏览器,即可编写、运行和调试代码。包括一个代码编辑器、调试程序和终端,并且预封装了适用于 JavaScript、Python、PHP 等常见编程语言的基本工具,无需安装文件或配置开发计算机,即可开始新的项目。

  • 这里我直接参考官方提供的手册,跟着操作即可完成 Web 服务的部署

1. 创建云服务实例,并进行web环境安装

这里我试用了 Cloud9 云服务,在查找服务处搜索 Cloud9,并点击进入Cloud9服务面板即可

2-1

点击创建环境

2-2

我这里的设置如下

2-3

其他部分配置保持默认,在页面底部点击橙色的 Create 按钮创建环境。 环境的创建将花费1-2分钟的时间。

2-4

创建成功之后,点击 open 进入服务控制台

2-5

粘贴左侧的代码,复制到控制台bash窗口进行运行,会自动下载和解压代码

cd ~/environment
wget https://static.us-east-1.prod.workshops.aws/public/73ea3a9f-37c8-4d01-ae4e-07cf6313adac/static/code/SampleWebApp.zip
unzip SampleWebApp.zip

#  在 AWS Cloud9 上安装 Flask 和 boto3
pip3 install Flask

pip3 install boto3

2-6

2. 运行启动web服务,输入想要生成的图像参数和提示词,调用推理服务

依赖的环境安装好之后,就可以运行这个服务代码

2-7

服务启动成功之后,访问 127.0.0.1:8080 即可访问本地服务;设定 width 和 Length 参数,以及想要生成的图片描述,然后点击提交

2-8

等待 几秒钟之后,就得到了上面输入的两个 提示词对应生成的图像,看得出来效果还是非常不错的;

  • 经测试发现,即使每次输入的提示词是同一个,模型生成得到的输出也是不固定的
  • 输入的提示词语越精准,生成的图像效果会容易越好
  • 基于亚马逊SageMaker服务平台,如此快速(熟练之后,不到半个小时)就能搭建好一套AI模型的web端在线推理调用,果然好的技术就是第一生产力

2-9

3. 文本图像生成示例

这里提供3组文本图像生成的示例,方便各位同学参考:

提示词生成图像示例1生成图像示例2
A rabbit is piloting a spaceship5-05-1
Driverless car speeds through the desert$12-----
A small cabin on top of a snowy mountain in the style of Disney, artstation$1-----

4. Stable Diffusion 2.0 模型效果优缺点分析

目前业界已经有不少文本图像生成的服务和模型推出,Stable Diffusion 2.0 的图像生成效果,整体上我觉得相当惊艳,优点很明显:

  1. 能够直接支持 512x512像素和768x768像素的图像生成,生成图像的整体质量和局部细节都有显著提升,其次在超分辨率高阶Diffusion模型加持下,Stable Diffusion 2.0 可以进一步生成分辨率2K以上的高清图像。
  2. 对文本词汇的解析比较精准,推理速度相比之前版本有较大提升,整体来看非常高效、鲁棒,超越目前业界很多模型。

不足之处,Stable Diffusion 2.0 对于过短和过长的文本提示词生成的图像可能效果差异很大,这意味着有的时候,如果想要生成得到更加贴近我们预期的图像,需要对专业的文本提示词汇有所了解,使得输入的文本提示词更加精准和容易让模型理解。

亚马逊云科技之云上探索实验室

亚马逊云服务使用体验总结

通过此次深度参与亚马逊云科技之云上探索实验室活动并上手实践不同AI项目的云端服务部署,我进一步认识到 AWS(Amazon Web Services)的强大所在:

  1. 可扩展性:AWS允许用户根据业务需要轻松扩展服务器资源,能够帮助客户节省成本、提高效率;
  2. 可靠性:AWS 拥有持续领先的云服务基础设施,具有高度可靠的分布式架构,能够在全球业务范围内提供稳定可靠的服务;
  3. 安全性:AWS 提供各种安全功能和工具,有效帮助用户保护数据和应用程序;
  4. 灵活性:AWS 提供各种可定制的服务和功能,以满足用户的特定需求;
  5. 可信赖:AWS 在业界树立良好的企业形象和服务口碑,早已成为全球数百万企业和个人客户的云转型首选。

AWS 相比其他云服务厂商,还具备以下优点:

  1. 亚马逊云科技为 AWS 提供全球覆盖广泛、服务深入的云平台,已有超过 200 项功能齐全的服务可供使用;
  2. 提供有一套构建于 AWS 之上的按需付费的生产效率应用程序,使得团队用户能够快速、安全、经济高效地检查项目状态、进行内容协作,并实现实时通信;
  3. 提供最广泛、最深入的机器学习服务及配套的云基础设施和广泛验证的算法模型,从而使每位开发人员、数据科学家和专家从业者都能利用机器学习技术高效切入AI服务的落地和部署;
  4. 提供全方位的在线开发工具,用户能够更快、更高效地托管代码以及构建、测试和部署应用程序;

前沿技术有待大家一起去探索

这次有幸受邀参加亚马逊云科技【云上探索实验室】活动,跟着亚马逊云科技技术团队提供的系列非常详尽的 AI模型云上推理部署实战文档和视频教程一步步进行真实的云上服务部署操作,让我再次认识到AI在各个领域技术突破所带来的强大生产力,而通过借助 亚马逊 SageMaker 平台进行AI模型服务部署大大简化我们普通开发者进行AI模型部署服务的难度,使得对于中小企业和个人开发者而言,AI服务的快速落地也不再是一件难事。

  • 教程链接,小伙伴们有兴趣的话,也可以参考SageMaker平台提供的AIGC模型部署官方文档和我这里的博客进行尝试,部署自己的AIGC模型

通过使用 亚马逊 SageMaker 服务平台,我们只需要一个浏览器,即可编写、运行和调试各种代码,无需进行复杂的机器适配和环境搭建,能够快速完成AI模型的推理、测试、验证部署工作。

如果你也想亲身感受最新、最热门的亚马逊云科技开发者工具与服务,那么只需点击下方链接,即可跟着亚马逊云科技团队工程师一起对更多有趣的AI技术进行探索与实践,出击吧,AI 追梦人

  • 亚马逊云科技之云上探索实验室活动:从实践中探索机器学习边界

9-0

率先完成学习打卡小伙伴,还有丰厚奖品可以领取哟

9-1

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

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

相关文章

go语言初探(一)

package mainimport ("fmt""time" )func main() {fmt.Print("hello go!")time.Sleep(1 * time.Second)}运行后,结果如下: 1、golang表达式中,加;和不加;都可以 2、函数的{和函数名一…

【前端架构】前端通用架构

一个强大的前端通用架构应该具备多种能力,以支持现代化的应用程序开发和提高开发效率。以下是一些前端通用架构应该具备的关键能力: 模块化和组件化:支持模块化开发和组件化架构,能够将应用拆分为独立的模块和组件,以便…

逻辑回归(解决分类问题)

定义:逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模,预测一个事件发生的概率。逻辑回归通常用于二元分类问题,即将数据分为两个类别。它基于线性回归模型,但使用了逻辑函数(也称为S形函数&…

【动态规划】【C++算法】639 解码方法 II

作者推荐 【矩阵快速幂】封装类及测试用例及样例 涉及知识点 动态规划 字符串 滚动向量 LeetCode 639. 解码方法 II 一条包含字母 A-Z 的消息通过以下的方式进行了 编码 : ‘A’ -> “1” ‘B’ -> “2” … ‘Z’ -> “26” 要 解码 一条已编码的消息…

【VTKExamples::PolyData】第四期 DijkstraGraphGeodesicPath

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例DijkstraGraphGeodesicPath,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. DijkstraGraphGeodesicPath /…

element plus 可选择树形组件(el-tree) 怎样一键展开/收起?实现方法详解

实现代码&#xff1a; 按钮&#xff1a; <el-button click"takeall" style"height: 24px">{{zhanstatus % 2 ! 0 ? "收起所有" : "展开所有"}} </el-button> 组件&#xff1a; <el-form-item label"可选择菜单…

Kafka系列(四)

本文接kafka三&#xff0c;代码实践kafkaStream的应用&#xff0c;用来完成流式计算。 kafkastream 关于流式计算也就是实时处理&#xff0c;无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合&#xff0c;因此了解了kafka。但是本人阅读了kafka地官网&#…

32单片机RTC时间接续,掉电时间保存

1、实现思路 前提&#xff1a;首先要实现RTC掉电之后时间还能继续走&#xff0c;RTC电池是必要的 说明&#xff1a;设备第一次启动需要初始化配置RTC&#xff0c;但当二次启动再重新配置RTC会导致RTC计数器置零&#xff0c;所以传统的程序流程是不行的&#xff0c;我们需要知…

苹果最新系统iOS 17的调试和适配方法 - Xcode 14.3.1 真机调试指南

最近苹果发布了iOS 17作为其最新操作系统版本&#xff0c;作为开发者&#xff0c;你可能需要了解如何在Xcode 14.3.1中进行真机调试和适配。本文将为你详细介绍步骤和注意事项。 I. 检查Xcode版本 在开始之前&#xff0c;确保你已经安装了Xcode 14.3.1或更高版本。你可以在Xco…

计算机网络(超详解!) 第二节 数据链路层(上)

1.数据链路层使用的信道 数据链路层使用的信道主要有以下两种类型&#xff1a; 1.点对点信道&#xff1a;这种信道使用一对一的点对点通信方式。 2.广播信道&#xff1a;这种信道使用一对多的广播通信方式&#xff0c;因此过程比较复杂。广播信道上连接的主机很多&#xff0…

学习记录-自动驾驶与机器人中的SLAM技术

以下所有内容均为高翔大神所注的《自动驾驶与机器人中的SLAM技术》中的内容 融合导航 1. EKF和优化的关系 2. 组合导航eskf中的预测部分&#xff0c;主要是F矩阵的构建 template <typename S> bool ESKF<S>::Predict(const IMU& imu) {assert(imu.timestamp…

HCIA——10实验:跨路由转发。静态路由、负载均衡、缺省路由、手工汇总、环回接口。空接口与路由黑洞、浮动静态。

学习目标&#xff1a; 跨路由转发、负载均衡、环回接口、手工汇总、缺省路由、空接口与路由黑洞、浮动静态 学习内容&#xff1a; 跨路由转发静态路由、负载均衡、缺省路由、手工汇总。环回接口空接口与路由黑洞、浮动静态 目录 学习目标&#xff1a; 学习内容&#xff1a…

imgaug库指南(27):从入门到精通的【图像增强】之旅

引言 在深度学习和计算机视觉的世界里&#xff0c;数据是模型训练的基石&#xff0c;其质量与数量直接影响着模型的性能。然而&#xff0c;获取大量高质量的标注数据往往需要耗费大量的时间和资源。正因如此&#xff0c;数据增强技术应运而生&#xff0c;成为了解决这一问题的…

23/76-LeNet

LeNet 早期成功的神经网络。 先使用卷积层来学习图片空间信息。 然后使用全连接层转换到类别空间。 #In[]LeNet,上世纪80年代的产物,最初为了手写识别设计from d2l import torch as d2l import torch from torch import nn from torch.nn.modules.loss import CrossEntropyLos…

Git中,版本库和远程库有什么区别

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

【jupyter添加虚拟环境内核(pytorch、tensorflow)- 实操可行】

jupyter添加虚拟环境内核&#xff08;pytorch、tensorflow&#xff09;- 实操可行 1、查看当前状态(winR&#xff0c;cmd进入之后)2、激活虚拟环境并进入3、安装ipykernel5、完整步骤代码总结6、进入jupyter 添加pytorch、tensorflow内核操作相同&#xff0c;以下内容默认已经安…

IP定位技术在网络安全行业的探索

随着互联网的普及和深入生活&#xff0c;网络安全问题日益受到人们的关注。作为网络安全领域的重要技术&#xff0c;IP定位技术正逐渐成为行业研究的热点。本文将深入探讨IP定位技术在网络安全行业的应用和探索。 一、IP定位技术的概述 IP定位技术是通过IP地址来确定设备地理位…

muduo网络库剖析——通道Channel类

muduo网络库剖析——通道Channel类 前情从muduo到my_muduo 概要事件种类channel 框架与细节成员函数细节实现使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库&#xff0c;考虑的肯定是众多情况是否可以高效满足&#xff1b;而作为学习者&#x…

RK3399平台入门到精通系列讲解(硬件篇)常用的硬件工具介绍

🚀返回总目录 文章目录 一、万⽤表1.1、测量交流和直流电压1.2、测量交流和直流电流二、逻辑分析仪三、示波器作为⼀名嵌⼊式开发⼯程师,是有必要对各类常⽤的硬件⼯具有⼀定了解的,你可以不懂怎么使⽤它,但你必须知道它是什么,有什么⽤,在什么时候可以⽤得上。 一、万…

自动驾驶中的坐标系

自动驾驶中的坐标系 自动驾驶中的坐标系 0.引言1.相机传感器坐标系2.激光雷达坐标系3.车体坐标系4.世界坐标系4.1.地理坐标系4.2.投影坐标系4.2.1.投影方式4.2.2.墨卡托(Mercator)投影4.2.3.高斯-克吕格(Gauss-Kruger)投影4.2.4.通用横轴墨卡托UTM&#xff08;UniversalTransve…