研究生找了个搞数据库的导师,结果还是躲不过这玩意。。现在啥都得结合深度学习。。。
现在有一个项目需要我跑起来,然后我今天搞了一天的环境,问题有点多。
一开始不清楚就直接装了个 python3.9,然后有个 requirements.txt ,安装包的时候出错,查了一下发现里面用到了 tensorflow1,只能用 3.6,然而我已经不知道要怎么把 python3.9 换成 3.6 (试了几种方法。。。反而把环境搞乱了也没成功)
所以我打算用 docker,反正在本地只要跑跑 demo 就行,所以我写了一个 dockerfile,基于 python3.6 的镜像,把 requirements.txt 拷贝进去再安装,但是还是出现了很多错误。。
其中就有一些红色的也不知道错误还是警告
UserWarning: CUDA initialization: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:100.)
这我才想起来好像深度学习得用到一种叫 cuda 的东西,似乎就是这里出的问题。
所以我的问题是,这个 cuda 的环境,我是应该把他装在 docker 容器里吗?还是装在宿主机上,而且我用的是 windows 的 WSL,如果是装在容器里,我应该是找个 linux 镜像,然后再按照系统找到对应的 cuda 版本装上,然后再装上 python 等等。。。。感觉更麻烦了。。。。
所以我还想问针对我配置环境(装个 python3.6 装 cuda 装一些 python 包。。。)这个问题,有没有最简单的方法可以搞定。。。实在是太混乱了
发完帖子又想了一下,我应该是基于一个 cuda 的镜像,在上面装个 python3.6,再装 python 包,是这样吗?
然后 cuda 我的理解它应该是跟硬件相关的吧,那这个 cuda 镜像要根据我机器的显卡还是别的啥来选吗?而且我还多了一层 WSL
我看我电脑只支持 cuda8.0,那我就只能装 8.0 的 docker 镜像吗?
没辙了,requirement.txt里面还有一些包要手动编译安装的,我用windows的话安装个锤子,那么一大堆依赖看着就头疼
装个双系统ubuntu吧。。。
最新进展。。。。
经过了一个下午和晚上的折磨之后,最终使用了conda,一些库直接用conda install,然后还结合了pip
出现了几个问题。。。。一个在github issue找到答案,卸载掉conda安装的pytorch,改用pip手动安装,解决。另一个比较迷,一开始torch能导入,但是提示啥属性都没有,后来就重装了一下pytorch,就解决了。
太痛苦了,经过两天时间代码终于能跑起来了(其实也没跑起来,跑一小会内存不够),不过至少可以开始看代码学习了。。。
准备退学了
1
ganzi 2021-05-20 23:03:12 +08:00
今天恰好在琢磨这个,直接用 conda 新建一个环境啊,在环境里下载自己想要的版本,cuda 也可以选择版本这里去找(一般是 8-11 选吧) https://anaconda.org/search?q=cuda,不会影响本机的。
实验室的机子太多人用了,我就用了 Google Colab,但是这个上面也是坑。如果你不用 conda 的话,用 Google Colab 去搭建学习环境还是可以的。我一般就是在上面跑 GNN 。 |
2
renmu123 2021-05-20 23:09:54 +08:00 via Android
我推荐直接装个 Ubuntu 来操作,wsl 还可能遇上各种坑。
Python 版本你可以用 pyenv 来进行管理。 |
3
ipwx 2021-05-21 00:11:34 +08:00 1
1. Windows 别想了。本体用 TensorFlow / PyTorch 可能会有各种奇怪的问题,因为你这真的是小众平台很少有搞学术这么做的,碰到问题不好解决。而 WSL/WSL2/虚拟机都是不可能用 CUDA 的,无解。
2. Linux 下用 Docker 启动 CUDA + TensorFlow 是可能的。我在实验室这么干了好几年了,不然我们实验室那么多人用服务器,每个人环境都不同,我得管死。 |
4
Muniesa 2021-05-21 00:31:39 +08:00 via Android 1
Windows 的 docker 用不了 CUDA,wsl2 的 CUDA 支持我记得还在内测,如果 Linux 环境是必需的那就只能物理机装上 Linux 系统,如果不是,用 conda 装 Python 对应版本和 CUDA 是最简单的。
|
5
BeautifulSoap 2021-05-21 00:48:03 +08:00 via Android
Windows 下 Python 搞 ai 之类的话直接上 conda 呀,管你 Python 环境多乱,都没影响。人生苦短何必折腾自己
以及 wsl2 支持 cuda 的,不过需要预览版,NVIDIA 官方就有文档: https://docs.nvidia.com/cuda/wsl-user-guide/index.html 不过我觉得比起折腾 wsl2,可能还是 Windows 本地用 conda 跑或直接装个 Ubuntu 会比较靠谱 |
6
BeautifulSoap 2021-05-21 00:53:05 +08:00 via Android
@BeautifulSoap 看了下 NVIDIA 的文档,wsl2 用 cuda 并不复杂,而且 docker 怎么用支持文档也有说,lz 想试试的话可以系统升到 insider 后用 wsl2 玩玩看。wsl2 被你玩坏了的话直接删了对应发行版重装就行,也算清爽
|
7
houshuu 2021-05-21 01:02:49 +08:00
1. Windows 用 miniconda 建立环境,然后安装相应的 gpu 支持 TensorFlow 包,会自动配置。PyTorch 同理。不需要初始化 Python 版本,在安装包的时候会自动适配可用版本。不建议折腾 wsl2 开 cuda 支持,一个是麻烦,要开发者测试版 Windows,另外那个测试版本的显卡驱动会影响到平常显卡性能。
2. Linux 下 Docker 建议直接用 TensorFlow 的环境或者 NVIDIA 提供的 CUDA 镜像,同时记得 Docker 要加 --gpus all 参数才能进行调用。具体习惯什么小版本可以在 Dockerhub 上自己慢慢筛选。 现在学术界普遍是 Linux 的 Docker 方案。 |
8
longbye0 2021-05-21 01:53:13 +08:00
既然不会,那就别用 cuda on wsl,老老实实用 ubuntu 。社区用的人多,你能遇到的问题,网上基本都能找到。
|
9
IgniteWhite 2021-05-21 02:08:40 +08:00
楼主不明白的东西这么多的话,就像楼上说的,不要用 docker,docker 配 cuda 折腾驱动麻烦,你以为 docker 开箱即用,其实对于你的需求更麻烦。整一个流行的 Linux 发行版,按主流教程装好 cuda,然后回归配置 conda 虚拟环境的基本路线,把需要用的包装上,然后开用。如果是为了科研,那你和我需求一样,很建议使用 Jupyter 来写代码。
补充信息:conda 新建环境的官方教程 https://conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html#creating-an-environment-with-commands,其他和环境有关的操作里面也都有。conda 能制定 python 版本(这里就不介绍 pyenv 了,对于机器学习 conda 合适)。你建立好 venv (虚拟环境)之后随便试错,玩坏了删掉这个 venv,不影响你已经配置好的 cuda 和驱动。 |
10
zxCoder OP @ganzi
@renmu123 @ipwx @Muniesa @BeautifulSoap @houshuu @longbye0 @IgniteWhite 所以最好的做法应该是装一个 linux 双系统吗……前段时间刚把开发环境都转成 wsl2…… |
11
zxCoder OP |
12
IgniteWhite 2021-05-21 08:18:32 +08:00
其实不如让你老板申请个超算啊……提交个 job 去算,分分钟的事
|
14
zxCoder OP @IgniteWhite 。。。。。。你见过 python 的不会装的人直接用超算吗
|
15
christin 2021-05-21 08:35:06 +08:00 via iPhone
有双币信用卡的话可以搞个免费的谷歌云 现在只能用 3 个月了 但还是 300 刀 够整个 8g 的了
|
17
IgniteWhite 2021-05-21 08:53:13 +08:00
@zxCoder 超算和 python 两码事,学校一般都有课教的呀。而且超算搞不好有配好的环境,比问我们靠谱
|
18
ipwx 2021-05-21 09:57:17 +08:00
|
19
NSAgold 2021-05-21 10:09:44 +08:00
两个选择 Windows Linux
Windows 现在装 tensorflow 不用再区分 gpu/cpu 版本了,直接装最新版就行。建议用 anaconda 。 Linux 的话 ubuntu,也是推荐用 anaconda 环境。 不过不管哪个,CUDNN 和 cuda 应该都需要另行下载安装 |
20
supercaizehua 2021-05-21 10:10:04 +08:00
建议还是装一个 Ubuntu,然后在 Ubuntu 上面配置环境,不要用 WSL,wsl 前一阵子刚开始支持 cuda,还有许多 bug,即使你现在弄好了,可以跑起来示例了,之后弄自己的模型还是有一堆问题,亲身经历
|
21
oska874 2021-05-21 10:10:24 +08:00 via Android
新版本的 nv docker on wsl 有问题,不能用。之前版本 gpu docker 是正常的。
|
22
arjen 2021-05-21 10:22:38 +08:00
用 virtualenv, 每个项目一个 python 环境
|
23
zxCoder OP |
24
goodryb 2021-05-21 10:53:47 +08:00
WSL+ docker 想想都头大,还要上 CUDA,放过孩子吧
|
25
RockShake 2021-05-21 10:54:54 +08:00
Windows 下面用 conda,别跟自己过不去
|
26
necomancer 2021-05-21 11:02:40 +08:00
windows 有 cuda,也可以使用 pip 安装 tensorflow gpu 版。这里:
https://www.tensorflow.org/install/gpu wsl 是另一回事,目前我没记错的话在开发中,wsl 需要注册开发账户才能从 nvidia 下载到对应的驱动(win),wsl 里才能使用 gpu 程序。 |
28
ipwx 2021-05-21 14:30:50 +08:00
@zxCoder 还有 graph_tool,滑稽~
你可以看看我这个版本适合不: https://hub.docker.com/layers/129864161/haowenxu/ml-runtime2/gpu-cuda10.1-cudnn7-py3.6-torch1.7.1/ Python 3.6 CUDA 10.1 CUDNN 7 PyTorch 1.7.1 带 graph-tool |
29
ipwx 2021-05-21 14:31:06 +08:00
唯一不带的好像是 TensorFlow,你自己随便装一个
|
30
ipwx 2021-05-21 14:32:06 +08:00
|
31
zxCoder OP @ganzi
@renmu123 @ipwx @Muniesa @BeautifulSoap @houshuu @longbye0 @IgniteWhite @christin @NSAgold @supercaizehua @oska874 @arjen @goodryb @RockShake @necomancer 各位大哥,我现在装好 ubuntu 环境了,想问一下 python 现在主流的这种 虚拟环境 /隔离环境 /包管理 啥的是什么方案 争取一次成功,别再把环境搞乱了。。。 |
32
BeautifulSoap 2021-05-21 14:45:46 +08:00
@zxCoder 你做学术的话就直接用 conda
|
33
pickteemo 2021-05-21 14:53:38 +08:00
按你的情况直接 Ubuntu+Conda 是最好的....conda10 分钟了解一下就好了
|
34
GarrickLin 2021-05-21 15:13:55 +08:00 via Android
@ipwx wsl 已经开始支持 cuda 了 详见 wslg 项目
|
35
Muniesa 2021-05-21 15:17:31 +08:00
@zxCoder 独显驱动装好了吗?装好了就可以装一个 miniconda,用 conda 新建一个环境,可以指定 python 版本,CUDA 如果只是调用的话可以只使用 conda 的 cudatoolkit,也可以指定版本(显卡驱动版本太旧就不支持新版本的 cudatoolkit ),不影响系统的显卡驱动和 cuda 版本。
按你说的装个 python3.6 装 cuda 装一些 python 包,在 conda 下可以这么操作: 创建新环境: conda create -n env_name python=3.6 激活环境: conda activate env_name 安装 cuda: conda install cudatoolkit=10.2 装一些 python 包: 可以用 conda 装也可以用 pip 装 比如: conda install numpy 或者: pip install numpy 这样装的 python 包都是在 conda 的环境中的,可以使用 conda list 查看,如果新项目要换 python 版本和 cuda 版本就新建一个环境。 |
36
zxCoder OP @Muniesa 谢谢详细解答 我有两个小问题
cuda 我刚才在官网下载安装好了某个版本,这样子在 conda 里也可以用吗?还是要按你说的,在 conda 里安装 还有就是我在 miniconda 这个下载页里看到很多个版本,https://docs.conda.io/en/latest/miniconda.html,这里的 python 版本是指什么意思呢?我想装 3.6 的,那我下载 miniconda 应该装哪个版本才行 |
37
zxCoder OP |
38
Muniesa 2021-05-21 16:03:01 +08:00
@zxCoder 我用 conda 装的 pytorch 会优先使用虚拟环境里的 cudatoolkit,想用手动安装的 CUDA 可能需要修改环境变量之类的。安装包的 python 版本是默认的 base 环境的 python 版本,不影响新建环境的 python 版本,想要用 3.6 就新建一个环境就好了。
|
40
Muniesa 2021-05-21 16:09:46 +08:00
@zxCoder 官网下的 CUDA 以后有需要再装也可以,之前是碰到过有个包必须要 CUDA 编译,大部分情况 conda 的 cudatoolkit 是够用的。
|
41
fannas 2021-05-21 16:21:20 +08:00 via iPhone
申请点钱用 azure notebook 吧…跑的飞快,不用关掉就行…
|
42
zxCoder OP @Muniesa 再请教一个问题。。。我现在有个 requiremets.txt 里面指定了一些包的版本,不过我看上面都没有指定 gpu 还是 cpu 版本,比如 tensorflow pytorch,还有很多我不认识的包,所以直接装整个 requirements 文件有些会出错,有些会装成 cpu 版本(但是我不清楚哪些装错了)
这种情况我是不是应该一个包一个包确定之后单独 conda 装比较好。。。 |
43
zxCoder OP @Muniesa
就比如这些东西 tensorflow==1.13.1 regex==2020.11.13 networkx==2.5 Keras==2.2.4 scipy==1.5.2 torch_geometric==1.6.3 transformers==4.1.1 torch==1.7.1 torch_scatter==2.0.5 torch_sparse==0.6.8 numpy==1.19.2 graph_tool==2.11 python_igraph==0.8.3 python_Levenshtein==0.12.2 scikit_learn==0.24.1 我大概就只知道 tensorflow keras torch 应该是有 gpu 版本的,然后其他的不太了解。。。 |
44
IgniteWhite 2021-05-21 17:15:50 +08:00 via iPhone
见我在 9 楼的链接和内容。conda 可以装和它本身不同版本的 puthon 到虚拟环境。不过我觉得你已经解决了。主流的也有用 pyenv 的
|
45
Muniesa 2021-05-21 17:49:27 +08:00
@zxCoder 是的,conda 的依赖处理会比较好,你这些东西有些是互相依赖的,conda 会一起装上,建议先把 tensorflow,keras,pytorch 这种框架装上,然后再看看缺什么继续装。
|
46
zxCoder OP @IgniteWhite
多谢多谢 |
47
supercaizehua 2021-05-21 19:35:05 +08:00
用到啥装啥,一个版本对应一个虚拟环境,这样比较有序
|