Azure 机器学习:使用 Azure 机器学习 CLI、SDK 和 REST API 训练模型

目录

    • 环境准备
      • 克隆示例存储库
    • 示例案例
    • 在云中训练
      • 1.连接到工作区
        • Python
        • Azure CLI
        • REST API
      • 2. 创建用于训练的计算资源
      • 4. 提交训练作业
        • Python
        • Azure CLI
        • REST API
    • 注册已训练的模型
        • Python
        • Azure CLI
        • REST API

Azure 机器学习提供了多种提交 ML 训练作业的方法。 在本文中,你将了解如何使用 Azure 机器学习 CLI、SDK 和 REST API 训练模型

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

环境准备

  • Azure 订阅。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 试用免费版或付费版 Azure 机器学习。
  • Azure 机器学习工作区。 如果没有,可以使用创建资源以开始使用一文中的步骤。

若要使用 SDK 信息,请安装适用于 Python 的 Azure 机器学习 SDK v2。

若要使用 CLI 信息,请安装适用于机器学习的 Azure CLI 和扩展。

若要使用 REST API 信息,需要以下项:

  • 工作区中的服务主体。 管理 REST 请求使用服务主体身份验证。

  • 服务主体身份验证令牌。 请按照检索服务主体身份验证令牌中的步骤检索此令牌。

  • curl 实用工具。 在适用于 Linux 的 Windows 子系统或任何 UNIX 分发版中均已提供了 [curl]程序。

克隆示例存储库

本文中的代码片段基于 Azure 机器学习示例 GitHub 存储库中的示例。 若要将存储库克隆到开发环境,请使用以下命令:

git clone --depth 1 https://github.com/Azure/azureml-examples

示例案例

本文中的示例使用鸢尾花数据集来训练 MLFlow 模型。

在云中训练

在云中训练时,必须连接到 Azure 机器学习工作区并选择将用于运行训练作业的计算资源。

1.连接到工作区

使用Python时,若要连接到工作区,需要提供标识符参数 - 订阅、资源组和工作区名称。 你将在 azure.ai.ml 命名空间的 MLClient 中使用这些详细信息来获取所需 Azure 机器学习工作区的句柄。 若要进行身份验证,请使用[默认 Azure 身份验证]。 请查看此示例,了解有关如何配置凭据和连接到工作区的更多详细信息。

Python
# Python代码
#import required libraries
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential

#Enter details of your Azure Machine Learning workspace
subscription_id = '<SUBSCRIPTION_ID>'
resource_group = '<RESOURCE_GROUP>'
workspace = '<AZUREML_WORKSPACE_NAME>'

#connect to the workspace
ml_client = MLClient(DefaultAzureCredential(), subscription_id, resource_group, workspace)
Azure CLI

使用 Azure CLI 时,需要提供标识符参数 - 订阅、资源组和工作区名称。 尽管可以为每个命令指定这些参数,但你也可以设置将用于所有命令的默认值。 使用以下命令设置默认值。 将 <subscription ID><Azure Machine Learning workspace name><resource group> 替换为配置的值:

# Azure CLI
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
REST API

本文中的 REST API 示例使用 $SUBSCRIPTION_ID$RESOURCE_GROUP$LOCATION$WORKSPACE 占位符。 将占位符替换为自己的值,如下所示:

  • $SUBSCRIPTION_ID:Azure 订阅 ID。
  • $RESOURCE_GROUP:包含你的工作区的 Azure 资源组。
  • $LOCATION:工作区所在的 Azure 区域。
  • $WORKSPACE:Azure 机器学习工作区的名称。
  • $COMPUTE_NAME:Azure 机器学习计算群集的名称。

管理 REST 请求一个服务主体身份验证令牌。 可使用以下命令检索令牌。 令牌存储在 $TOKEN 环境变量中:

TOKEN=$(az account get-access-token --query accessToken -o tsv)

服务提供商使用 api-version 参数来确保兼容性。 api-version 参数因服务而异。 将 API 版本设置为变量以适应将来的版本:

API_VERSION="2022-05-01"

使用 REST API 进行训练时,必须将数据和训练脚本上传到工作区可以访问的存储帐户。 以下示例获取你的工作区的存储信息,并将其保存到变量中,以便稍后使用:

# Get values for storage account
response=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/datastores?api-version=$API_VERSION&isDefault=true" \
--header "Authorization: Bearer $TOKEN")
AZUREML_DEFAULT_DATASTORE=$(echo $response | jq -r '.value[0].name')
AZUREML_DEFAULT_CONTAINER=$(echo $response | jq -r '.value[0].properties.containerName')
export AZURE_STORAGE_ACCOUNT=$(echo $response | jq -r '.value[0].properties.accountName')

