张小白教你使用MindStudio 5.0.RC2的Windows版本进行MMNet人像分割

举报
张辉 发表于 2022/08/23 12:09:07 2022/08/23
【摘要】 MindStudio 体验官 升职记。

在MindStudio团队提供的镜像基础上,张小白基于AI1S云服务器完成了MindStudio的卡通风格迁移任务,

具体内容发布在 https://bbs.huaweicloud.cn/blogs/371113,但张小白绝不止步于此,张小白还想在200DK上也试验一下MindStudio 5.0.RC2的威力。

与MindStudio在AI1S上的架构不同,200DK的CPU其实比较弱,而且上面运行的是ubuntu 18.04 server aarch64版,所以基本上不可能在上面运行基于Java11的MindStudio。所以,我们这次使用MindStudio 5.0.RC2的windows版本,结合200DK上的Python,使用远程Python运行的方式完成MMNet人像分割应用的运行。

我们把上述任务拆分成以下几个部分:


(1)创建 ubuntu 18.04 x86虚拟机,并安装部分系统依赖

(2)在 ubuntu 18.04 x86虚拟机 上制作CANN 5.1.RC2社区版的200DK启动盘

(3)启动200DK,安装部分系统依赖

(4)安装Python 3.9.7,安装部分pip依赖

(5)安装CANN Toolkit 5.1.RC2

(6)安装MindX SDK 3.0.RC2

(7)安装MindStudio 5.0.RC2 for windows

(8)准备MMNet项目工程文件,并使用MindStudio Windows版进行相关配置

(9)使用MindStudio Windows版运行调试,跑通MMNet

下面详细描述:

1、创建Ubuntu 18.04 x86操作系统的虚拟机,并安装部分系统依赖

(1)创建ubuntu 18.04 x86虚拟机

创建x86虚拟机的过程可以参见 https://bbs.huaweicloud.cn/blogs/345859 《创建Ubuntu 18.04x86 操作系统的虚拟机》的步骤完成,此处不再赘述。

(2)安装net-tools

刚搭建好的虚拟机ifconfig无法使用,需要安装net-tools包:

(3)禁止Ubuntu系统自动更新

如不进行本项设置,没准操作系统会升级到ubuntu 20.04版本:

cke_992.png

(4)修改apt源为国内源

修改文件:/etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

sudo apt-get update

image.png

(5)安装openssh-server

系统缺省没有安装sshd,安装openssh-server以便可以通过MobaXterm访问:

(6)操作系统部分软件安装

sudo apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev

检查相关版本:

gcc --version 

g++ --version 

make --version 

cmake --version 

dpkg -l zlib1g| grep zlib1g| grep ii 

dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii 

dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii 

dpkg -l openssl| grep openssl| grep ii 

dpkg -l libssl-dev| grep libssl-dev| grep ii 

dpkg -l libffi-dev| grep libffi-dev| grep ii 

dpkg -l unzip| grep unzip| grep ii 

dpkg -l pciutils| grep pciutils| grep ii 

dpkg -l net-tools| grep net-tools| grep ii 

dpkg -l libblas-dev| grep libblas-dev| grep ii 

dpkg -l gfortran| grep gfortran| grep ii 

dpkg -l libblas3| grep libblas3| grep ii 

dpkg -l libopenblas-dev| grep libopenblas-dev| grep ii

(7)源码编译Python3.7.5

python3 --version

需要源码安装Python 3.7.5

wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz

tar -zxvf Python-3.7.5.tgz 解压

cd Python-3.7.5

./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared

make

sudo make install

修改.bashrc,增加以下内容:

#用于设置python3.7.5库文件路径
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
#如果用户环境存在多个python3版本,则指定使用python3.7.5版本
export PATH=/usr/local/python3.7.5/bin:$PATH复制复制

source ~/.bashrc 使得环境变量生效

检查python3和 pip3的版本:

python3 --version

pip3 --version

升级pip:pip3 install --upgrade pip   -i https://pypi.tuna.tsinghua.edu.cn/simple --user

(8)安装pip依赖包

pip3 install attrs --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install numpy --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install decorator --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install sympy --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install cffi --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install pyyaml --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install pathlib2 --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install psutil --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install protobuf --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install scipy --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install requests --user  -i https://pypi.tuna.tsinghua.edu.cn/simple 

