win10 nvidia-mx350 tensorflow开发环境配置

买了台小米笔记本pro 15.x 2020版本,装ubuntu双系统wifi、蓝牙等等驱动有问题,导致ubuntu启动不了,又不想浪费gpu,所以决定用win10搭建一个开发环境

wsl2

参考https://docs.microsoft.com/zh-cn/windows/wsl/install-win10

为了使用一些linux命令,要启用wsl系统(以下代码块里面的东西使用跨环境powershell运行):
#启用wsl

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

#启用虚拟机

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

#重启之后,下载并安装wsl2升级包
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

#设置linux分发的默认安装位置为wsl2

wsl --set-default-version 2

我习惯用ubuntu16.04,在https://www.microsoft.com/store/apps/9pjn388hp8c9直接安装
,这样任何位置shift+右键就可以出现linux shell了,在linux环境下访问windows系统的资源,可以进入/mnt/目录。再提一下,如果你想改变powershell的起始位置,可以点win图标,在powershell上面“右键–更多–打开所在位置”,然后在windowspowershell快捷上右键,将位置选项卡的路径改成你要的起始路径。最后说明一下这里的ubuntu系统是封闭在C盘里面的某个目录下面的,直接在里面搭建开发环境容易有各种细小问题,所以还是在win10里面弄吧。

GPU相关的问题

参考https://www.freesion.com/article/62761032916/

在ubuntu里面都要先装nvidia的显卡驱动,但是这里你在powershell里面输入nvidia-smi是可以出来东西的,所以就直接装cuda和cudnn吧

声明一下,如果你是仅仅在tensorflow用gpu,那么貌似cuda,cudnn都不用费心去装了,因为anaconda的conda install命令可以自动解决这些驱动问题。也就是说,下面要部署的驱动,在conda环境里面是可以不用的。不过有些时候是要用c语言做cuda开发,所以可能还是会用到,下面看看脱离anaconda环境,怎么安装这些驱动吧。

CUDA

在这里插入图片描述
win10 nvidia-mx350 tensorflow开发环境配置_第1张图片
弹出“系统信息”对话框,找到“组件”–>“NVCUDA.DLL”项,查看到本机适合安装CUDA版本。mx350会说是cuda 11.0.208
所以到官网迅雷下载cuda_11.0.2_451.48_win10.exe

https://developer.nvidia.com/cuda-11.0-download-archive
选择自定义安装,但是所有都是默认,包括安装路径为c盘,起始你可以更改的,但是我怕有问题,所以没尝试。
会自动创建环境变量,但是你最好确定一下
win10 nvidia-mx350 tensorflow开发环境配置_第2张图片
另外要确保path系统变量
在这里插入图片描述

运行powershell,输入nvcc --version 即可查看版本号
在如下路径运行deviceQuery.exe,如果出现pass说明没问题了
win10 nvidia-mx350 tensorflow开发环境配置_第3张图片

cudnn

去这里面下载
https://developer.nvidia.com/rdp/cudnn-download
win10 nvidia-mx350 tensorflow开发环境配置_第4张图片
下载后将bin、include、lib/x64文件夹里面所有的东西复制到Cuda安装地址:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0对应目录下面

anaconda3

去清华镜像下载Anaconda3-4.3.0-Windows-x86_64.exe安装在D:\ProgramData\Anaconda3下
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
其实也可以下载最新版的anaconda,比如Anaconda3-2022.10-Windows-x86_64.exe,这个时候root的python版本很高,不过你可以自己创建低版本的虚拟环境。下面会讲。

右键快捷方式的建立:win+R —> regedit —>在计算机\HKEY_CLASSES_ROOT\Directory\Background\shell建立如下的两个目录
win10 nvidia-mx350 tensorflow开发环境配置_第5张图片
其中anaconda上面建立两个键,一个是右键名称anaconda prompt, 另一个是icon
在这里插入图片描述
command上面建立一个键,值为cmd.exe “/K” D:\ProgramData\Anaconda3\Scripts\activate.bat D:\ProgramData\Anaconda3
在这里插入图片描述

然后修改国内源,anaconda prompt里面输入
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
这个时候,看看是不是在
在C:\Users\你的名字\下面建立了.condarc文件, 这一步主要是确认这个.condarc是建在哪里的。然后参考https://mirror.tuna.tsinghua.edu.cn/help/anaconda/修改这个文件的内容为

