Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nvidia-smi详解(二)- python

nvidia-smi详解(二)- python

原创
作者头像
何其不顾四月天
发布于 2024-07-18 17:32:59
发布于 2024-07-18 17:32:59
50800
代码可运行
举报
文章被收录于专栏:四月天的专栏四月天的专栏
运行总次数:0
代码可运行

Nvidia-smi and Python

前言

在之前的nvidia-smi 详解(一)写的过程中,查资料查到了有对应的python支持方法,就计划写这个了,随后写加查资料就写好代码了,但是就是犯懒一直没写文章,墨迹到了现在。

也是做了一些简单的接口测试以及使用,主要还是查询的接口,没测试控制类接口。

简介

对应的py库介绍主要是来自: nvidia-ml-py

代码语言:txt
AI代码解释
复制
Provides a Python interface to GPU management and monitoring functions.

This is a wrapper around the NVML library. For information about the NVML library, see the NVML developer page http://developer.nvidia.com/nvidia-management-library-nvml

Download the latest package from: http://pypi.python.org/pypi/nvidia-ml-py/

Note this file can be run with 'python -m doctest -v README.txt' although the results are system dependent

The nvml header file contains function documentation that is relevant to this wrapper. The header file is distributed with. https://developer.nvidia.com/gpu-deployment-kit

The main difference is this library handles allocating structs and passing pointers to the functions, before returning the desired value. Non-success return codes are raised as exceptions as described in the section below.

安装

pip安装

代码语言:shell
AI代码解释
复制
python3 -m pip install nvidia-ml-py

安装包安装

下载地址:nvidia-ml-py 12.555.43