pip3 install absl-py --user  -i https://pypi.tuna.tsinghua.edu.cn/simple

2、在 ubuntu 18.04 x86虚拟机 上制作CANN 5.1.RC2社区版的200DK启动盘

根据 https://support.huaweicloud.cn/environment-deployment-Atlas200DK1012/atlased_04_0010.html

操作制卡所需的相关步骤如下:

(1)安装系统依赖包

切换到root环境:

sudo su - 

将 /home/ascend/.bashrc里面python的相关环境变量拷贝到 ~/.bashrc中:

安装系统依赖包:

apt-get install qemu-user-static binfmt-support python3-yaml squashfs-tools gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

​​

(2)准备制卡所需的软件包

mkdir $HOME/mksd

cd $HOME/mksd

打开 https://www.hiascend.com/hardware/firmware-drivers?tag=community

查看 CANN 5.1.RC2.alpha007对应的固件版本:

并完成下载:

wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/turing/resource/atlas200dk/1.0.13/A200dk-npu-driver-21.0.4-ubuntu18.04-aarch64-minirc.tar.gz

下载制卡所需的arm版操作系统

wget http://old-releases.ubuntu.com/releases/18.04.3/ubuntu-18.04.5-server-arm64.iso

下载制卡脚本:

wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_sd_card.py

wget https://gitee.com/ascend/tools/raw/master/makesd/generic_script/make_ubuntu_sd.sh

(3)制卡

打开TF卡插入USB转换头,并接入笔记本电脑。

使用windows11的计算机管理删除原有分区:

将 虚拟机的USB兼容性设置改为USB 3.1(如不修改将无法识别该TF卡)

让虚拟机识别TF卡:

此时,TF卡对应的设备为 /dev/sdb

执行以下命令:

python3 make_sd_card.py local /dev/sdb

执行过程中发现需要安装一些软件包,按提示处理后,重新执行:

成功完成制卡。

3、启动200DK,安装部分系统依赖

(1)启动200DK

打开200DK外壳,将原来的卡拔出,插入新制的卡,开机:

耐心等待固件升级成功,四个灯全亮。


(2)配置USB网卡地址并通过USB登陆200DK

使用Type-C线连接笔记本电脑和200DK的Type-C口。这个时候,USB口对于笔记本电脑的ubuntu x86虚拟机而言需要有一个地址(192.168.1.188),对于200DK需要有一个地址(192.168.1.2),后者在制卡的时候就设置到200DK的arm ubuntu系统中了,所以需要设置 ubuntu x86虚拟机的网卡地址,以便两者通过USB能连通:


下载USB网卡配置脚本:

wget https://gitee.com/ascend/tools/raw/master/configure_usb_ethernet/for_20.1/configure_usb_ethernet.sh

执行该脚本,将开发环境的USB网络配置为 192.168.1.188

bash configure_usb_ethernet.sh -s 192.168.1.188

测试连接200DK:

ping 192.168.1.2

通了!

登陆200DK:

ssh HwHiAiUser@192.168.1.2

(3)在运行环境安装nnrt

此处需要注意相关操作执行的位置。开发环境指的是在虚拟机上操作(使用ascend用户),运行环境指的是在200DK上操作(使用HwHiAiUser用户)。好在看截图中的shell提示符应该能看出来在哪里操作的。

由于目前200DK还不能直接接外网,采取的方式是:先在开发环境下载nnrt包,然后scp到200DK上。

即在开发环境执行:

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 5.1.RC2/Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run

登陆到200DK,scp该文件,然后安装:

scp ascend@192.168.1.188:/home/ascend/Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run .

./Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run --check

./Ascend-cann-nnrt_5.1.RC2_linux-aarch64.run --install --chip=Ascend310-minirc

修改.bashrc

增加以下内容

. /home/HwHiAiUser/Ascend/nnrt/set_env.sh

source ~/.bashrc使得环境变量生效


(4)配置200DK的有线网卡地址

ifconfig查看地址:

由于张小白的有线网卡接的路由器的地址为192.168.199.1,故需要将eth0改为 192.168.199.X的网段地址,暂设为192.168.199.204

sudo vi /etc/netplan/01-netcfg.yaml

好像这个HwHiAiUser用户没有sudo权限

su - 切换到root (密码 Mind@123)

vi /etc/netplan/01-netcfg.yaml

netplan apply使其生效

