MXNet是亚马逊使用的一个优秀的开源框架,能方便用到多GPU,功能强大,值得学习,本人是在已有Anaconda环境下安装,没有安装的也可以安装Miniconda,mini版本小很多,包含有conda软件包管理器和Python。
目前对于深度学习框架,最热门的是Google的TensorFlow,后期一段时间主要学习MXNet,这个框架对于分布式有很好的支持,性能很好,占用显存小的优势。
关于安装Anaconda和CUDA,感兴趣的伙伴可以阅读:
视频换脸AISWAP技术示例https://blog.csdn.net/weixin_41896770/article/details/118114636
目录
1、新建一个虚拟环境(这样可以有效的管理不同的项目)
2、安装GPU版本与CPU版本的MXNet
3、安装d2l包,方便使用里面的函数和类
一些错误处理
查看conda版本
conda --version 或 conda -V
conda 4.3.14
查看虚拟环境列表
conda env list
# conda environments:
#
myd2l * D:\Anaconda3\envs\myd2l
root D:\Anaconda3
创建名称为myd2l的虚拟环境
conda create -n myd2l python=3.7
激活并进入环境(conda版本4.4以上是conda activate myd2l)
activate myd2l
(myd2l) C:\Users\Tony>
退出环境
deactivate
删除环境
conda remove -n myd2l --all
Windows查看CUDA版本
nvcc --version 或 nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2021 NVIDIA Corporation
Built on Mon_May__3_19:41:42_Pacific_Daylight_Time_2021
Cuda compilation tools, release 11.3, V11.3.109
Build cuda_11.3.r11.3/compiler.29920130_0
或者进入“NVIDA控制面板”,查看“系统信息”,点击“组件”,将会看到NVCUDA64.DLL对应的产品名称!
版本对应查看地址,CUDA是11.3的版本,根据自己的版本来更改【本人的CUDA版本比较新,没有匹配的,目前最高是支持mxnet-cu110的1.8的版本,只能等后期了】
pip install mxnet-cu113==1.7.0 -f https://dist.mxnet.io/python
如果没有NVIDA GPU或CUDA,那就只能使用CPU版本
pip install mxnet==1.7.0.post1
pip install d2l==0.17.3
安装d2l的时候如果报错,也是镜像问题,国外的容易超时,我们可以选择阿里或国内其他站点镜像,下载安装的速度快太多了
pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com d2lzh
import d2lzh as d2l
dir(d2l)
['Benchmark', 'RNNModel', 'Residual', 'VOCSegDataset', 'VOC_CLASSES', 'VOC_COLORMAP', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'autograd', 'bbox_to_rect', 'collections', 'corr2d', 'count_tokens', 'data_iter', 'data_iter_consecutive', 'data_iter_random', 'display', 'download_imdb', 'download_voc_pascal', 'evaluate_accuracy', 'gdata', 'get_data_ch7', 'get_fashion_mnist_labels', 'get_tokenized_imdb', 'get_vocab_imdb', 'gloss', 'gluon', 'grad_clipping', 'gutils', 'image', 'init', 'linreg', 'load_data_fashion_mnist', 'load_data_jay_lyrics', 'load_data_pikachu', 'load_data_time_machine', 'math', 'mkdir_if_not_exist', 'mx', 'nd', 'nn', 'np', 'os', 'plt', 'predict_rnn', 'predict_rnn_gluon', 'predict_sentiment', 'preprocess_imdb', 'random', 'read_imdb', 'read_voc_images', 'resnet18', 'semilogy', 'set_figsize', 'sgd', 'show_bboxes', 'show_fashion_mnist', 'show_images', 'show_trace_2d', 'squared_loss', 'sys', 'tarfile', 'text', 'time', 'to_onehot', 'train', 'train_2d', 'train_and_predict_rnn', 'train_and_predict_rnn_gluon', 'train_ch3', 'train_ch5', 'train_ch7', 'train_gluon_ch7', 'try_all_gpus', 'try_gpu', 'use_svg_display', 'utils', 'voc_label_indices', 'voc_rand_crop', 'zipfile']
除了常用的pip,当然也可以使用conda来安装,比如conda install pandas
查看安装了哪些包
conda list
在安装的时候可能会遇到下载不完全,超时的错误,主要还是国外站点访问慢的原因
pip._vendor.urllib3.exceptions.SSLError: The operation did not complete (read) (_ssl.c:2178)
可以选择国内镜像,比如豆瓣
pip install mxnet -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
创建虚拟环境时报错
D:\>conda create --prefix="D:\\my_python\\envs\\TonyMXNET" python=3.6.1
Fetching package metadata .....
CondaHTTPError: HTTP None None for url
Elapsed: None
An HTTP error occurred when trying to retrieve this URL.
HTTP errors are often intermittent, and a simple retry will get you on your way.
SSLError(SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),),)
还是网站的问题,选择境内清华大学的镜像,修改.condarc文件的地址,更容易下载,可以将https修改为http,这样也不存在SSL认证相关的报错问题了。
channels:
- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
- http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
show_channel_urls: true
安装mxnet时候报错
Traceback (most recent call last):
File "
File "D:\Anaconda3\envs\TonyD2L\lib\site-packages\mxnet\__init__.py", line 82, in
from . import gluon
File "D:\Anaconda3\envs\TonyD2L\lib\site-packages\mxnet\gluon\__init__.py", line 36, in
from . import data
File "D:\Anaconda3\envs\TonyD2L\lib\site-packages\mxnet\gluon\data\__init__.py", line 26, in
from .dataloader import *
File "D:\Anaconda3\envs\TonyD2L\lib\site-packages\mxnet\gluon\data\dataloader.py", line 278
generator = lambda: [(yield self._batchify_fn([self._dataset[idx] for idx in batch]))
^
SyntaxError: 'yield' inside list comprehension
语法错误,版本问题,不能太高版本,引起这个错误的是我开始指定的是python3.9的版本,后来改为3.7版本就可以了
测试是否安装成功
from mxnet import nd
dir(nd)
返回nd的属性与方法列表,就表示成功了,其中nd是ndarray的缩写形式,在MXNet中,是NDArray类,存储和变换数据的主要工具,和numpy的多维数组很相似,功能更强大,提供了GPU计算和自动求梯度等,使得NDArray更适合深度学习!
nd.array([[2,3,4],[5,4,5]])
类型是
上述是在命令行里面可以正常加载mxnet,发现在Jupyter Notebook中却不能加载。
ModuleNotFoundError: No module named 'mxnet'
原因是由于jupyter内核中指定的python路径和当前运行的python路径不一致导致的,我们可以查看jupyter核心模块地址
(myd2l) C:\Users\Tony> jupyter kernelspec list
Available kernels:
python3 D:\Anaconda3\envs\myd2l\share\jupyter\kernels\python3
进入这个目录打开kernel.json,试着修改了地址发现无效。于是就直接在这个虚拟环境里面新增一个kernel来搞定
(myd2l) C:\Users\Tony>python -m ipykernel install --user --name=myd2l --display-name py37
Installed kernelspec myd2l in C:\Users\Tony\AppData\Roaming\jupyter\kernels\myd2l
(myd2l) C:\Users\Tony> jupyter kernelspec list
Available kernels:
myd2l C:\Users\Tony\AppData\Roaming\jupyter\kernels\myd2l
python3 D:\Anaconda3\envs\myd2l\share\jupyter\kernels\python3
可以看到成功增加了一个kernel,选择py37,试着加载mxnet,成功执行。
删除内核
jupyter kernelspec remove myd2l
查看kernel.json文件内容如下:
{
"argv": [
"D:\\Anaconda3\\envs\\myd2l\\python.exe",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "py37",
"language": "python",
"metadata": {
"debugger": true
}
}