2. 创建用于训练的计算资源

Azure 机器学习计算群集是一种完全托管的计算资源,可用于运行训练作业。 在以下示例中,创建了名为 cpu-compute 的计算群集。

# Python
from azure.ai.ml.entities import AmlCompute

# specify aml compute name.
cpu_compute_target = "cpu-cluster"

try:
    ml_client.compute.get(cpu_compute_target)
except Exception:
    print("Creating a new cpu compute target...")
    compute = AmlCompute(
        name=cpu_compute_target, size="STANDARD_D2_V2", min_instances=0, max_instances=4
    )
    ml_client.compute.begin_create_or_update(compute).result()
# Azure CLI
az ml compute create -n cpu-cluster --type amlcompute --min-instances 0 --max-instances 4
# REST API
curl -X PUT \
  "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME?api-version=$API_VERSION" \
  -H "Authorization:Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "location": "'$LOCATION'",
    "properties": {
        "computeType": "AmlCompute",
        "properties": {
            "vmSize": "Standard_D2_V2",
            "vmPriority": "Dedicated",
            "scaleSettings": {
                "maxNodeCount": 4,
                "minNodeCount": 0,
                "nodeIdleTimeBeforeScaleDown": "PT30M"
            }
        }
    }
}'

4. 提交训练作业

Python

若要运行此脚本,你将使用 ./sdk/python/jobs/single-step/lightgbm/iris/src/ 下用于执行 main.py Python 脚本的 command。 该命令通过将其作为 job 提交到 Azure 机器学习来运行。
若要使用无服务器计算,请删除此代码中的 compute="cpu-cluster"

# Python
from azure.ai.ml import command, Input

# define the command
command_job = command(
    code="./src",
    command="python main.py --iris-csv ${{inputs.iris_csv}} --learning-rate ${{inputs.learning_rate}} --boosting ${{inputs.boosting}}",
    environment="AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu@latest",
    inputs={
        "iris_csv": Input(
            type="uri_file",
            path="https://azuremlexamples.blob.core.windows.net/datasets/iris.csv",
        ),
        "learning_rate": 0.9,
        "boosting": "gbdt",
    },
    compute="cpu-cluster",
)
# submit the command
returned_job = ml_client.jobs.create_or_update(command_job)
# get a URL for the status of the job
returned_job.studio_url

在上述示例中,你配置了以下内容:

  • code - 用于运行命令的代码所在的路径
  • command - 需要运行的命令
  • environment - 运行训练脚本所需的环境。 在此示例中,我们使用 Azure 机器学习所提供的名为 AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu 的精选或现成环境。 通过使用 @latest 指令来使用此环境的最新版本。 你还可以通过指定基本 docker 映像并为其指定 conda yaml 来使用自定义环境。
  • inputs - 命令的输入字典,采用名称值对的形式。 键是作业上下文中的输入名称,值是输入值。 在 command 中使用 ${{inputs.<input_name>}} 表达式引用输入。 若要将文件或文件夹用作输入,可以使用 Input 类。 有关详细信息,请参阅 SDK 和 CLI v2 表达式。

提交作业时,会向 Azure 机器学习工作室中的作业状态返回一个 URL。 使用工作室 UI 查看工作进度。 你还可以使用 returned_job.status 检查作业的当前状态。

Azure CLI

此示例中使用的 az ml job create 命令需要 YAML 作业定义文件。 此示例中使用的文件内容如下:

备注

若要使用无服务器计算,请删除此代码中的 compute: azureml:cpu-cluster"

$schema: https://azuremlschemas.azureedge.net/latest/commandJob.schema.json
code: src
command: >-
  python main.py 
  --iris-csv ${{inputs.iris_csv}}
  --C ${{inputs.C}}
  --kernel ${{inputs.kernel}}
  --coef0 ${{inputs.coef0}}
inputs:
  iris_csv: 
    type: uri_file
    path: wasbs://datasets@azuremlexamples.blob.core.windows.net/iris.csv
  C: 0.8
  kernel: "rbf"
  coef0: 0.1
environment: azureml:AzureML-sklearn-0.24-ubuntu18.04-py37-cpu@latest
compute: azureml:cpu-cluster
display_name: sklearn-iris-example
experiment_name: sklearn-iris-example
description: Train a scikit-learn SVM on the Iris dataset.