ifconfig

ping 192.168.199.1

ping www.sina.com.cn

好了,200DK也可以上外网了,也就是说,运行环境也可以直接使用apt安装软件,或者使用wget下载软件包了。这无疑比通过虚拟机scp中转要好得多。


(5)修改apt源为国内华为云地址

由于200DK使用了arm的apt源,故特意使用华为云的apt源来进行系统软件的安装和更新。

具体操作如下:

切换到root用户

su -

wget -O /etc/apt/sources.list http://repo.huaweicloud.cn/repository/conf/Ubuntu-Ports-bionic.list


apt-get update

(6)安装必要的arm版系统软件

apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3 libopenblas-dev

...

检查相关版本:

gcc --version 

g++ --version 

make --version 

cmake --version 

dpkg -l zlib1g| grep zlib1g| grep ii 

dpkg -l zlib1g-dev| grep zlib1g-dev| grep ii 

dpkg -l libsqlite3-dev| grep libsqlite3-dev| grep ii 

dpkg -l openssl| grep openssl| grep ii 

dpkg -l libssl-dev| grep libssl-dev| grep ii 

dpkg -l libffi-dev| grep libffi-dev| grep ii 

dpkg -l unzip| grep unzip| grep ii 

dpkg -l pciutils| grep pciutils| grep ii 

dpkg -l net-tools| grep net-tools| grep ii 

dpkg -l libblas-dev| grep libblas-dev| grep ii 

dpkg -l gfortran| grep gfortran| grep ii 

dpkg -l libblas3| grep libblas3| grep ii 

dpkg -l libopenblas-dev| grep libopenblas-dev| grep ii

(7)赋给HwHiAiUser用户sudo权限

缺省制卡时,200DK的用户HwHiAiUser是没有sudo权限的,这可能是华为出于安全考虑。

但是这样子对于张小白而言,太不方便了。

所以张小白打算给它sudo权限。具体操作如下:

切换到root用户

su -

(Mind@123)

编辑 /etc下的s-u-d-o-e-r-s文件:

确实有可能提升了风险,但是方便在此时对张小白而言更重要一些。

(8)源码编译安装OpenSSL 1.1.1q

下载openssl源码:

wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate

tar -xzvf openssl-1.1.1q.tar.gz 解压:

cd openssl-1.1.1q

./config

注:如config时报以下错误:

cke_16018.png

您可以执行apt-get install perl再重新config

cke_23836.png

make

sudo make install


(9)安装OpenCV

sudo apt-get install libopencv-dev

执行以下命令:

。。。

4、安装Python 3.9.7,安装部分pip依赖

(1)源码安装Python3.9.7

查看了Python的版本,专家建议使用Python3.9.7:

浏览器下载 https://www.python.org/ftp/python/3.9.7/Python-3.9.7.tgz

将其传到200DK

tar -zxvf Python-3.9.7.tgz 解压:

cd Python-3.9.7

./configure --prefix=/usr/local/python3.9.7 --enable-loadable-sqlite-extensions --enable-shared --with-openssl=/home/HwHiAiUser/openssl-1.1.1q

...

make -j8

耐心等待编译结束。

sudo make install

将下面这段代码放入 HwHiAiUser的 ~/.bashrc和 root的 ~/.bashrc

umask 0022

#用于设置python3.9.7库文件路径  

export LD_LIBRARY_PATH=/usr/local/python3.9.7/lib:$LD_LIBRARY_PATH  

export PATH=/usr/local/python3.9.7/bin:$PATH 

并且source ~/.bashrc使其生效:

检查python3和 pip3的版本:  

python3 --version  

pip3 --version

看来还是需要 把安装之后生成的libpython3.9.so.1.0拷贝到/usr/lib64和/usr/lib下:

sudo cp libpython3.9.so.1.0 /usr/lib/ 

sudo cp libpython3.9.so.1.0 /usr/lib64/

pip3 --version

升级pip版本:

pip3 install --upgrade pip -i http://pypi.douban.com/simple --trusted-host pypi.douban.com --user

做个软链接:

sudo su -

cd /usr/bin

ln -s /usr/local/python3.9.7/bin/python3.9 python

exit

python -V

(2)安装pip依赖包

pip3 install attrs numpy decorator sympy cffi pyyaml psutil protobuf scipy requests absl-py -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

。。。

