当前位置: 首页 > news >正文

Azure 机器学习 - 使用Python SDK训练模型

目录

  • 一、环境准备
  • 二、工作区限制
  • 三、什么是计算目标?
  • 四、本地计算机
  • 五、远程虚拟机
  • 六、Apache Spark 池
  • 七、Azure HDInsight
  • 八、Azure Batch
  • 九、Azure Databricks
  • 十、Azure Data Lake Analytics
  • 十一、Azure 容器实例
  • 十二、Kubernetes

了解如何用 SDK v1 将 Azure 计算资源附加到 Azure 机器学习工作区。 然后,可以将这些资源用作机器学习任务中的训练和推理计算目标

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

file

一、环境准备

  • Azure 机器学习工作区。 有关详细信息,请参阅创建工作区资源。

  • 机器学习服务的 Azure CLI 扩展、Azure 机器学习 Python SDK 或 Azure 机器学习 Visual Studio Code 扩展。


二、工作区限制

  • 请勿在工作区中为同一计算创建多个同步附件。 例如,使用两个不同的名称将一个 Azure Kubernetes 服务群集附加到工作区。 每个新附件都会破坏先前存在的附件。

    如果要重新附加计算目标来实现某个目的(例如,更改 TLS 或其他群集配置设置),则必须先删除现有附件。


三、什么是计算目标?

file
使用 Azure 机器学习,可在不同的资源或环境(统称为计算目标)中训练模型。 计算目标可以是本地计算机,也可以是云资源,例如 Azure 机器学习计算、Azure HDInsight 或远程虚拟机。 还可以使用计算目标进行模型部署,如部署模型的位置和方式中所述。


四、本地计算机

使用本地计算机进行训练时,无需创建计算目标。 只需从本地计算机提交训练运行。

使用本地计算机进行推理时,必须安装 Docker。 若要执行部署,请使用 LocalWebservice.deploy_configuration() 来定义 Web 服务将使用的端口。 然后使用通过 Azure 机器学习部署模型中所述的常规部署流程。


五、远程虚拟机

file
Azure 机器学习还支持连接 Azure 虚拟机。 VM 必须是 Azure Data Science Virtual Machine (DSVM)。 此 VM 提供精选的工具和框架用于满足整个机器学习开发生命周期的需求。 有关如何将 DSVM 与 Azure 机器学习配合使用的详细信息,请参阅配置开发环境。

  1. 创建:Azure 机器学习无法为你创建远程 VM。 你需要自行创建 VM,然后将其附加到 Azure 机器学习工作区。 要详细了解如何创建 DSVM,请参阅预配适用于 Linux (Ubuntu) 的 Data Science Virtual Machine。

    Azure 机器学习仅支持运行 Ubuntu 的虚拟机。 创建 VM 或选择现有 VM 时,必须选择使用 Ubuntu 的 VM。

    Azure 机器学习还要求虚拟机具有公共 IP 地址。

  2. 附加:若要附加现有虚拟机作为计算目标,必须提供虚拟机的资源 ID、用户名和密码。 可以使用订阅 ID、资源组名称和 VM 名称按以下字符串格式构造 VM 的资源 ID:/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.Compute/virtualMachines/<vm_name>

    from azureml.core.compute import RemoteCompute, ComputeTarget# Create the compute config 
    compute_target_name = "attach-dsvm"attach_config = RemoteCompute.attach_configuration(resource_id='<resource_id>',ssh_port=22,username='<username>',password="<password>")# Attach the compute
    compute = ComputeTarget.attach(ws, compute_target_name, attach_config)compute.wait_for_completion(show_output=True)
    

    或者,可以使用 Azure 机器学习工作室将 DSVM 附加到工作区。

    请勿在工作区中为同一 DSVM 创建多个同步附件。 每个新附件都会破坏先前存在的附件。

  3. 配置:为 DSVM 计算目标创建运行配置。 Docker 与 conda 用于在 DSVM 上创建和配置训练环境。

    from azureml.core import ScriptRunConfig
    from azureml.core.environment import Environment
    from azureml.core.conda_dependencies import CondaDependencies# Create environment
    myenv = Environment(name="myenv")# Specify the conda dependencies
    myenv.python.conda_dependencies = CondaDependencies.create(conda_packages=['scikit-learn'])# If no base image is explicitly specified the default CPU image "azureml.core.runconfig.DEFAULT_CPU_IMAGE" will be used
    # To use GPU in DSVM, you should specify the default GPU base Docker image or another GPU-enabled image:
    # myenv.docker.enabled = True
    # myenv.docker.base_image = azureml.core.runconfig.DEFAULT_GPU_IMAGE# Configure the run configuration with the Linux DSVM as the compute target and the environment defined above
    src = ScriptRunConfig(source_directory=".", script="train.py", compute_target=compute, environment=myenv) 
    

