WSL测试笔记

安装WSL

参考链接 https://docs.microsoft.com/en-us/windows/wsl/install

开启WSL服务,将以下命令复制粘贴到控制台,然后按回车运行

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

开启虚拟机特性

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 重启电脑:请一定要重启,否则无法继续下面的操作。
  • 将WSL2设为默认启动版本,打开控制台,运行以下命令。
wsl --set-default-version 2

在Microsoft Store里面安装Ubuntu

在这里插入图片描述

设置相应的用户名和密码。

username:think
passward:

使用-l命令,可以列出WSL发行版

PS C:\Windows\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-18.04    Running         2
  Alpine          Stopped         2

在这里插入图片描述

安装Docker Desktop

下载地址:https://docs.docker.com/desktop/install/windows-install/

在这里插入图片描述

用邮箱进行注册

安装Docker

# docker version

在这里插入图片描述

在dockerhub上面找到对应ubuntu18.04 python3.6的镜像,然后拉下来

在这里插入图片描述

docker pull duruo850/ubuntu18.04-python3.6

在这里插入图片描述

可以在docker desktop里面找到对应的镜像

在这里插入图片描述

Docker常用命令

docker-style-guide/DockerImage.md at master · Haufe-Lexware/docker-style-guide  · GitHub

镜像常用命令

列出本机的镜像

docker images 镜像名

在这里插入图片描述

参数说明: 
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小
images 选项说明:
-a:列出本地所有镜像(含历史镜像层)
-q:只显示镜像ID
查询官网库中某个镜像

docker search 镜像名

在这里插入图片描述

选项说明: 
--limit:只列出N个镜像,默认25个。
输出参数说明:
NAME:镜像名称
DESCRIPTION:镜像说明
STARS:点赞数量
OFFICIAL:是否时官方的
AUTOMATED:是否时自动构建的
下载镜像

docker pull 镜像名[:TAG]

没有TAG就是最新版的,等价于docker pull 镜像名字:latest

查看镜像/容器/数据卷所占空间

docker system df

在这里插入图片描述

删除镜像

docker rmi 镜像名或ID号

docker rmi -f 镜像名1:TAG 镜像名2:TAG 删除多个

docker rmi -f $(docker images -qa) 删除全部

显示镜像构建历史

docker history 镜像名

获取容器或镜像的详细信息(元数据)

docker inspect 镜像名

导入导出镜像

存出压缩文件 docker save -o 镜像名 导出的镜像名.tar

载入 docker load -i 镜像名.tar

容器的常用命令

列出当前所有正在运行的容器

docker ps [OPTIONS]

常用参数说明:
-a:列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建的容器。
-n:显示最近n个创建的容器。
-q:静默模式,只显示容器编号。
新建+启动容器

docker run [OPTIONS] 镜像名:TAG

 OPTIONS说明(常用):
--name="容器新名字"       为容器指定一个名称
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-i:以交互模式运行容器,通常与 -t 同时使用
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

启动交互式容器(前台有伪终端,等待交互)
-P: 随机端口映射,大写P
-p: 指定端口映射,小写p
-p指定端口映射的几种不同形式:
-p hostPort:containerPort:端口映射,例如-p 8080:80
-p ip:hostPort:containerPort:配置监听地址,例如 -p 10.0.0.1:8080:80
-p ip::containerPort:随机分配端口,例如 -p 10.0.0.1::80
-p hostPort1:containerPort1 -p hostPort2:containerPort2:指定多个端口映射,例如-p 8080:80 -p 8888:3306
启动已停止运动的容器

docker start 容器ID或者容器名

重启容器

docker restart 容器ID或者容器名

停止容器

docker stop 容器ID或者容器名

强制停止容器

docker kill 容器ID或者容器名

删除已停止的容器

docker rm 容器ID

一次性删除多个容器示例

docker rm -f $(docker ps -a -q)