channels:
  - defaults
show_channel_urls: true
channel_alias: https://mirrors.tuna.tsinghua.edu.cn/anaconda
default_channels:
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
  - http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
  conda-forge: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

pip的换源也是类似的,在C:\Users\xxx\AppData\Roaming\pip路径下面建立一个pip.ini文件,文件内容为下图所示,其中第一个是修改缓存路径

[global]
cache-dir = D:\\ProgramData\\Anaconda3\\pip_cache_dir\\cache
index-url = http://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com

建立新环境
如果你本身root的python是3.6的话,这里root会自带jupyter notebook等必须的包
conda create -n python3.6 --clone root
然后activate python3.6来继续tensorflow的安装。

但是如果你完全重新建环境的话,最好这样做
conda create -n xxx python=3.6 openssl tornado=4.5 jupyter nb_conda
这样就能把一些自己很难装的环境一次弄好。但是这个时候jupyter依然会有问题,因为tornado版本太高,需要降级
conda activate xxx
conda install tornado=4.5
这个时候你就可以查看你的jupyter的各个kernel
jupyter kernelspec list
还可以删除
jupyter kernelspec remove
这个时候pip和setuptools版本太低,会导致后面装包存在很多问题。因此需要升级
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
更改缓存路径
conda acitivate xxx
pip --cache-dir D:\ProgramData\Anaconda3\pip_cache_dir\cache
conda的缓存路径可以用conda info来查看
这个时候装公司的automan
pip install automan
但是xgboost, pandas, 等版本太低了。需要更新
pip install --upgrade numpy
pip install --upgrade pandas
pip install --upgrade xgboost

Tensorflow

参考https://tensorflow.google.cn/install/pip#windows

首先到这个地址下载vs studio
https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads/

下载并安装Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019, 具体是一个vs_community__32203583.1608264784.exe文件

我们知道tf1和tf2,以及里面的各个版本对cuda和cudnn的要求是不一样的,也就是我们之前安装的cuda和cudnn对于tf1(一般要求用cuda10)肯定是不适用的。那么难道多版本的切换这种事情没法做吗?当然不是。在对应的conda env里面conda install tensorflow-gpu=xxxx就可以自动下载并在conda环境里面安装合适的cudatoolkit和cudnn,也就解决版本切换的问题了,并且貌似完全不会用到我们自己在系统上安装的cuda和cudnn(这里其实我没有试,但是感觉是这样的)! !

我们目前要解决的问题是,我的显卡mx350最高能用什么版本的tensorflow。之前已经说过,mx350是支持用cuda11的,https://tensorflow.google.cn/install/source_windows显示当前的最高版本tensorflow-gpu 2.4.0是用cuda11和cudnn8.0测试过的,更低的tensorflow版本用的cuda和cudnn版本更低,从向下兼容的角度来看,我的显卡应该是支持所有tensorflow版本的。
win10 nvidia-mx350 tensorflow开发环境配置_第6张图片
你可以用anaconda prompt:

activate python3.6
# 会自动更新3.6的最高版本到3.6.12
conda install tensorflow-gpu=1.13.1
pip install toad
pip install xgboost
pip install lightgbm
python
import tensorflow as tf

activate tf2
# 会自动更新3.6的最高版本到3.6.12
conda install tensorflow-gpu=2.1
pip install toad
pip install xgboost
pip install lightgbm
python
import tensorflow as tf

# 最近更新!!!!
有时候用conda install ...会要求升级你的python 到一个更高的版本,另外连带产生很多问题。这个时候其实你就pip install tensorflow-gpu==....就可以了。检验tf.test.is_gpu_available()如果为False提醒cuda动态库无法加载,那就conda install cudatoolkit==1X.0选择你要的版本,这个时候就会在这个conda 环境里把cuda和cudnn装好了
# 又最近更新,apex安装的时候,你可以使用系统层面的cuda,但是如果你想用conda虚拟环境里面的cuda的话,就要动脑筋了
conda create -n conda-apex python=3.7
conda activate conda-apex
# 这个只是pytorch需要的一部分cuda,但是,是不全的
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
# 因此,要编译apex的时候,需要nvcc来编译, 注意版本和装pytorch的时候的cuda匹配
conda install cuda-nvcc=11.7
# 同时, 要编译apex的时候,还需要CUDA_PATH这些路径,因此还需要装以下,注意版本和装pytorch的时候的cuda匹配
conda install cuda -c nvidia/label/cuda-11.7.0
git clone https://github.com/NVIDIA/apex
cd apex
pip install -v --disable-pip-version-check --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./