如果要从工作区中删除(拆离)VM,请使用 RemoteCompute.detach() 方法。

Azure 机器学习不会为你删除 VM。 必须使用 Azure 门户、CLI 或适用于 Azure VM 的 SDK 手动删除 VM。


六、Apache Spark 池

file
通过 Azure Synapse Analytics 与 Azure 机器学习的集成(预览版),你可以附加由 Azure Synapse 提供支持的 Apache Spark 池,以进行交互式数据探索和准备。 借助这种集成,你可使用专用计算大规模地进行数据整理。 有关详细信息,请参阅如何附加由 Azure Synapse Analytics 提供支持的 Apache Spark 池。


七、Azure HDInsight

Azure HDInsight 是用于大数据分析的热门平台。 该平台提供的 Apache Spark 可用于训练模型。

  1. 创建:Azure 机器学习无法为你创建 HDInsight 群集。 你需要自行创建群集,然后将其附加到 Azure 机器学习工作区。 有关详细信息,请参阅在 HDInsight 中创建 Spark 群集。

Azure 机器学习要求 HDInsight 群集具有公共 IP 地址。
创建群集时,必须指定 SSH 用户名和密码。 请记下这些值,因为在将 HDInsight 用作计算目标时需要用到这些值。
创建群集后,使用主机名 clustername-ssh.azurehdinsight.net 连接到该群集,其中,clustername是为该群集提供的名称。

  1. 附加:若要将 HDInsight 群集附加为计算目标,必须提供该 HDInsight 群集的资源 ID、用户名和密码。 可以使用订阅 ID、资源组名称和 HDInsight 群集名称按以下字符串格式构造 HDInsight 群集的资源 ID:/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.HDInsight/clusters/<cluster_name>
    from azureml.core.compute import ComputeTarget, HDInsightComputefrom azureml.exceptions import ComputeTargetExceptiontry:# if you want to connect using SSH key instead of username/password you can provide parameters private_key_file and private_key_passphraseattach_config = HDInsightCompute.attach_configuration(resource_id='<resource_id>',ssh_port=22, username='<ssh-username>', password='<ssh-pwd>')hdi_compute = ComputeTarget.attach(workspace=ws, name='myhdi', attach_configuration=attach_config)except ComputeTargetException as e:print("Caught = {}".format(e.message))hdi_compute.wait_for_completion(show_output=True)

或者,可以使用 Azure 机器学习工作室将 HDInsight 群集附加到工作区。

请勿在工作区中为同一 HDInsight 创建多个同步附件。 每个新附件都会破坏先前存在的附件。

  1. 配置:为 HDI 计算目标创建运行配置。

    from azureml.core.runconfig import RunConfiguration
    from azureml.core.conda_dependencies import CondaDependencies# use pyspark framework
    run_hdi = RunConfiguration(framework="pyspark")# Set compute target to the HDI cluster
    run_hdi.target = hdi_compute.name# specify CondaDependencies object to ask system installing numpy
    cd = CondaDependencies()
    cd.add_conda_package('numpy')
    run_hdi.environment.python.conda_dependencies = cd
    

如果要从工作区中删除(拆离)HDInsight 群集,请使用 HDInsightCompute.detach() 方法。

Azure 机器学习不会为你删除 HDInsight 群集。 必须使用 Azure 门户、CLI 或适用于 Azure HDInsight 的 SDK 将其手动删除。


八、Azure Batch

Azure Batch 用于在云中高效运行大规模并行高性能计算 (HPC) 应用程序。 可以在 Azure 机器学习管道中使用 AzureBatchStep 将作业提交到 Azure Batch 计算机池。

若要将 Azure Batch 附加为计算目标,必须使用 Azure 机器学习 SDK 并提供以下信息:

  • Azure Batch 计算名称:在工作区中用于计算的易记名称
  • Azure Batch 帐户名称:Azure Batch 帐户的名称
  • 资源组:包含 Azure Batch 帐户的资源组。

以下代码演示如何将 Azure Batch 附加为计算目标:

from azureml.core.compute import ComputeTarget, BatchCompute
from azureml.exceptions import ComputeTargetException# Name to associate with new compute in workspace
batch_compute_name = 'mybatchcompute'# Batch account details needed to attach as compute to workspace
batch_account_name = "<batch_account_name>"  # Name of the Batch account
# Name of the resource group which contains this account
batch_resource_group = "<batch_resource_group>"try:# check if the compute is already attachedbatch_compute = BatchCompute(ws, batch_compute_name)
except ComputeTargetException:print('Attaching Batch compute...')provisioning_config = BatchCompute.attach_configuration(resource_group=batch_resource_group, account_name=batch_account_name)batch_compute = ComputeTarget.attach(ws, batch_compute_name, provisioning_config)batch_compute.wait_for_completion()print("Provisioning state:{}".format(batch_compute.provisioning_state))print("Provisioning errors:{}".format(batch_compute.provisioning_errors))print("Using Batch compute:{}".format(batch_compute.cluster_resource_id))

请勿在工作区中为同一 Azure Batch 创建多个同步附件。 每个新附件都会破坏先前存在的附件。

九、Azure Databricks

Azure Databricks 是 Azure 云中基于 Apache Spark 的环境。 它可以用作 Azure 机器学习管道的计算目标。

Azure 机器学习无法创建 Azure Databricks 计算目标。 而必须由你自行创建一个 Azure Databricks 工作区,然后将其附加到 Azure 机器学习工作区。 若要创建工作区资源,请参阅在 Azure Databricks 中运行 Spark 作业文档。

若要从不同 Azure 订阅附加 Azure Databricks 工作区,你(你的 Microsoft Entra 帐户)必须被授予 Azure Databricks 工作区的“参与者”角色。 查看 Azure 门户中的访问权限。

要将 Azure Databricks 附加为计算目标,请提供以下信息:

  • Databricks 计算名称:要分配给此计算资源的名称。
  • Databricks 工作区名称:Azure Databricks 工作区的名称。
  • Databricks 访问令牌:用于对 Azure Databricks 进行身份验证的访问令牌。 若要生成访问令牌,请参阅身份验证文档。

以下代码演示如何使用 Azure 机器学习 SDK 将 Azure Databricks 附加为计算目标:

import os
from azureml.core.compute import ComputeTarget, DatabricksCompute
from azureml.exceptions import ComputeTargetExceptiondatabricks_compute_name = os.environ.get("AML_DATABRICKS_COMPUTE_NAME", "<databricks_compute_name>")
databricks_workspace_name = os.environ.get("AML_DATABRICKS_WORKSPACE", "<databricks_workspace_name>")
databricks_resource_group = os.environ.get("AML_DATABRICKS_RESOURCE_GROUP", "<databricks_resource_group>")
databricks_access_token = os.environ.get("AML_DATABRICKS_ACCESS_TOKEN", "<databricks_access_token>")try:databricks_compute = ComputeTarget(workspace=ws, name=databricks_compute_name)print('Compute target already exists')
except ComputeTargetException:print('compute not found')print('databricks_compute_name {}'.format(databricks_compute_name))print('databricks_workspace_name {}'.format(databricks_workspace_name))print('databricks_access_token {}'.format(databricks_access_token))# Create attach configattach_config = DatabricksCompute.attach_configuration(resource_group=databricks_resource_group,workspace_name=databricks_workspace_name,access_token=databricks_access_token)databricks_compute = ComputeTarget.attach(ws,databricks_compute_name,attach_config)databricks_compute.wait_for_completion(True)

有关更详细的示例,请参阅 GitHub 上的 示例笔记本。

请勿在工作区中为同一 Azure Databricks 创建多个同步附件。 每个新附件都会破坏先前存在的附件。

十、Azure Data Lake Analytics

Azure Data Lake Analytics 是 Azure 云中的大数据分析平台。 它可以用作 Azure 机器学习管道的计算目标。

使用该平台之前,请先创建 Azure Data Lake Analytics 帐户。 若要创建此资源,请参阅 Azure Data Lake Analytics 入门文档。

若要将 Data Lake Analytics 附加为计算目标,必须使用 Azure 机器学习 SDK 并提供以下信息:

  • 计算名称:要分配给此计算资源的名称。
  • 资源组:包含 Data Lake Analytics 帐户的资源组。
  • 帐户名称:Data Lake Analytics 帐户名。

以下代码演示如何将 Data Lake Analytics 附加为计算目标:

import os
from azureml.core.compute import ComputeTarget, AdlaCompute
from azureml.exceptions import ComputeTargetExceptionadla_compute_name = os.environ.get("AML_ADLA_COMPUTE_NAME", "<adla_compute_name>")
adla_resource_group = os.environ.get("AML_ADLA_RESOURCE_GROUP", "<adla_resource_group>")
adla_account_name = os.environ.get("AML_ADLA_ACCOUNT_NAME", "<adla_account_name>")try:adla_compute = ComputeTarget(workspace=ws, name=adla_compute_name)print('Compute target already exists')
except ComputeTargetException:print('compute not found')print('adla_compute_name {}'.format(adla_compute_name))print('adla_resource_id {}'.format(adla_resource_group))print('adla_account_name {}'.format(adla_account_name))# create attach configattach_config = AdlaCompute.attach_configuration(resource_group=adla_resource_group,account_name=adla_account_name)# Attach ADLAadla_compute = ComputeTarget.attach(ws,adla_compute_name,attach_config)adla_compute.wait_for_completion(True)

有关更详细的示例,请参阅 GitHub 上的 示例笔记本。

请勿在工作区中为同一 ADLA 创建多个同步附件。 每个新附件都会破坏先前存在的附件。

Azure 机器学习管道只能处理 Data Lake Analytics 帐户的默认数据存储中存储的数据。 如果需要处理的数据不在默认存储中,可以在训练之前使用 DataTransferStep复制数据。


十一、Azure 容器实例

Azure 容器实例 (ACI) 是在部署模型时动态创建的。 不能以任何其他方式创建 ACI 和将其附加到工作区。 有关详细信息,请参阅将模型部署到 Azure 容器实例。

十二、Kubernetes

file
Azure 机器学习提供了用于为训练和推理附加你自己的 Kubernetes 群集的选项。 请参阅配置 Kubernetes 群集以进行 Azure 机器学习。

若要从工作区分离 Kubernetes 群集,请使用以下方法:

compute_target.detach()

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

相关文章:

Azure 机器学习 - 使用Python SDK训练模型

目录 一、环境准备二、工作区限制三、什么是计算目标&#xff1f;四、本地计算机五、远程虚拟机六、Apache Spark 池七、Azure HDInsight八、Azure Batch九、Azure Databricks十、Azure Data Lake Analytics十一、Azure 容器实例十二、Kubernetes 了解如何用 SDK v1 将 Azure 计…...

C#成员属性代码示例