docker ps -a -q | xargs docker rm

启动守护式容器

docker run -d 容器名

如docker run -d 容器名

查看容器日志

docker logs 容器ID

查看容器内运行的进程

docker top 容器ID

查看容器内部细节

docker inspect 容器ID

进入运行中的容器

docker exec -it 容器ID /bin/bash

docker attach 容器ID

两者区别:

attach 直接进入容器启动命令的终端,不会启动新的进程 用exit退出,会导致容器的停止

exec 是在容器中打开新的终端,并且可以启动新的进程 用exit退出,不会导致容器的停止

从容器内拷贝文件到主机

docker cp 容器ID:容器内路径 目的主机路径

导入和导出容器

export导出容器的内容留作为一个tar归档文件

import从tar包中的内容创建一个新的文件系统再导入为镜像

docker export 容器ID > 文件名.tar
cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
将容器生成新镜像

docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[tag]

VS Code操作docker容器

安装vscode插件:docker、Remote-development

这样就可以查看docker里面的文件目录

在这里插入图片描述

安装SNPE

参考官方文档:https://developer.qualcomm.com/sites/default/files/docs/snpe/index.html

安装Caffe & Caffe2

前往Caffe的官网源 (https://github.com/BVLC/caffe),用git clone https://github.com/BVLC/caffe.git把源码拉下来

cd caffe
git reset --hard 18b09e807a6e146750d84e89a961ba8e678830b4

安装预编译的caffe包

sudo apt install caffe-cuda

snpe安装包下载地址 https://developer.qualcomm.com/downloads/qualcomm-neural-processing-sdk-ai-v1650

注册,登录。下载

docker cp /mnt/d/Code/workspace/snpe-1.65.0_rc2_3676.zip snpe:/home/workspace
unzip -X 1.65.0_rc2_3676.zip
source snpe-1.65.0/bin/dependencies.sh
source snpe-1.65.0/bin/check_python_depends.sh

在这里插入图片描述

把没有安装的依赖库进行安装,根据官方文档所用的版本

在这里插入图片描述

pip install sphinx==2.2.1
pip install scipy==1.3.1
pip install matplotlib==3.0.3
pip install scikit-image==0.15.0
pip install protobuf==3.6.0
pip install pyyaml==5.1

安装ONNX 、protobuf和pytest

pip install onnx==1.6.0
apt-get install python3-pip python3-dev libprotobuf-dev protobuf-compiler
pip install pytest

验证是否安装成功

python -c "import onnx"
pytest
root@b0ef371382ce:/home/workspace/snpe-1.65.0.3676/bin# pytest
=================================== test session starts ====================================
platform linux -- Python 3.6.9, pytest-7.0.1, pluggy-1.0.0
rootdir: /home/workspace/snpe-1.65.0.3676/bin
plugins: nbval-0.9.6
collected 0 items                                                                          

================================== no tests ran in 0.01s ===================================

ONNX环境配置

source bin/envsetup.sh -o $ONNX_DIR

       where $ONNX_DIR is the path to the ONNX installation.

SNPE 模型量化

非量化的DLC文件使用32位浮点表示网络参数。

量化的DLC文件使用网络参数的定点表示,一般是8位

snpe-onnx-to-dlc的输出得到的是一个非量化模型。

snpe-dlc-quantize将模型量化为8位定点

注意,打算使用snpe-dlc-quantize进行量化的模型必须将其batch维度设置为1

ONNX模型转化

snpe-onnx-to-dlc --input_network models/bvlc_alexnet/bvlc_alexnet/model.onnx
                 --output_path bvlc_alexnet.dlc

需要的参数:

input_network:输入的onnx网络模型

output_path:输出的非量化dlc模型

模型量化

snpe-dlc-quantize --input_dlc inception_v3.dlc --input_list image_file_list.txt
                  --output_dlc inception_v3_quantized.dlc

需要的参数:

input_dlc:输入的非量化dlc模型

input_list:输入的量化数据的txt文件,里面是raw images的文件路径

output_dlc:输出的量化dlc模型

快速实验一般需要5-10张图片,鲁棒的实验一般需要50-100张图片

VGG实验示例

设置ONNX环境
cd $SNPE_ROOT # SNPE SDK安装路径
source bin/envsetup.sh -o onnx_dir # ONNX 安装路径

运行snpe-onnx-to-dlc -h无错误表示环境配置成功

下载VGG预训练模型
cd $SNPE_ROOT/models/VGG
wget https://s3.amazonaws.com/onnx-model-zoo/vgg/vgg16/vgg16.onnx
下载一张样本图片和模型标签文件
mkdir data
cd $SNPE_ROOT/models/VGG/data
wget https://s3.amazonaws.com/model-server/inputs/kitten.jpg
wget https://s3.amazonaws.com/onnx-model-zoo/synset.txt
图像预处理和转化为raw文件
mkdir cropped
cd $SNPE_ROOT/models/VGG
python scripts/create_VGG_raws.py -i data/ -d data/cropped/

参数:

-i 表示图像文件夹

-d 表示输出文件夹

Preprocessed successfully!表示处理完成

将生成的raw文件生成txt文件格式
python scripts/create_file_list.py -i data/cropped -o raw_list.txt -e *.raw

参数:

-i raw文件所在位置

-o 输出的文件名

-e 寻找的图片格式

raw_list.txt 文件存放的raw文件的读取位置

在这里插入图片描述

将ONNX模型转化为SNPE DLC格式
snpe-onnx-to-dlc -i vgg16.onnx -o vgg16.dlc

Conversion completed successfully表示模型转化成功

将非量化的DLC模型转化为量化后的DLC模型
snpe-dlc-quantize --input_dlc vgg16.dlc --input_list raw_list.txt --output_dlc vgg16_quant.dlc

Wtring quantized model to:vgg16_quant.dlc表示生成成功

注:转AIP模型的时候,需要加–enable_hta

SNPE支持两种8bit定点的模式

  • 第一种方式,默认量化
  • 第二种方式,增强量化方式,给量化命令snpe-dlc-quantize传入use_enhanced_quantizer从而调用
后量化优化技术(CLE,BC)

snpe-dlc-quantize加入了两种模型预处理技术, CLE和BC,从而改善某些模型由于量化而准确率下降的问题。

CLE是基于RELU激活函数的缩放一致性(scale-equivariance),调整连续两个convolution层的 weights的取值来实现量化友好。简单来说是将偏差较大的convolution层的weights缩小,将下一层convolution层的weights增加。

BC是用来纠正量化过程中在激活中引入的偏差,简单来说,BC技术分别统计浮点模型和定点模型的卷积激活输出的分布,然后对量化模型的统计偏差进行校正,这个修正添加在相应层的bias中。

snpe-dlc-quantize对应的选项是–optimizations。

  • CLE+BC --optimizations cle --optimizations bc ,CLE和BC最好一起使用,它们可以相互补充,CLE非常快(秒),然而BC可能非常慢(几分钟到几小时);

  • CLE --optimizations cle ,BC 单独使用并不会有什么作用。

    CLE的限制:

    1. CLE只能对网络中一个分支中的特定结构进行操作,而且这个特定结构只能有一个输出。支持的结构包括(r=必须的,o=可选择的):
    • Conv®->Batchnorm®->activation(o)->Conv®->Batchnorm®->activation(o)
    • Conv®->Batchnorm®->activation(o)->DepthwiseConv®->Batchnorm®->activation(o)->Conv®->Batchnorm®->activation(o)
    1. CLE算法目前只支持Relu激活,Relu6会被自动转化成Relu,其他activation算法会自动跳过。

    2. CLE需要batchnorms的beta和gamma在原始模型中,这样可以获得最大精度提升。对于TensorFlow,即便是折叠了BN,只要beta和gamma参数没有被折叠进weights和bias,参数就依然存在,如果CLE没有检测到需要的信息,你会看到"Invalid model for HBA quantization algorithm.",这表示只有部分算法运行,可能会影响最终效果。

查看DLC模型信息
snpe-dlc-info -i vgg16.dlc

在这里插入图片描述

snpe-dlc-info -i vgg16_quant.dlc

在这里插入图片描述

运行推理

推理非量化模型

cd $SNPE_ROOT/models/VGG
snpe-net-run --input_list raw_list.txt --container vgg16.dlc --output_dir data/output_dlc

推理量化模型

snpe-net-run --input_list raw_list.txt --container vgg16_quant.dlc --output_dir data/output_quant_dlc
对结果进行后处理从而实现预测

非量化模型的预测结果

cd $SNPE_ROOT/models/VGG
python scripts/show_vgg_classifications.py -i raw_list.txt -o data/output_dlc/ -l data/synset.txt
Classification results
probability=0.339871 ; class=n02123045 tabby, tabby cat
probability=0.329623 ; class=n02124075 Egyptian cat
probability=0.299326 ; class=n02123159 tiger cat
probability=0.021479 ; class=n02127052 lynx, catamount
probability=0.004756 ; class=n02129604 tiger, Panthera tigris

量化模型的预测结果

python scripts/show_vgg_classifications.py -i raw_list.txt -o data/output_quant_dlc/ -l data/synset.txt
Classification results
probability=0.343484 ; class=n02123045 tabby, tabby cat 
probability=0.330398 ; class=n02124075 Egyptian cat
probability=0.296938 ; class=n02123159 tiger cat
probability=0.020620 ; class=n02127052 lynx, catamount
probability=0.004215 ; class=n02129604 tiger, Panthera tigris

Bug汇总

在PowerShell里面输入

wsl --install
wsl --install
PS C:\Users\Dell> wsl --install
wsl : 无法将“wsl”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,
然后再试一次。
所在位置 行:1 字符: 1
+ wsl --install
+ ~~~
    + CategoryInfo          : ObjectNotFound: (wsl:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

需要开启WSL服务以及开启虚拟机特性

参考链接:https://answers.microsoft.com/zh-hans/windows/forum/all/%E6%97%A0%E6%B3%95%E5%8A%A0%E8%BD%BDwsl/f2e4dfc8-9d15-4b53-9c5f-d2c36385b701

建议鼠标右键单击开始按钮(微软图标的按钮)-------"Windows PowerShell(I)"(管理员)(A ),输入:
(建议复制粘贴,逐条输入,防止遗漏。)
sfc /SCANNOW
(按下Enter键)
Dism /Online /Cleanup-Image /ScanHealth
(按下Enter键)
Dism /Online /Cleanup-Image /CheckHealth
(按下Enter键)
DISM /Online /Cleanup-image /RestoreHealth
(按下Enter键)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
(按下Enter键)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
(按下Enter键)
完成后重启电脑,再次输入:

效果图:

在这里插入图片描述

完成后再输入wsl --install

在这里插入图片描述

docker version

在这里插入图片描述

解决方法参考 https://blog.csdn.net/liangllhahaha/article/details/92077065

sudo groupadd docker          #添加docker用户组
sudo gpasswd -a $XXX docker   #检测当前用户是否已经在docker用户组中,其中XXX为用户名,例如我的,liangll
sudo gpasswd -a $USER docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组

snpe-dlc-quantize 不能打开.raw文件

在这里插入图片描述

原因:window系统下的后缀为LF,而linux的后缀为CRLF。当使用VS code时,需要将对应的后缀编码进行修改

在这里插入图片描述

使用VS code生成txt文件时的文件路径后面多了^M$

在这里插入图片描述

而使用WSL生成txt文件时没有多余的内容。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值