上面配置了:

  • code - 用于运行命令的代码所在的路径
  • command - 需要运行的命令
  • inputs - 命令的输入字典,采用名称值对的形式。 键是作业上下文中的输入名称,值是输入值。 在 command 中使用 ${{inputs.<input_name>}} 表达式引用输入。 有关详细信息,请参阅 SDK 和 CLI v2 表达式。
  • environment - 运行训练脚本所需的环境。 在此示例中,我们使用 Azure 机器学习所提供的名为 AzureML-sklearn-0.24-ubuntu18.04-py37-cpu 的精选或现成环境。 通过使用 @latest 指令来使用此环境的最新版本。 你还可以通过指定基本 docker 映像并为其指定 conda yaml 来使用自定义环境。 若要提交作业,请使用以下命令。 训练作业的运行 ID(名称)存储在 $run_id 变量中:
run_id=$(az ml job create -f jobs/single-step/scikit-learn/iris/job.yml --query name -o tsv)

你可以使用存储的运行 ID 返回有关作业的信息。 --web 参数打开 Azure 机器学习工作室 Web UI,你可在其中深入了解作业的详细信息:

az ml job show -n $run_id --web

提交作业时,必须将训练脚本和数据上传到 Azure 机器学习工作区可访问的云存储位置。

  1. 使用以下 Azure CLI 命令上传训练脚本。 该命令指定包含训练所需文件的目录,而不是指定单个文件。 若要改用 REST 来上传数据,请参阅放置 Blob 参考:

    az storage blob upload-batch -d $AZUREML_DEFAULT_CONTAINER/testjob -s cli/jobs/single-step/scikit-learn/iris/src/ --account-name $AZURE_STORAGE_ACCOUNT
    
  2. 创建对训练数据的版本化参考。 在此示例中,数据已在云中,位于 https://azuremlexamples.blob.core.windows.net/datasets/iris.csv。 有关引用数据的详细信息,请参阅 Azure 机器学习中的数据:

    DATA_VERSION=$RANDOM
    curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/data/iris-data/versions/$DATA_VERSION?api-version=$API_VERSION" \
    --header "Authorization: Bearer $TOKEN" \
    --header "Content-Type: application/json" \
    --data-raw "{
            \"properties\": {
            \"description\": \"Iris dataset\",
            \"dataType\": \"uri_file\",
            \"dataUri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
        }
    }"
    
  3. 注册对训练脚本的版本化参考,用于作业。 在此示例中,脚本位置是你在步骤 1 中将数据上传到的默认存储帐户和容器。 将返回带版本训练代码的 ID 并将其存储在 $TRAIN_CODE 变量中:

    TRAIN_CODE=$(curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/codes/train-lightgbm/versions/1?api-version=$API_VERSION" \
    --header "Authorization: Bearer $TOKEN" \
    --header "Content-Type: application/json" \
    --data-raw "{
            \"properties\": {
            \"description\": \"Train code\",
            \"codeUri\": \"https://$AZURE_STORAGE_ACCOUNT.blob.core.windows.net/$AZUREML_DEFAULT_CONTAINER/testjob\"
        }
    }" | jq -r '.id')
    
  4. 创建群集将用于运行训练脚本的环境。 在此示例中,我们使用 Azure 机器学习所提供的名为 AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu 的精选或现成环境。 以下命令检索环境版本列表,其中最新版本位于集合顶部。 jq 用于检索最新 ([0]) 版本的 ID,然后将其存储到 $ENVIRONMENT 变量中。

    ENVIRONMENT=$(curl --location --request GET "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/environments/AzureML-lightgbm-3.2-ubuntu18.04-py37-cpu/versions?api-version=$API_VERSION" --header "Authorization: Bearer $TOKEN" | jq -r .value[0].id)
    
  5. 最后,提交作业。 以下示例介绍如何提交作业,以及如何参考训练代码 ID、环境 ID、输入数据的 URL 和计算群集的 ID。 作业输出位置将存储在 $JOB_OUTPUT 变量中:

REST API
```
run_id=$(uuidgen)
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/jobs/$run_id?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
    \"properties\": {
        \"jobType\": \"Command\",
        \"codeId\": \"$TRAIN_CODE\",
        \"command\": \"python main.py --iris-csv \$AZURE_ML_INPUT_iris\",
        \"environmentId\": \"$ENVIRONMENT\",
        \"inputs\": {
            \"iris\": {
                \"jobInputType\": \"uri_file\",
                \"uri\": \"https://azuremlexamples.blob.core.windows.net/datasets/iris.csv\"
            }
        },
        \"experimentName\": \"lightgbm-iris\",
        \"computeId\": \"/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/computes/$COMPUTE_NAME\"
    }
}"
```