代码语言:shell
AI代码解释
复制
wget https://files.pythonhosted.org/packages/ee/c6/2348fc1fb776ff41a34635fb1f18010a6d6fd7ba6e57184dabd9d98ba9cf/nvidia-ml-py-12.555.43.tar.gz
tar -xzf nvidia-ml-py-$major-$minor-$patch.tar.gz`
cd nvidia-ml-py-$major-$minor-$patch
sudo python setup.py install

注意:$major-$minor-$patch 这三个变量的替换

代码

导入

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from pynvml import *

初始化

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
nvmlInit()

版本查询

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"Driver Version: {nvmlSystemGetDriverVersion()}")

输出结果: Driver Version: 552.22

GPU个数获取

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
deviceCount = nvmlDeviceGetCount()

获取对应索引GPU句柄

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
handle = nvmlDeviceGetHandleByIndex(i)
print(f"Device {i} : {nvmlDeviceGetName(handle)}")

输出结果:

代码语言:shell
AI代码解释
复制
Device 0 : NVIDIA GeForce RTX 4060 Ti

获取显存信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetMemoryInfo(handle)
print(f"Total memory: {info.total} MiB")
print(f"Free memory: {info.free} MiB")
print(f"Used memory: {info.used} MiB")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
Total memory: 8585740288 MiB
Free memory: 6701080576 MiB
Used memory: 1884659712 MiB

获取显存利用率

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetUtilizationRates(handle)
print(f"UtilizationRates Gpu: {info.gpu}%")
print(f"UtilizationRates Memory: {info.memory}%")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
UtilizationRates Gpu: 1%
UtilizationRates Memory: 17%

获取编码利用率信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetEncoderUtilization(handle)
print(f"EncoderUtilization {info}")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
EncoderUtilization [0, 200000]

获取解码利用率信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetDecoderUtilization(handle)
print(f"DecoderUtilization {info}")

输出结果:

代码语言:shell
AI代码解释
复制
DecoderUtilization [0, 200000]

获取JPG利用信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetJpgUtilization(handle)
print(f"JpgUtilization {info}")

输出结果:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
JpgUtilization [0, 200000]

通过Pid获取进程名字

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
def get_process_name_by_pid(pid):
    try:
        return psutil.Process(pid).name()
    except:
        return None

获取正在运行计算操作的进程列表

代码语言:shell
AI代码解释
复制
info = nvmlDeviceGetComputeRunningProcesses(handle)
for index,item in enumerate(info):
    print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

输出信息(只放部分进程):

代码语言:shell
AI代码解释
复制
0 : {'pid': 1716, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: dwm.exe
1 : {'pid': 6384, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: explorer.exe
2 : {'pid': 6592, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: SearchHost.exe
3 : {'pid': 7064, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: StartMenuExperienceHost.exe

获取正在运行的图形进程列表

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
info = nvmlDeviceGetGraphicsRunningProcesses(handle)
for index,item in enumerate(info):
    print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

输出信息(只放部分输出结果);

代码语言:shell
AI代码解释
复制
0 : {'pid': 1716, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: dwm.exe
1 : {'pid': 6384, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: explorer.exe
2 : {'pid': 6592, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: SearchHost.exe
3 : {'pid': 7064, 'usedGpuMemory': None, 'gpuInstanceId': 4294967295, 'computeInstanceId': 4294967295} ,name: StartMenuExperienceHost.exe

获取GPU的当前温度

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
temperature_gpu = nvmlDeviceGetTemperature(handle, NVML_TEMPERATURE_GPU)
print(f"temperature_gpu {temperature_gpu}")

输出结果:

代码语言:shell
AI代码解释
复制
temperature_gpu 29

获取GPU的上限温度

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
temperature_threshold = nvmlDeviceGetTemperatureThreshold(handle, NVML_TEMPERATURE_THRESHOLD_GPU_MAX)
print(f"temperature_threshold {temperature_threshold}")

输出结果:

代码语言:shell
AI代码解释
复制
temperature_threshold 90

获取GPU设备的UUID

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
gpu_uuid = nvmlDeviceGetUUID(handle)
print(f"gpu_uuid {gpu_uuid}")

输出结果:

代码语言:shell
AI代码解释
复制
gpu_uuid GPU-3fd9292f-3024-fbdb-4596-5c5560b91654

获取GPU设备的PCI信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
pci_info = nvmlDeviceGetPciInfo(handle)
print(f"pci info {pci_info}")

获取的其他信息 CLOCK相关

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"GRAPHICS clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_GRAPHICS)}")
print(f"SM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_SM)}")
print(f"MEM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_MEM)}")
print(f"VIDEO clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_VIDEO)}")

输出结果:

代码语言:shell
AI代码解释
复制
GRAPHICS clock info 270
SM clock info 270
MEM clock info 405
VIDEO clock info 1185

获取电源相关信息

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
print(f"power state {nvmlDeviceGetPowerState(handle)}")
print(f"power usage watts {nvmlDeviceGetPowerUsage(handle) / 1000}")

输出结果:

代码语言:shell
AI代码解释
复制
power state 8
power usage percent 27.649

结束调用

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
nvmlShutdown()

全部代码

主要是遍历输出所有Nvidia状态信息,可以根据自己需要来进行编写设置。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from pynvml import *
import psutil

def get_process_name_by_pid(pid):
    try:
        return psutil.Process(pid).name()
    except:
        return None

nvmlInit()
print(f"Driver Version: {nvmlSystemGetDriverVersion()}")

deviceCount = nvmlDeviceGetCount()
try:
    for i in range(deviceCount):
        handle = nvmlDeviceGetHandleByIndex(i)
        print(f"Device {i} : {nvmlDeviceGetName(handle)}")
        print(" ")
        try:
            (current, pending) = nvmlDeviceGetEccMode(handle)
            print("current",current,"pending",pending)
        except NVMLError as error:
            print(error)
        
        print(" ")
        info = nvmlDeviceGetMemoryInfo(handle)
        print(f"Total memory: {info.total} MiB")
        print(f"Free memory: {info.free} MiB")
        print(f"Used memory: {info.used} MiB")

        print(" ")
        info = nvmlDeviceGetUtilizationRates(handle)
        print(f"UtilizationRates Gpu: {info.gpu}%")
        print(f"UtilizationRates Memory: {info.memory}%")

        print(" ")
        info = nvmlDeviceGetEncoderUtilization(handle)
        print(f"EncoderUtilization {info}")

        print(" ")
        info = nvmlDeviceGetDecoderUtilization(handle)
        print(f"DecoderUtilization {info}")

        print(" ")
        info = nvmlDeviceGetJpgUtilization(handle)
        print(f"JpgUtilization {info}")

        print(" ")
        info = nvmlDeviceGetOfaUtilization(handle)
        print(f"OfaUtilization {info}")

        print(" ")
        info = nvmlDeviceGetComputeRunningProcesses(handle)
        for index,item in enumerate(info):
            print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

        print(" ")
        info = nvmlDeviceGetGraphicsRunningProcesses(handle)
        for index,item in enumerate(info):
            print(f"{index} : {item} ,name: {get_process_name_by_pid(item.pid)}")

        print(" ")
        try:
            # NVML_PROCESS_MODE_COMPUTE | NVML_PROCESS_MODE_GRAPHICS | NVML_PROCESS_MODE_MPS
            info = nvmlDeviceGetRunningProcessDetailList(handle, nvmlProcessDetailList_v1, NVML_PROCESS_MODE_COMPUTE)
            for item in info:
                print(f"ProcessDetailList {item}")
        except NVMLError as error:
            print(f"nvmlDeviceGetRunningProcessDetailList {error}")

        temperature_gpu = nvmlDeviceGetTemperature(handle, NVML_TEMPERATURE_GPU)
        print(f"temperature_gpu {temperature_gpu}")

        temperature_threshold = nvmlDeviceGetTemperatureThreshold(handle, NVML_TEMPERATURE_THRESHOLD_GPU_MAX)
        print(f"temperature_threshold {temperature_threshold}")

        print("")
        gpu_uuid = nvmlDeviceGetUUID(handle)
        print(f"gpu_uuid {gpu_uuid}")

        print("")
        pci_info = nvmlDeviceGetPciInfo(handle)
        print(f"pci info {pci_info}")

        print("")
        print(f"GRAPHICS clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_GRAPHICS)}")
        print(f"SM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_SM)}")
        print(f"MEM clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_MEM)}")
        print(f"VIDEO clock info {nvmlDeviceGetClockInfo(handle, NVML_CLOCK_VIDEO)}")

        print("")
        print(f"power state {nvmlDeviceGetPowerState(handle)}")
        print(f"power usage watts {nvmlDeviceGetPowerUsage(handle) / 1000}")
        
except NVMLError as error:
    print(error)

nvmlShutdown()

结束语

其实写的比较简单,只是摘取了我觉得日常会用的一些信息,还有很多其他函数,可以在pynvml.py文件里边查看获取。或者 NVIDIA GPU等网站查看自己需要的一些信息,样例等。这半年其实一直没怎写,日常工作也比较无聊,开始研究srs,以及一些pyton脚本的编写,希望把文章抓起来,多写一些。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
server 2016 安装WDS服务并下发操作系统
WDS的全称为Windows部署服务,主要应用于大中型网络中的计算机操作系统的批量化部署。通过使用WDS可以管理系统映像和无人参与安装脚本,并提供人工参与安装和无人参与安装的方式,大大提升我们安装操作系统的速度。 首先,部署WDS需要满足一下条件: 1、最好使用专业级服务器作为分发端,如果使用普通计算机,可能会导致分发过程不稳定,降低整体分发效率。客户机需要网卡支持PXE功能(PXE功能一般的计算机都支持),服务器和客户机必须在同一局域网。如果部署超过百台的计算机时,优先使用千兆网络。 2、DHCP:用于向需要安装操作系统的客户机分配ip地址。(部署DHCP服务在之前的文章有提到,需要的话可以参考一下) 3、AD服务:活动目录服务,主要用于用户身份的验证(WDS服务有两种部署方式,“与AD集成模式”和“独立模式”。如果使用独立模式,则不需要安装AD服务) 4、服务器必须是有管理员权限,并准备好想要安装的系统镜像,(最好是纯净版的,在网上随便下载的镜像,都经过别人的篡改。可能无法部署该服务) 好,具备以上要求,我们就开始部署该服务。 首先我们先打开服务器管理器
小手冰凉
2019/09/10
1.6K0
server 2016 安装WDS服务并下发操作系统
Win系统安装部署流程与工具
描述:Windows Deployment Service即windows部署服务,我们可以通过windows server自带的部署服务通过网络将操作系统部署到每台计算机上,并且可以通过WDS来管理多版本映像以及无人参与安装脚本,和网刻非常相似不过这个更简单操作更方便
全栈工程师修炼指南
2020/10/26
2.9K0
Win系统安装部署流程与工具
Windows server——部署DHCP服务(2)
本章将会讲解如何配置DHCP服务,安装DHCP服务,配置DHCP客户端,维护DHCP,监视DHCP
网络豆
2023/10/15
4.1K0
Windows server——部署DHCP服务(2)
Windows Server 2016搭建DNS服务
今天跟大家简单介绍一下如何在Windows Server 2016 上搭建DNS(域名解析)服务。 DNS服务器要为客户端提供域名解析服务,必须要具备以下条件: 1.有固定的IP地址; 2.安装并启动DNS服务; 3.有区域文件,配置转发器或配置根提示。 满足条件后,下面开始安装DNS服务 1.首先确认本机的IP地址
星哥玩云
2022/07/28
6.1K0
Windows Server 2016搭建DNS服务
WIndows 2016 部署WDS
WDS 是 Windows 部署服务的缩写,它是一种用于部署 Windows 操作系统的服务。WDS 可以通过网络将 Windows 安装到新计算机上,而无需管理员访问每台计算机。
神秘泣男子
2024/06/03
2220
WIndows 2016 部署WDS
Windows server——部署DNS服务(2)
本章将会讲解Windows server 配置DNS服务。前期回顾:Windows server——部署DNS服务
网络豆
2023/10/15
1.7K0
Windows server——部署DNS服务(2)
windows网络批量安装WDS+win10自动应答文件
在上篇文章中,有同学评论想要“网络安装微软原盘镜像”的教程,恰好我也会,所以本次教程为windows部署服务+自动应答,内容以实用为主,不涉及细节讲解,因windows的复杂性,详细内容建议直接到微软文档库查看。
王忘杰
2022/09/21
2.3K0
windows网络批量安装WDS+win10自动应答文件
自动化批量安装Windows11——Windows Servcer 2022 MDT
Windows Server 2022和Windows 11都发布一段时间了,使用的客户也渐渐多了起来,今天来讲解一下,如何利用Windows Server 2022来批量化地自动部署Windows 11。
IT狂人日志
2022/05/18
3.9K0
自动化批量安装Windows11——Windows Servcer 2022 MDT
PXE及PXE启动
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。 PXE协议的成功运行需要解决以下两个问题: 既然是通过网络传输,那么计算机在启动时,它的IP地址由谁来配置; 通过什么协议下载Linux内核和根文件系统 对于第一个问题,可以通过DHCP Server解决,由DHCP server来给PXE client分配一个IP地址,DHCP Server是用来给DHCP Client动态分配IP地址的协议,不过由于这里是给PXE Client分配IP地址,所以在配置DHCP Server时,需要增加相应的PXE特有配置。 至于第二个问题,在PXE client所在的ROM中,已经存在了TFTP Client。PXE Client使用TFTP Client,通过TFTP协议到TFTP Server上下载所需的文件。 这样,PXE协议运行的条件就具备了,下面我们就来看看PXE协议的工作过程。 工作过程 在上图中,PXE client是需要安装Linux的计算机,TFTP Server和DHCP Server运行在另外一台Linux Server上。Bootstrap文件、配置文件、Linux内核以及Linux根文件系统都放置在Linux Server上TFTP服务器的根目录下。 PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。 步骤 有了前面的背景知识,接下来就可以正式操作了,下面按照顺序给出了操作步骤: 配置DHCP Server 选用ISC dhcp-3.0,DHCP Server的配置文件是/etc/dhcpd.conf,配置文件的内容如下:
全栈程序员站长
2022/07/02
4K0
Windows server环境下混合云部署DFS文件服务
很多传统企业在设计身份验证和文件服务时,都会使用微软的活动目录和windows server自带的文件共享来实现以上的需求, 公有云的出现给这个场景在灾备和异地访问提供了一个全新的方案场景。
用户2225761
2018/11/23
3.9K0
Windows server环境下混合云部署DFS文件服务
COBBLER批量安装Windows系统
需求:采用Cobbler批量分发安装Windows10(官方原版未封装过)并默认进入审核模式;
全栈工程师修炼指南
2020/10/26
5K1
COBBLER批量安装Windows系统
Windows server——部署DNS服务(3)
本章将会继续讲解《Windows server——部署DNS服务》前期回顾Windows server——部署DNS服务,Windows server——部署DNS服务(2)
网络豆
2023/10/15
1.2K0
Windows server——部署DNS服务(3)
Active Directory与域服务,介绍,安装
Active Directory是一种由微软开发的网络服务,用于管理用户、计算机和其他网络资源,是企业网络的核心目录服务。它提供了一种集中管理和控制企业网络资源的方法,包括用户、计算机、应用程序、安全策略等。通过Active Directory,管理员可以轻松地集中管理和控制网络上的所有资源,确保网络的高可用性、安全性和一致性。
网络豆
2023/10/17
1.5K0
Active Directory与域服务,介绍,安装
扔掉U盘,网启PE,桌面维护的摸鱼利器
注意,本文对读者有一定选择性,如果你并非是企业桌面维护,则本文可以略过,请点击作者头像查看其他精彩文章~
王忘杰
2022/09/22
1.2K0
扔掉U盘,网启PE,桌面维护的摸鱼利器
Windows网络服务与配置管理之活动目录学习
活动目录英文全称为“Active Directory”,简称为AD。在windows系统组成的网络中,有服务器、客户机、用户账户、打印机、各种文件,这些资源都在各台计算机上,没有使用活动目录之前需要在各台计算机上单独管理这些资源。使用活动目录可以集中管理windows网络各类资源,"活动目录"就像一个数据库,存储着windows网络中的所有资源。
黑白天安全
2020/06/23
4.2K0
Windows网络服务与配置管理之活动目录学习
GNS3环境搭建与测验实战图文详解
GNS3是一款具有图形化界面可以运行在多平台(包括Windows, Linux, and MacOS等)的网络虚拟软件。Cisco网络设备管理员或是想要通过CCNA,CCNP,CCIE等Cisco认证考试的相关人士可以通过它来完成相关的实验模拟操作。同时它也可以用于虚拟体验Cisco网际操作系统IOS或者是检验将要在真实的路由器上部署实施的相关配置。
星哥玩云
2022/07/28
3K0
GNS3环境搭建与测验实战图文详解
VMware ESXI 5.0群集+ISCSI存储
运行VMware Workstatioin的机器必须拥有64比特的CPU,而CPU也必须支持VT-X技术
月缺
2020/01/15
1.4K0
VMware ESXI 5.0群集+ISCSI存储
PXE远程网络装机服务及CentOS 7无人值守安装
在大规模的Linux应用环境中,比如Web群集、分布式计算等,服务器往往并不配备光驱设备,在这种情况下,如何给成百上千台服务器裸机快速安装系统呢?传统的USB光驱、移动硬盘等安装方式很显然已经力不从心了,那么就需要——PXE网络装机及无人值守安装。
用户8705050
2021/06/08
2.1K0
域渗透基础之环境搭建(单域到组件域林)
转发:https://www.e-learn.cn/content/qita/2484245
墨文
2020/02/28
1.8K0
域渗透基础之环境搭建(单域到组件域林)
PXE网络
PXE 严格来说并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。 协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器 和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。 此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。
全栈程序员站长
2022/07/04
1.5K0
PXE网络
相关推荐
server 2016 安装WDS服务并下发操作系统
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验