git

在淘宝的镜像下载Git-2.30.0-rc0-64-bit.exe并安装
https://npm.taobao.org/mirrors/git-for-windows/
为公司和自己分别生成ssh key

ssh-keygen -t rsa -C '自己邮箱' -f ~/.ssh/github-rsa
ssh-keygen -t rsa -C '公司邮箱' -f ~/.ssh/gitlab-rsa
(windows里面~/ 就是/c/Users/你的名字)
~/.ssh目录下会有gitlab_id-rsa、gitlab_id-rsa.pub和github_id-rsa、github_id-rsa.pub四个文件
再在~/.ssh目录下新建config文件,内容为
# gitlab
Host gitlab.com
    HostName gitlab.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/gitlab_id-rsa
# github
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github_id-rsa

JAVA

参考https://blog.csdn.net/weixin_44950174/article/details/105192568

去官网下载并安装jdk-8u271-windows-x64.exe,注意路径不能含空格,有空格会导致spark安装有问题,所以我的安装路径是D:\ProgramData\Java

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

系统变量→新建 JAVA_HOME 变量 ,变量值填写jdk的安装目录(我是
D:\ProgramData\Java\jdk1.8.0_271)

系统变量→寻找 Path 变量→编辑→添加两条:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin

系统变量→新建 CLASSPATH ,变量值填写
%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

检验是否配置成功 运行powershell
输入java -version 显示版本信息 则说明安装和配置成功。

maven

参考https://blog.csdn.net/weixin_44950174/article/details/105192568

去官网https://archive.apache.org/dist/maven/maven-3/下载apache-maven-3.6.0-bin.zip ,解压缩到D:\ProgramData\apache-maven-3.6.0
win10 nvidia-mx350 tensorflow开发环境配置_第7张图片

在D:\ProgramData\apache-maven-3.6.0新建一个文件夹localrepository
在D:\ProgramData\apache-maven-3.6.0的conf里面把settings.xml保存一个副本,然后在settings.xml原文件里面修改
#配置本地仓库

  D:\ProgramData\maven-3.6.0\localrepository

#配置国内镜像,提高拉jar包的速度


    
        nexus-aliyun
        *
        Nexus aliyun
        http://maven.aliyun.com/nexus/content/groups/public
    
 

在系统变量,点击“新建”,新建一个变量。变量名为maven_home,变量值为maven文件的存放目录,在这里我是D:\ProgramData\maven-3.6.0

接着在系统变量中找到path变量,添加%maven_home%\bin

打开powershell命令窗口,输入mvn -version,如果出现版本信息,就说明安装成功了

mysql

去官网下载mysql-5.7.31-winx64.zip
https://downloads.mysql.com/archives/community/

解压到D:\Program Files\mysql-5.7.31-winx64,在D:\Program Files\mysql-5.7.31-winx64里面新建my.ini文件和一个data文件夹,编辑my.ini(可以安装notepad++来编辑)

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Program Files\mysql-5.7.31-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Program Files\mysql-5.7.31-winx64\data
tmpdir=D:\Program Files\mysql-5.7.31-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

系统变量添加MYSQL_HOME,变量值D:\Program Files\mysql-5.7.31-winx64

在path中添加%MYSQL_HOME%\bin

以管理员的身份打开powershell窗口跳转路径到D:\Program Files\mysql-5.7.31-winx64
初始化命令mysqld --initialize --user=mysql --console
会产生密码
win10 nvidia-mx350 tensorflow开发环境配置_第8张图片

接着就是输入mysqld -install进行服务的添加

输入net start mysql启动服务

输入mysql -u root -p进行登录数据库,这时提示需要密码,然后就是用你上面的密码登录

修改密码为123456
ALTER USER root@localhost IDENTIFIED BY ‘123456’

去https://sqlyog.en.softonic.com/安装图形工具,略去不表

scala

访问官方地址下载scala-2.12.10.msi并双击安装到D:\ProgramData\scala

