AI模型部署初认识

news2024/10/6 17:23:39

AI部署这个词儿大家肯定不陌生,可能有些小伙伴还不是很清楚这个是干嘛的,但总归是耳熟能详了。

近些年来,在深度学习算法已经足够卷卷卷之后,深度学习的另一个偏向于工程的方向–部署工业落地,才开始被谈论的多了起来。当然这也是大势所趋,毕竟AI算法那么多,如果用不着,只在学术圈搞研究的话没有意义。因此很多AI部署相关行业和AI芯片相关行业也在迅速发展,现在虽然已经2021年了,但我认为AI部署相关的行业还未到头,AI也远远没有普及。

简单收集了一下知乎关于“部署”话题去年和今年的一些提问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述提问的都是明白人,随着人工智能逐渐普及,使用神经网络处理各种任务的需求越来越多,如何在生产环境中快速、稳定、高效地运行模型,成为很多公司不得不考虑的问题。不论是通过提升模型速度降低latency提高用户的使用感受,还是加速模型降低服务器预算,都是很有用的,公司也需要这样的人才。

在经历了算法的神仙打架、诸神黄昏、灰飞烟灭等等这些知乎热搜后。AI部署工业落地这块似乎还没有那么卷…相比AI算法来说,AI部署的入坑机会更多些。

聊聊AI部署

AI部署的基本步骤:

  • 训练一个模型,也可以是拿一个别人训练好的模型
  • 针对不同平台对生成的模型进行转换,也就是俗称的parse、convert,即前端解释器
  • 针对转化后的模型进行优化,这一步很重要,涉及到很多优化的步骤
  • 在特定的平台(嵌入端或者服务端)成功运行已经转化好的模型
  • 在模型可以运行的基础上,保证模型的速度、精度和稳定性

就这样,虽然看起来没什么,但需要的知识和经验还是很多的。

因为实际场景中我们使用的模型远远比ResNet50要复杂,我们部署的环境也远远比实验室的环境条件更苛刻,对模型的速度精度需求也比一般demo要高。

对于硬件公司来说,需要将深度学习算法部署到性能低到离谱的开发板上,因为成本能省就省。在算法层面优化模型是一方面,但更重要的是从底层优化这个模型,这就涉及到部署落地方面的各个知识(手写汇编算子加速、算子融合等等);对于软件公司来说,我们往往需要将算法运行到服务器上,当然服务器可以是布满2080TI的高性能CPU机器,但是如果QPS请求足够高的话,需要的服务器数量也是相当之大的。这个要紧关头,如果我们的模型运行的足够快,可以省机器又可以腾一些buffer上新模型岂不很爽,这个时候也就需要优化模型了,其实优化手段也都差不多,只不过平台从arm等嵌入式端变为gpu等桌面端了。

作为AI算法部署工程师,你要做的就是将训练好的模型部署到线上,根据任务需求,速度提升2-10倍不等,还需要保证模型的稳定性。

是不是很有挑战性?

需要什么技术呢?

需要一些算法知识以及扎实的工程能力。

老潘认为算法部署落地这个方向是比较踏实务实的方向,相比设计模型提出新算法,对于咱们这种并不天赋异禀来说,只要肯付出,收获是肯定有的(不像设计模型,那些巧妙的结果设计不出来就是设计不出来你气不气)。

其实算法部署也算是开发了,不仅需要和训练好的模型打交道,有时候也会干一些粗活累活(也就是dirty work),自己用C++、cuda写算子(预处理、op、后处理等等)去实现一些独特的算子。也需要经常调bug、联合编译、动态静态库混搭等等。

算法部署最常用的语言是啥,当然是C++了。如果想搞深度学习AI部署这块,C++是逃离不了的。

所以,学好C++很重要,起码能看懂各种关于部署精巧设计的框架(再列一遍:Caffe、libtorch、ncnn、mnn、tvm、OpenVino、TensorRT,不完全统计,我就列过我用过的)。当然并行计算编程语言也可以学一个,针对不同的平台而不同,可以先学学CUDA,资料更多一些,熟悉熟悉并行计算的原理,对以后学习其他并行语言都有帮助。