注册已训练的模型

以下示例介绍如何在 Azure 机器学习工作区中注册模型。

Python
from azure.ai.ml.entities import Model
from azure.ai.ml.constants import AssetTypes

run_model = Model(
    path="azureml://jobs/{}/outputs/artifacts/paths/model/".format(returned_job.name),
    name="run-model-example",
    description="Model created from run.",
    type=AssetTypes.MLFLOW_MODEL
)

ml_client.models.create_or_update(run_model)
Azure CLI
az ml model create -n sklearn-iris-example -v 1 -p runs:/$run_id/model --type mlflow_model
REST API
curl --location --request PUT "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.MachineLearningServices/workspaces/$WORKSPACE/models/sklearn/versions/1?api-version=$API_VERSION" \
--header "Authorization: Bearer $TOKEN" \
--header "Content-Type: application/json" \
--data-raw "{
    \"properties\": {
        \"modelType\": \"mlflow_model\",
        \"modelUri\":\"runs:/$run_id/model\"
    }
}"

关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用 Kubernetes 降本增效?EasyMR 基于 Kubernetes 部署的探索实践

Kubernetes 是用于编排容器化应用程序的云原生系统。最初由 Google 创建&#xff0c;如今由 Cloud Native Computing Foundation&#xff08;CNCF&#xff09;维护更新。 Kubernetes 是市面上最受欢迎的集群管理解决方案之一。它自动化容器化应用程序的部署、扩展和管理&#…

解决公网下,k8s calico master节点无法访问node节点创建的pod

目的&#xff1a;解决pod部署成功后&#xff0c;只能在node节点访问&#xff0c;而master节点无法访问 原因&#xff1a;集群搭建时&#xff0c;没有配置公网进行kubectl操作&#xff0c;从而导致系统默认node节点&#xff0c;使用内网IP加入k8s集群&#xff01;如下&#xff…

使用html2canvas转换table为图片时合并单元格rowspan失效,无边框显示问题解决(React实现)

最近使用 html2canvas导出Table表单为图片&#xff0c;但是转换出的图片被合并的单元格没有显示边框 查了原因是因为我为tr设置了背景色&#xff0c;然后td设置了rowspan&#xff0c;设置了rowspan的单元格就会出现边框不显示的问题。 解决方法就是取消tr的背景色&#xff0c;然…

抖音店铺所有商品数据接口(douyin.item_search_shop)

抖音店铺所有商品数据接口可以用于获取抖音店铺的所有商品数据&#xff0c;包括商品的标题、价格、库存、销量、评价等信息。通过该接口&#xff0c;开发者可以在自己的应用程序或网站中展示抖音店铺的商品信息&#xff0c;提升用户体验和购物决策效率。 此外&#xff0c;抖音…

苹果电脑杀毒软件cleanmymac2024

苹果电脑怎么杀毒&#xff1f;这个问题自从苹果电脑变得越来越普及&#xff0c;苹果电脑的安全性问题也逐渐成为我们关注的焦点。虽然苹果电脑的安全性相对较高&#xff0c;但仍然存在着一些潜在的威胁&#xff0c;比如流氓软件窥探隐私和恶意软件等。那么&#xff0c;苹果电脑…

这么好看的马面裙 ,女儿穿上不要太美了

红色小翻领&#xff0c;上身米白色金貂绒面料精细顺滑非常有质感 另外还有全手工定制的盘口裙子用的是仿宋代宋锦的织金面料 制作工艺非常复杂很重工的一件衣服 出门保证会被夸&#xff01;&#xff01;

叙永微公益:开展“活水计划-益童成长守护”周末陪伴活动

&#xff08;韩熙 林梅图/文&#xff09;2023年11月12日&#xff0c;叙永县微公益协会的志愿者们早早地驱车前往县内的孤困儿童家庭&#xff0c;与他们共同度过一个充实而温馨的周末。志愿者们不仅为孩子们带来了生活物资、零食、玩具等礼物&#xff0c;更重要的是&#xff0c;…

用Python制作截图小工具

Python编程语言允许我们执行各种任务&#xff0c;所有这些都是在简单模块和短小精悍的代码的帮助下完成的。在Python的帮助下进行屏幕截图就是这样一项任务。 Python为我们提供了许多模块&#xff0c;使我们能够执行不同的任务。有多种方法可以使用Python及其库进行屏幕截图。…

【linux】查看CPU的使用率

命令1&#xff1a;top top 总体系统信息 uptime&#xff1a;系统的运行时间和平均负载。tasks&#xff1a;当前运行的进程和线程数目。CPU&#xff1a;总体 CPU 使用率和各个核心的使用情况。内存&#xff08;Memory&#xff09;&#xff1a;总体内存使用情况、可用内存和缓存…