namespace Lesson_1类和对象 {class Person{private string name;private int age;private int money;private bool sex;public string Name { get{ //可以在返回之前设立一些逻辑规则。//相当于要获得一个返回值&#xff0c;有点像方法//意味着这个属性将要获取的内容。return…...

3、Dockerfile 深入与其他细节

Dockerfile 在 Docker 中创建镜像最常用的方式&#xff0c;就是使用 Dockerfile。Dockerfile 是一个 Docker 镜像 的描述文件&#xff0c;我们可以理解成火箭发射的 A、B、C、D…的步骤。Dockerfile 其内部包含了一 条条的指令&#xff0c;每一条指令构建一层&#xff0c;因此每…...

大数据之陌陌聊天数据分析案例

目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析&#xff0c;构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量&#xff0c;发送和接收用户数 3.…...

03 贝尔曼公式

贝尔曼公式 前言1、Motivating examples2、state value3、Bellman equation:Derivation4、Bellman equation:Matrix-vector form4、Bellman equation:Solve the state value5、Action value 前言 本文来自西湖大学赵世钰老师的B站视频。本节课主要介绍贝尔曼公式。 本节课概要…...

学习视频剪辑:批量添加srt字幕,让视频更生动

随着社交媒体的普及&#xff0c;视频制作变得越来越重要。无论是记录生活&#xff0c;还是分享知识&#xff0c;视频都是一个非常有力的工具。但是&#xff0c;如何让您的视频更生动、更吸引人呢&#xff1f;通过学习视频剪辑&#xff0c;您可以使您的视频更具有吸引力。而在这…...

Windows桌面便签工具推荐使用哪一款?

电脑桌面上张贴便利贴可以将近期需要完成的工作计划逐一添加到便利贴中&#xff0c;电脑桌面悬挂便利贴工具可以督促日常各项事务的完成。当前可悬挂在电脑桌面上的便利贴工具是比较多的&#xff0c;其中桌面小工具便签软件敬业签可满足各行业的办公需求。 建议大家在Windows桌…...

【微信小程序】自定义组件(二)

自定义组件 纯数据字段1、什么是纯数据字段2、使用规则 组件的生命周期1、组件全部的生命周期函数2、组件主要的生命周期函数3、lifetimes节点 组件所在页面的生命周期1、什么是组件所在页面的生命周期2、 pageLifetimes节点3、生成随机的颜色值 纯数据字段 1、什么是纯数据字…...

llinux的更目录下的文件作用和举例

Linux是一种开源的操作系统&#xff0c;其文件系统采用了一种层次化的结构。在Linux文件系统中&#xff0c;最顶层的目录被称为根目录&#xff0c;也就是“/”&#xff08;斜杠&#xff09;。在根目录下&#xff0c;有很多文件和目录&#xff0c;它们各自有着不同的作用。本文将…...

20231106_抽象类abstract

抽象类abstract 关键字 abstract运用抽象类抽象方法:修饰抽象类中的某个方法,强制子类重写该方法 归纳 关键字 abstract 对于子类必须要实现特定方法,当时父类无法明确时,可定义为抽象类及抽象方法 不合理: 动物吃东西是基础,在这里写吃的方法过于简单,信息没有实际意义; 怎…...

yolov5 obb旋转框 tensorrt部署

文章目录 1.生成engine文件2.检测图像3.代码yolov5-obb tensorRT部署代码结合王新宇和fish-kong两者的代码,可以多batch批量检测旋转框 yolov5旋转框检测: https://blog.csdn.net/qq_42754919/article/details/134145174 1.生成engine文件 首先需要将pt文件转换成wts文件,…...

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流&#xff0c;需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢&#xff1f;他们具体的使用场…...

【C语法学习】17 - fwrite()函数

文章目录 1 函数原型2 参数3 返回值4 示例 1 函数原型 fwrite()&#xff1a;将ptr指向的内存空间中储存的数据块写入与指定流stream相关联的二进制文件中&#xff0c;函数原型如下&#xff1a; size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream)2 参…...

CWE(Common Weakness Enumeration,通用缺陷枚举)

参考链接&#xff1a;https://cwe.mitre.org/ CWE&#xff08;Common Weakness Enumeration&#xff0c;通用缺陷枚举&#xff09;和CVE&#xff08;Common Vulnerabilities & Exposures&#xff0c;通用漏洞和风险&#xff09;都是在计算机软件安全领域中非常重要的公开数…...

华为政企视频会议产品集

产品类型产品型号产品说明 maintainProductCloudMCU基础版-ARM华为CloudMCU是为面向云化需求而推出的功能强大的企业云通信融合媒体平台。融合视频、音频和数据等多种媒体内容&#xff0c;接入从会议室到个人PC、手机等设备&#xff0c;实现统一无缝的沟通协作。maintainProduc…...

IntelliJ IDEA 2022创建Maven项目

IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …...

有限域的Fast Multiplication和Modular Reduction算法实现

1. 引言 关于有限域的基础知识&#xff0c;可参考&#xff1a; RISC Zero团队2022年11月视频 Intro to Finite Fields: RISC Zero Study Club 有限域几乎是密码学中所有数学的基础。 ZKP证明系统中的所有运算都是基于有限域的&#xff1a; 使用布尔运算的数字电路&#xf…...

第八章:security testing

文章目录 Security Testingbuffer overflow 的例子Fuzzing 测试Random Testing好处坏处Mutation-based Fuzzing好处坏处Generation-based Fuzzing好处坏处Memory DebuggerUndefined Behaviors (未定义行为)Security Testing 渗透测试(或称为pentesting)是指攻击软件以寻找安…...

Linux系统下一些配置建议整理

1. 【推荐】高并发服务器建议调小 TCP 协议的 time_wait 超时时间。 说明&#xff1a;操作系统默认 240 秒后&#xff0c;才会关闭处于 time_wait 状态的连接&#xff0c;在高并发访问下&#xff0c;服 务器端会因为处于 time_wait 的连接数太多&#xff0c;可能无法建立新的…...

【launch文件中如何启动gdb调试单个节点多个节点】

文章目录 调试多个节点在ROS中,如果需要用gdb调试节点,你可以在.launch文件中添加相关的参数。以下是一个例子,展示如何为一个节点启动gdb调试: <launch><node pkg="your_package" type="your_node...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...