系统的知识嘛,还在整理,还是建议实际中用到啥再看啥,或者有项目在push你,这样学习的更快一些。

可以选择上手的项目:

  • 好用的开源推理框架:Caffe、NCNN、MNN、TVM、OpenVino
  • 好用的半开源推理框架:TensorRT
  • 好用的开源服务器框架:triton-inference-server
  • 基础知识:计算机原理、编译原理等

在这里插入图片描述

AI大模型学习的理论基础

数学基础:

  • 线性代数:AI 大模型中大量使用向量和矩阵运算,如矩阵乘法、向量点积等,用于表示和操作数据。
  • 概率论与统计学:模型中的概率分布、随机变量和参数估计等都需要概率论和统计学的知识。
  • 微积分:优化算法中的梯度计算和反向传播等都涉及到微积分的概念。

算法原理:

  • 反向传播:这是深度学习中常用的算法,用于更新模型的参数,通过计算损失函数的梯度来调整模型。
  • 随机梯度下降:一种常用的优化方法,通过不断迭代更新参数来最小化损失函数。
  • 激活函数:用于对神经元的输出进行非线性变换,增加模型的表达能力。

模型架构设计:

  • 卷积神经网络(CNN):擅长处理图像、视频等具有空间结构的数据,通过卷积操作提取特征。
  • 循环神经网络(RNN):适用于处理序列数据,如自然语言处理中的文本。
  • Transformer:一种全新的架构,在自然语言处理中取得了巨大成功,通过自注意力机制捕捉长距离依赖关系。

在大规模数据处理中的优势:

  • 能够处理海量的数据,通过分布式训练等技术可以加速训练过程。
  • 可以自动学习数据中的模式和特征,不需要人工设计特征。
  • 模型的泛化能力强,可以应用于各种不同的任务和领域。

挑战:

  • 模型的复杂度高,需要大量的计算资源和时间来训练。
  • 容易过拟合,需要进行适当的正则化和超参数调整。
  • 解释性较差,难以理解模型的决策过程。

在这里插入图片描述

AI模型部署方法

在AI深度学习模型的训练中,一般会用Python语言实现,原因是其灵活、可读性强。但在AI模型实际部署中,主要会用到C++,原因在于其语言自身的高效性。

对于AI模型的部署,有这几种方法可供选择:

  • 使用 C++ 实现深度学习模型(★★★)
    可以使用 C++ 编写自己的深度学习库或框架,但这需要您具有深入的数学和计算机科学知识。此外,也可以使用现有的开源 C++ 框架,如 TensorRT 和 OpenCV DNN 等。

  • 导出深度学习模型到应用平台(★★)
    许多深度学习框架支持将训练好的模型导出为 C++ 可以读取的格式,如 ONNX、TensorFlow Lite、Caffe2 等。这样可以在不重新训练模型的情况下,在 C++ 代码中加载和运行模型。

  • 使用 C++ 库来加载和运行深度学习模型(★)
    许多开发人员使用现有的 C++ 库来加载和运行深度学习模型,如 OpenCV、Dlib、Libtorch 等。这些库提供了一些方便的函数和接口,可以轻松地集成到您的 C++ 项目中。

在这里插入图片描述

AI模型部署框架

模型部署常见的推理框架有:ONNX、NCNN、OpenVINO、 TensorRT、Mediapipe。

  • ONNX
    官网:https://onnx.ai/
    github:https://github.com/onnx/onnx

开放神经网络交换ONNX(Open Neural Network Exchange)是一套表示深度神经网络模型的开放格式,由微软和Facebook于2017推出,然后迅速得到了各大厂商和框架的支持。通过短短几年的发展,已经成为表示深度学习模型的实际标准,并且通过ONNX-ML,可以支持传统非神经网络机器学习模型,大有一统整个AI模型交换标准的趋势。

无论使用什么样的训练框架来训练模型(比如TensorFlow/Pytorch/OneFlow/Paddle),你都可以在训练后将这些框架的模型统一转为ONNX存储。ONNX文件不仅存储了神经网络模型的权重,还存储了模型的结构信息、网络中各层的输入输出等一些信息。目前,ONNX主要关注在模型预测方面(inferring),将转换后的ONNX模型,转换成我们需要使用不同框架部署的类型,可以很容易的部署在兼容ONNX的运行环境中。

  • NCNN
    github:https://github.com/Tencent/ncnn