期望、方差

一、期望和方差的定义 随机变量(Random Variable) X 是一个映射&#xff0c;把随机试验的结果与实数建立起了一一对应的关系。而期望与方差是随机变量的两个重要的数字特征。 1. 期望(Expectation, or expected value) 期望是度量一个随机变量取值的集中位置或平均水平的最基…

Android开发:(AndroidStudio模拟器)如何将模拟器语言设置为中文 模拟器输入法更改为中文输入 键盘输入中文

文章目录 Android开发模拟器设置将模拟器语言设置为中文输入法中文的设置 Android开发模拟器设置 将模拟器语言设置为中文 第一步&#xff1a;打开模拟器后&#xff0c;上滑打开下面的设置图标。 第二步&#xff1a;找到 System (系统) &#xff0c;点击进入。 第三步&am…

6.docker运行mysql容器-理解容器数据卷

运行mysql容器-理解容器数据卷 1.什么是容器数据卷2.如何使用容器数据卷2.1 数据卷挂载命令2.2 容器数据卷的继承2.3 数据卷的读写权限2.4 容器数据卷的小实验&#xff08;加深理解&#xff09;2.4.1 启动挂载数据卷的centos容器2.4.2 启动后&#xff0c;在宿主机的data目录下会…

【仿真动画】ABB IRB 8700 机器人搬运(ruckig在线轨迹生成)动画欣赏

场景 动画 一、IRB 8700简介 二、动画脚本重点分析 2.1 sim.moveToPose 通过在两个 poses 之间执行插值&#xff0c;使用 Ruckig 在线轨迹生成器生成对象运动数据。该函数可以通过处理 4 个运动变量&#xff08;x、y、z 和两个姿势之间的角度&#xff09;或单个运动变量&#…

Transformer原理详解

前言&#xff1a;好久没有用了&#xff0c;我已经快忘记了自己还有一个CSDN账号了。 在某位不知名好友的提醒下&#xff0c;终于拾起来了&#xff0c;自己也从大二转变成了研二。 目前研究方向主要为&#xff1a;时间序列预测&#xff0c;自然语言处理&#xff0c;智慧医疗 欢迎…

git 指定时间代码统计

指定时间代码统计 用法 13 - 17 号 代码情况 近一周 git log --since2023-11-13 00:00:00 --until2023-11-17 23:00:00 --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s,total lines: %s\n&…

map和set的简易封装(纯代码)

RBTree.h #pragma once#include<iostream> #include<vector> using namespace std;enum colar { red,black };template<class T>//有效参数就一个 struct RBTreeNode {RBTreeNode(const T& data):_left(nullptr), _right(nullptr), _parent(nullptr)…

Vue bus事件总线的原理与使用

这里写自定义目录标题 一、 Vue Bus 总线原理二、Vue bus的使用1、创建总线&#xff1a; 在 Vue 应用中&#xff0c;可以创建一个 Vue 实例作为总线&#xff0c;用于管理事件。2、事件的发布与订阅&#xff1a; 组件通过订阅事件来监听总线上的消息&#xff0c;而其他组件则通过…

(免费)双相情感障碍筛查MDQ 在线测试双向情感障碍

MDQ用于筛查双相障碍&#xff0c;主要包含13个关于双相障碍症状的是非问题&#xff0c;当前测试采用的量表为2010年杨海晨博士翻译版。该量表为目前世界范围内最常用的双相障碍筛查量表&#xff0c;目前在精神科门诊最为常用的量表之一。 双向情感障碍筛查量表&#xff0c;也叫…

Linux(多用户下)查看cuda、cudnn版本、查看已经安装的cuda版本相关命令

查看已经安装的CUDA多个版本 linux 中cuda默认安装在/usr/local目录中&#xff1a; -可以使用命令&#xff1a; ls -l /usr/local | grep cuda查看该目录下有哪些cuda版本&#xff1a; 如果输出&#xff1a; lrwxrwxrwx 1 root root 21 Dec 17 2021 cuda -> /usr/loc…

监控直流防雷浪涌保护器综合方案

监控系统是一种广泛应用于安防、交通、工业、军事等领域的信息系统&#xff0c;它通过摄像机、传输线路、监控中心等设备&#xff0c;实现对目标区域的实时监视和控制。然而&#xff0c;监控系统也面临着雷电的威胁&#xff0c;雷电可能通过直击雷、感应雷、雷电波侵入等途径&a…