pathlib包也需要安装:

pip3 install pathlib2 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

pip3 list

再补充安装两个包:

pip3 install grpcio -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

pip3 install pylint -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

如果安装过程中出现以下提示:

cke_33669.png

可按提示将 PATH=$PATH:/home/HwHiAiUser/.local/bin 加入~/.bashrc

cke_45319.png

并source ~/.bashrc使其生效:

cke_45819.png

5、安装CANN Toolkit 5.1.RC2

(1)安装版本说明

为了配套MindStudio 5.0.RC2运行,张小白仔细查看了版本要求:MindStudio 5.0.RC2需要CANN商业版 5.1.RC2

而张小白想下载CANN 商业版5.1.RC2:

却发现华为官网报权限不足:

虽然张小白也注册过了产品,但是确实不给下商业版:


于是张小白就此提了一个问题:https://bbs.huaweicloud.cn/forum/thread-0212959045344970005-1-1.html

专家回答说:装社区版也是可以的。于是张小白决定此次安装CANN 5.1.RC2社区版。


(2)下载CANN Toolkit 5.1.RC2安装包

在200DK上执行:

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 5.1.RC2/Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run cke_51897.png

(3)安装CANN Toolkit 5.1.RC2

chmod +x *.run

检查:

./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --check

安装:

./Ascend-cann-toolkit_5.1.RC2_linux-aarch64.run --install --chip=Ascend310-minirc

在~/.bashrc中增加 . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh 

并且source ~/.bashrc使其生效:

6、安装MindX SDK 3.0.RC2

(1)下载MindX SDK 3.0.RC2 aarch64版

打开 https://www.hiascend.com/zh/software/mindx-sdk/mxVision/community

image.png

对于200DK而言,需要安装mindx sdk的arm版本:

wget https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/MindX/MindX%203.0.RC2/Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run

(2)安装MindX SDK 3.0.RC2 aarch64版

根据手册 https://www.hiascend.com/document/detail/zh/mind-sdk/30rc2/quickstart/visionquickstart/visionquickstart_0003.html

安装的方法也很简单:

chmod +x *.run

./Ascend-mindxsdk-mxvision_3.0.RC2_linux-aarch64.run --install

image.png

同样的,修改.bashrc文件,增加 . /home/HwHiAiUser/mxVision/set_env.sh

并且source ~/.bashrc使其生效:

image.png

7、安装MindStudio 5.0.RC2 for windows

(1)下载MindStudio 5.0.RC2 for windows

打开 https://www.hiascend.com/software/mindstudio

点击立即下载:

选择 zip绿色版吧!

耐心等待下载完毕:

下载完毕,解压到L盘:

这个zip文件没有自带目录,如不带目录解压,会全部解压到根目录去。

赶紧建一个MindStudio5.0的目录,将文件都挪进去吧!


(2)运行MindStudio 5.0.RC2 for windows

双击打开 bin目录下的MindStudio.bat文件:

点击OK

会打开MindStudio的窗口,另外会有一个cmd窗口打印日志。

8、准备MMNet项目工程文件,并使用MindStudio Windows版进行相关配置

(1)准备MMNet项目文件

MMNet是人像分割的模型。

我们可以打开 https://www.hiascend.com/zh/developer/mindx-sdk/case-studies/1383ce0c-240c-4a96-a932-e6492a0db2c2

看到详情:

image.png


点击上面的Gitee,进入代码仓:

https://gitee.com/ascend/mindxsdk-referenceapps/tree/master/contrib/MMNET

由于这是一个mindxsdk的工程。我们需要先下载代码仓:

在Windows的cmd中切换到L:盘,执行:

git clone https://gitee.com/ascend/mindxsdk-referenceapps.git

同时,为了得到离线om模型,我们同时在200DK上也同时做同样的操作:当然首先需要安装git

sudo apt-get install git

cke_68012.png

git clone https://gitee.com/ascend/mindxsdk-referenceapps.git

cke_73397.png

在200DK上切换到 工程的模型目录:

cd ~/mindxsdk-referenceapps/contrib/MMNET/model

wget https://mindx.sdk.obs.cn-north-4.myhuaweicloud.com/mindxsdk-referenceapps /contrib/MMNET/mmnet.pb --no-check-certificate

image.png

模型转换:

atc --model=mmnet.pb --framework=3 --output=mmnet --soc_version=Ascend310 --insert_op_conf=mmnet.aippconf --input_shape="input_x:1,256,256,3"

image.png

转换成功后,将其下载到windows同样目录下:

L:\mindxsdk-referenceapps\contrib\MMNET\model

image.png


将应用案例中的图片另存到 L:\mindxsdk-referenceapps\contrib\MMNET 目录下:

image.png


image.png

好像又有点问题。这个图片依然是png格式。

使用画图打开后另存为jpg格式,放到这个目录下:

image.png

(2)CANN配置

使用MindStudio打开 L:\mindxsdk-referenceapps\contrib\MMNET 工程。

image.png

点击Trust

系统会提示CANN没有安装。

点击OK,出以下窗口:

点击Change:

在弹出的Remote CANN Setting窗口中,点击右边的 +

进行ssh的设置:

点击Test Connection:

点击OK。

已成功连接。

点击OK

选择remote CANN location:

选择 /home/HwHiAiUser/Ascend/ascend-toolkit/5.1.RC2

点击OK

点击Finish。

系统会跟后端对接:

耐心等待对接结束:

系统识别出CANN是5.1.RC2版本:

点击OK。

点击Ascend-CANN Manager


(3)将MMNet工程转换为MindX SDK工程

点击Ascend->Convert to Ascend Project

image.png

选择 Ascend MindX SDK App,点击OK。


(4)配置MindX SDK

打开Ascend->MindX SDK Manager,点击Import SDK,分别输入 CANN的路径和MindX SDK的路径:

CANN Location选择:/home/HwHiAiUser/Ascend/ascend-toolkit/5.1.RC2

SDK Location选择:/home/HwHiAiUser/mxVision-3.0.RC2

要精确到具体的版本号,点击OK:

image.png

系统会将SDK的配置同步到本地:C:\Users\xishu\Ascend\mindx_sdk\ 

image.png

可以使用资源管理器看到这些文件。但是这些都不需要动。

同步完毕后,会显示如下信息:

image.png

MindStudio已经识别出了 arm版的 mxVision 3.0.RC2版本。

点击OK继续。

(5)配置Python

打开 File->Project Structure

SDKs:

image.png

Project:

image.png

Modules:

image.png


(6)配置Deployment

打开Tools->Deployment->Configuration

image.png

Mappings:

image.png

9、使用MindStudio Windows版运行调试,跑通MMNet

(1)运行配置

由于这是个Python工程,无需编译配置,直接进行运行配置:

点击Run-》Edit Run Configuration

将Executable改为 L:\mindxsdk-referenceapps\contrib\MMNET\main.py

image.png

(2)运行调试

 Run:

出错了!

查看下protobuf的版本:4.21.5

pip install protobuf

报错说需要 3.20.x。。。

张小白也不知道该安装哪个版本,于是就乱写一个试试:

pip install protobuf==3.20.5

没有3.20.5版本。但是告诉我,有3.20.1版本,就是他了!

pip install protobuf==3.20.1

再来运行:

没装opencv,那就装吧:

pip3 install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

再来运行:

没装PIL,那就装吧!

pip3 install pillow -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

再来运行:

好像是文件名不对,仔细看代码main.py:

图片要求的名称为test.jpg

那就将图片名称改为现在的名称吧!

再重新运行:

程序成功执行完毕。

原始图片为:

生成好的图片为:test-out.jpg

终于执行完毕了!

(3)pipeline解读

因为MMNet是个Python的MindX SDK程序,它是有Pipeline的。我们点开pipeline目录下的MMNET.pipeline,先看看它的文本:

文本有点绕,路径张小白都画出来了:appsrc0->mxpi_imagedecoder0 解码->mxpi_imageresize0 (resize)->mxpi_tensorinfer0  推理->appsink0

点击Pipeline Stream Editor看到具体的步骤及详情:

appsrc0:

图片解码:输入图片格式要求为 jpg,BGR格式:

resize:

送进模型进行推理:

结束:

模型输出的结果,是通过main.py后面的脚本完成结果的读取和opencv的结果图写入的。

变量之间的关系张小白也大致标出了。大概就是这样的流向~~

至此,张小白就把从零开始搭建能在200DK上运行的MMNet环境讲清楚了。如果小伙伴们有问题,可以随时向张小白提问。谢谢~~

(全文完,谢谢阅读)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。