ncnn 是一个为手机端极致优化的高性能神经网络前向计算框架,也是腾讯优图实验室成立以来的第一个开源项目。ncnn 从设计之初深刻考虑手机端的部署和使用,无第三方依赖,跨平台,手机端 CPU 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 App。

从NCNN的发展矩阵可以看出,NCNN覆盖了几乎所有常用的系统平台,尤其是在移动平台上的适用性更好,在Linux、Windows和Android、以及iOS、macOS平台上都可以使用GPU来部署模型。

  • OpenVINO
    官网:https://docs.openvino.ai/latest/home.html
    github:https://github.com/openvinotoolkit/openvino

OpenVINO是一种可以加快高性能计算机视觉和深度学习视觉应用开发速度的工具套件,支持各种英特尔平台的硬件加速器上进行深度学习,并且允许直接异构执行。OpenVINO™工具包是用于快速开发应用程序和解决方案的综合工具包,可解决各种任务,包括模拟人类视觉,自动语音识别,自然语言处理,推荐系统等。可在英特尔®硬件上扩展计算机视觉和非视觉工作负载,从而最大限度地提高性能。

OpenVINO在模型部署前,首先会对模型进行优化,模型优化器会对模型的拓扑结构进行优化,去掉不需要的层,对相同的运算进行融合、合并以加快运算效率,减少内存拷贝;FP16、INT8量化也可以在保证精度损失很小的前提下减小模型体积,提高模型的性能。在部署方面,OpenVIVO的开发也是相对比较简单的,提供了C、C++和python3种语言编程接口。

  • TensorRT
    官网:https://developer.nvidia.com/zh-cn/tensorrt
    github:https://github.com/NVIDIA/TensorRT

NVIDIA TensorRT™ 是用于高性能深度学习推理的 SDK。此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高吞吐量。

在推理过程中,基于 TensorRT 的应用程序的执行速度可比 CPU 平台的速度快 40 倍。借助 TensorRT,您可以优化在所有主要框架中训练的神经网络模型,精确校正低精度,并最终将模型部署到超大规模数据中心、嵌入式或汽车产品平台中。

TensorRT 以 NVIDIA 的并行编程模型 CUDA 为基础构建而成,可帮助您利用 CUDA-X 中的库、开发工具和技术,针对人工智能、自主机器、高性能计算和图形优化所有深度学习框架中的推理。

  • Mediapipe
    官网:https://google.github.io/mediapipe/
    github:https://github.com/google/mediapipe

MediaPipe是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。作为一款跨平台框架,MediaPipe 不仅可以被部署在服务器端,更可以在多个移动端 (安卓和苹果 iOS)和嵌入式平台(Google Coral 和树莓派)中作为设备端机器学习推理 (On-device Machine Learning Inference)框架。

除了上述的特性,MediaPipe 还支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同时,在移动端和嵌入式平台,MediaPipe 也支持设备本身的 GPU 加速。

在这里插入图片描述

如何选择

  1. ONNXRuntime 是可以运行在多平台 (Windows,Linux,Mac,Android,iOS) 上的一款推理框架,它接受 ONNX 格式的模型输入,支持 GPU 和 CPU 的推理。唯一不足就是 ONNX 节点粒度较细,推理速度有时候比其他推理框架如 TensorRT 较低。
  2. NCNN是针对手机端的部署。优势是开源较早,有非常稳定的社区,开源影响力也较高。
  3. OpenVINO 是 Intel 家出的针对 Intel 出品的 CPU 和 GPU 友好的一款推理框架,同时它也是对接不同训练框架如 TensorFlow,Pytorch,Caffe 等。不足之处可能是只支持 Intel 家的硬件产品。
  4. TensorRT 针对 NVIDIA 系列显卡具有其他框架都不具备的优势,如果运行在 NVIDIA 显卡上, TensorRT 一般是所有框架中推理最快的。一般的主流的训练框架如TensorFlow 和 Pytorch 都能转换成 TensorRT 可运行的模型。当然了,TensorRT 的限制就是只能运行在 NVIDIA 显卡上,同时不开源 kernel。
  5. MediaPipe 不支持除了tensorflow之外的其他深度学习框架。MediaPipe 的主要用例是使用推理模型和其他可重用组件对应用机器学习管道进行快速原型设计。MediaPipe 还有助于将机器学习技术部署到各种不同硬件平台上的演示和应用程序中,为移动、桌面/云、web和物联网设备构建世界级ML解决方案和应用程序。