http://www.scala-lang.org/download/2.12.10.html

创建系统变量SCALA_HOME,变量值D:\ProgramData\scala
编辑系统变量path,添加%SCALA_HOME$\bin

powershell输入scala验证是否成功

hadoop

https://archive.apache.org/dist/hadoop/common/
下载hadoop-2.8.3.tar.gz,其实下一步安装Spark中我们选择下载的Spark版本为spark-3.0.1-bin-hadoop2.7,该版本Spark要求对应的Hadoop要在2.7及以上版本,所以此处我们选择Hadoop-2.8.3选择其他更高的版本也是可以的。

然后用linux shell 的tar -zxvf解压并存放在D:\ProgramData\hadoop-3.0.1

系统变量创建HADOOP_HOME,值为D:\ProgramData\hadoop-3.0.1
编辑path,添加
%HADOOP_HOME%\bin
%HADOOP_HOME%\sbin

https://github.com/steveloughran/winutils下载wintuils工具hadoop-2.8.3,把里面的winutils.exe文件保存到本地D:\ProgramData\hadoop-2.8.3\bin\目录下,把里面的hadoop.dll文件保存到本地D:\ProgramData\hadoop-2.8.3\sbin\目录下和C:\Windows\system32

powershell输入hadoop看是否成功

spark

http://spark.apache.org/downloads.html下载spark-3.0.1-bin-hadoop2.7.tar,用linux shell解压缩到D:\ProgramData\spark-3.0.1-bin-hadoop2.7

系统变量创建SPARK_HOME,值为D:\ProgramData\spark-3.0.1-bin-hadoop2.7
编辑path,添加
%SPARK_HOME%\bin

powershell输入spark-shell会出现scala的界面

将D:\ProgramData\spark-3.0.1-bin-hadoop2.7
/python里面的pyspark包拷贝到anaconda的环境里面,比如env phthon3.6的目录下面
D:\ProgramData\Anaconda3\envs\python3.6\Lib\site-packages
anaconda prompt输入pyspark会出现python的界面
创建系统变量PYSPARK_DRIVER_PYTHON,值为ipython
创建系统变量PYSPARK_DRIVER_PYTHON_OPTS,值为"notebook"
anaconda prompt输入pyspark会出现jupyter的界面

Scala_Jupyter

git clone https://github.com/almond-sh/almond.git

用anaconda shell, cd进入比如D:\ProgramData\almond

首先要特别注意的是,windows power shell里面输入spark-shell可以看到我们的spark是预编译scala 2.12.10的,也就是说你单纯用spark-shell,pyspark之类的话是完全不需要你自己装scala的,而且即便你自己装了scala,spark用的scala和你刚才自己装的scala没有关系,版本可以不一样。但是现在我们要在jupyter里面加一个scala的kernel,这个kernel需要匹配刚才自己单独装的scala。另外要说的是,由于我们后面需要在jupyer里面用spark,我们的kernel用的scala的版本需要和spark预编译的scala版本一致,这就是上面我们自己装scala要下载2.12.10的原因。

从这个链接可以看到,如果要用最新版本的almond 0.10.9的话,它是支持scala 2.12.xx的
https://github.com/almond-sh/almond/releases
https://almond.sh/docs/install-versions

bitsadmin /transfer downloadCoursierCli https://git.io/coursier-cli "%cd%\coursier"
bitsadmin /transfer downloadCoursierBat https://git.io/coursier-bat "%cd%\coursier.bat"
.\coursier launch --fork almond:0.10.9 --scala 2.12.10 -- --install

如果要更新,用–force

.\coursier launch --fork almond:0.10.9 --scala 2.12.10 -- --install --force

然后在anaconda shell里面输入jupyter notebook就可以切换kernel到scala了

如果我们要用spark的话,参考
https://almond.sh/docs/usage-spark
在jupyter里面输入

import $ivy.`org.apache.spark::spark-sql:3.0.1`
import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.OFF)
import org.apache.spark.sql._
val spark = {
  NotebookSparkSession.builder()
    .master("local[*]")
    .getOrCreate()
}
def sc = spark.sparkContext
val rdd = sc.parallelize(1 to 100000000, 100)
val n = rdd.map(_ + 1).sum()

你可能感兴趣的:(开发,深度学习,深度学习,tensorflow)