在这里插入图片描述

AI模型部署平台

AI 模型部署是将训练好的 AI 模型应用到实际场景中的过程。以下是一些常见的 AI 模型部署平台:

  1. 云端部署
    云端部署是最流行的 AI 模型部署方式之一,通常使用云计算平台来托管模型和处理请求。例如,Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP) 等云服务提供商都提供了 AI 模型部署解决方案。

  2. 边缘设备部署
    边缘设备部署是将模型部署到 IoT 设备或嵌入式系统等边缘设备上的过程。这种部署方式可以减少延迟和网络带宽消耗,并提高隐私性和安全性。

  3. 移动设备部署
    移动设备部署是将 AI 模型部署到移动设备上的过程,允许设备在本地执行推理而不需要依赖网络连接。这种部署方式对于需要快速响应和保护用户隐私的应用非常有用。

  4. 容器化部署
    容器化部署是将 AI 模型封装到一个轻量级的容器中,然后在不同的环境中进行部署和运行。容器化部署可以提高可移植性和灵活性,并简化部署过程。

AI大模型的训练与优化
训练和优化大规模机器学习模型确实是一个具有挑战性的任务,以下是一些有效的方法和技巧:

  1. 计算资源分配:合理分配计算资源,例如使用 GPU 加速训练、分布式训练等技术,以提高训练效率。
  2. 参数调优:通过网格搜索、随机搜索或基于启发式的方法来调整模型的超参数,如学习率、正则化参数等。
  3. 正则化方法:应用正则化技术,如 L1、L2 正则化或dropout,以防止过拟合并提高模型的泛化能力。
  4. 模型压缩:采用压缩技术,如剪枝、量化等,减少模型的参数量和计算量,使其能够在资源有限的设备上运行。
  5. 数据增强:通过数据增强技术,如翻转、旋转、缩放等,增加训练数据的多样性,提高模型的鲁棒性。
  6. 梯度裁剪:限制梯度的范数,以避免梯度爆炸或消失问题。
  7. 早停法:根据验证集上的性能,在合适的时候停止训练,避免过拟合。
  8. 迁移学习:利用已有的预训练模型,在新的任务上进行微调,加快训练过程。
  9. 并行计算:使用多线程、多进程或分布式计算框架,加速模型的训练。
  10. 混合精度:在训练中使用低精度数据类型,如 FP16,减少内存消耗和计算时间。

在这里插入图片描述

未来发展趋势与挑战

AI 大模型学习的未来发展一些关键的趋势包括:

  1. 更大规模和更复杂的模型:随着计算能力的提高,我们将看到更大型、更复杂的模型出现,能够处理更庞大的数据和更复杂的任务。
  2. 多模态学习:结合多种数据形式,如图像、音频、文本等,进行综合学习,提高模型的理解能力。
  3. 可解释性和透明度:提高模型的可解释性,使人们能够更好地理解模型的决策过程。
  4. 分布式训练和边缘计算:利用分布式计算和边缘计算技术,加速模型训练和在边缘设备上的部署。
  5. 与人类的协同合作:AI 与人类将更加紧密地合作,共同解决问题。

然而,当前也面临一些挑战:

  1. 计算资源需求:训练大规模模型需要大量的计算资源,这可能限制其在一些场景中的应用。
  2. 数据隐私和安全:随着数据量的增加,数据隐私和安全问题将变得更加突出。
  3. 伦理和社会影响:需要关注 AI 技术对社会结构、就业等方面的影响。
  4. 技术瓶颈和限制:例如模型的泛化能力、对抗攻击的鲁棒性等方面仍存在挑战。

为了解决这些问题,可以探索以下研究方向:

  1. 高效的模型压缩和优化:减少模型的计算和存储需求,使其更易于部署。
  2. 联邦学习和隐私保护技术:在保护数据隐私的前提下进行模型训练。
  3. 人机协作的设计与研究:探索如何让 AI 与人类更好地协作。
  4. 可解释性方法的研究:提高模型的可解释性,增加人们对模型决策的信任。
  5. 对抗攻击和鲁棒性的研究:增强模型对恶意攻击的抵御能力。

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

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

相关文章

C语言 | Leetcode C语言题解之第456题132模式

题目&#xff1a; 题解&#xff1a; int upper_bound(int* vec, int vecSize, int target) {int low 0, high vecSize - 1;if (vec[high] > target) {return -1;}while (low < high) {int mid (high - low) / 2 low;int num vec[mid];if (num > target) {low m…

IDEA基础开发配置以及和git的联动

1.1方向一&#xff1a;工具介绍 我今天要介绍的就是学习Java大部分情况下都会选择的一款工具-----IDEA&#xff0c;这个和我们熟悉的这个pycharm一样&#xff0c;都是属于这个Jetbrains公司的&#xff0c;虽然我对于这个并不是很了解&#xff0c;但是确实知道一点&#xff0c;…

静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导

将笛卡尔坐标系的电压 [ U x , U y ] [U_x, U_y] [Ux​,Uy​] 通过旋转变换(由锁相环角度 θ P L L \theta_{PLL} θPLL​ 控制)转换为 dq 坐标系下的电压 [ U d , U q ] [U_d, U_q] [Ud​,Uq​]。这个公式是非线性的,因为它涉及到正弦和余弦函数。 图片中的推导过程主要…

一款基于 Java 的可视化 HTTP API 接口快速开发框架,干掉 CRUD,效率爆炸(带私活源码)

平常我们经常需要编写 API&#xff0c;但其实常常只是一些简单的增删改查&#xff0c;写这些代码非常枯燥无趣。 今天给大家带来的是一款基于 Java 的可视化 HTTP API 接口快速开发框架&#xff0c;通过 UI 界面编写接口&#xff0c;无需定义 Controller、Service、Dao 等 Jav…

使用 Python 进行大规模数据处理

在 Python 中&#xff0c;处理大量数据时&#xff0c;效率是非常重要的。当你有一个包含 100 万个元素的列表&#xff0c;每个元素都是一个字典&#xff0c;并且需要将它们转换为 DataFrame 时&#xff0c;Pandas 是一个很好的工具。Pandas 是 Python 数据处理和分析的强大库&a…

一键生成PPT的AI工具-Kimi!

一键生成PPT的AI工具-Kimi&#xff01; 前言介绍Kimi为什么选择Kimi如何使用Kimi在线编辑PPT下载生成的PPT自己编辑 结语 &#x1f600;大家好&#xff01;我是向阳&#x1f31e;&#xff0c;一个想成为优秀全栈开发工程师的有志青年&#xff01; &#x1f4d4;今天不来讨论前后…

yolov5-7.0模型DNN加载函数及参数详解(重要)

yolov5-7.0模型DNN加载函数及参数详解&#xff08;重要&#xff09; 引言yolov5&#xff08;v7.0&#xff09;1&#xff0c;yolov5.h(加载对应模型里面的相关参数要更改)2&#xff0c;main主程序&#xff08;1&#xff09;加载网络&#xff08;2&#xff09;检测推理&#xff0…

超酷!任务栏美化 给任务栏添加一个好看的时钟

如何给任务栏美化&#xff1f;今天我们这个主题就是帮大家美化任务栏&#xff0c;估计很多伙伴都用过任务栏美化工具。任务栏美化是非常有个性化的功能&#xff0c;不但可以让你的任务栏变得漂亮&#xff0c;还可以增加一些非常有创意的功能&#xff0c;比如今天小编要给大家带…

文件共享软件推荐,哪些工具最实用?

预计到2025年文档共享市场将增长至近100亿美金。文件共享软件助力跨区域协作&#xff0c;推荐ZohoWorkDrive、GoogleDrive、DropboxBusiness。软件设计直观&#xff0c;上手易&#xff0c;可保障数据安全&#xff0c;选择时需考虑企业规模、需求及预算。 一、什么是文件共享软件…

linux部署NFS和autofs自动挂载

目录 &#xff08;一&#xff09;NFS&#xff1a; 1. 什么是NFS 2. NFS守护进程 3. RPC服务 4. 原理 5. 部署 5.1 安装NFS服务 5.2 配置防火墙 5.3 创建服务端共享目录 5.4 修改服务端配置文件 (1). /etc/exports (2). nfs.conf 5.5 启动nfs并加入自启 5.6 客户端…

陀螺仪LSM6DSV16X与AI集成(14)----上报匿名上位机

陀螺仪LSM6DSV16X与AI集成.14--上报匿名上位机 概述视频教学样品申请源码下载硬件准备上位机通讯陀螺仪工作方式欧拉角数据的转换数据帧填充校验和计算数据发送演示开启INT中断中断读取传感器数据主程序演示 概述 本文介绍了如何将 LSM6DSV16X 传感器的姿态数据通过匿名通信协…

【Android】Handler消息机制

文章目录 前言概述核心组件概述Android消息机制概述 Android消息机制分析ThreadLocal的工作原理ThreadLocal基础ThreadLocal实现原理 MessageQueueLooperHandler的工作原理总结 前言 本文用于记录Android的消息机制&#xff0c;主要是指Handler的运行机制。部分内容参考自《An…

产品经理都会的ComfyUI搭建指南

最近准备参加一个ComfyUI的活动&#xff0c;发现还没有上手过ComfyUI&#xff0c;于是先部署起来。ComfyUI是一个基于Stable Diffusion开发的UI。比起WebUI表单式交互的简单&#xff0c;ComfyUI主打灵活&#xff0c;Diffusion Model管线中的各个模块如&#xff1a;VAE、Control…

DINOv2: Learning Robust Visual Featureswithout Supervision

Abstract 在自然语言处理方面的模型&#xff0c;可以产生通用视觉特征&#xff08;即无需微调即可跨图像分布和任务工作的特征&#xff09;来极大地简化任何系统中图像的使用。这些模型能够提取出一些可以在不同类型的图像和任务中通用的视觉特征。这意味着不管图像的来源&…

电脑断网或者经常断网怎么办?

1、首先&#xff0c;按一下键盘的win R &#xff0c; 在打开的运行框内输入&#xff1a;cmd 然后按一下回车 或者 点击一下【确定】 2、在命令窗口输入&#xff1a;ipconfig/release , 然后按一下回车 作用&#xff1a;IP释放&#xff0c;相当于把网线拔了重新插上 3、接着…

【D3.js in Action 3 精译_029】3.5 给 D3 条形图加注图表标签(上)

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

C++11之线程

编译环境&#xff1a;Qt join&#xff1a;阻塞当前线程&#xff0c;直到线程函数退出 detach&#xff1a;将线程对象与线程函数分离&#xff0c;线程不依赖线程对象管理 注&#xff1a;join和detach两者必选其一&#xff0c;否则线程对象的回收会影响线程的回收&#xff0c;导致…

MATLAB下的RSSI定位程序,二维平面上的定位,基站数量可自适应

文章目录 引言程序概述程序代码运行结果待定位点、锚点、计算结果显示待定位点和计算结果坐标 引言 随着无线通信技术的发展&#xff0c;基于 R S S I RSSI RSSI&#xff08;接收信号强度指示&#xff09;的方法在定位系统中变得越来越流行。 R S S I RSSI RSSI定位技术特别适…

Vue 插槽全攻略:重塑组件灵活性

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 什么是slot插槽 默认插槽 编译作用域 后备内容 具名插槽 作用域插槽 应…

医药行业的智能合同审查:大模型与AI赋能合规管理

随着医药行业的快速发展&#xff0c;尤其是在全球化背景下&#xff0c;企业在业务拓展、合作协议签订中需要处理大量复杂的合同。合同不仅是业务的法律保障&#xff0c;更是风险管理的重要工具。医药行业合同审查的复杂性源于其严格的合规性要求&#xff0c;包括与政府机构、研…