今天在内网搭建环境遇到一个问题,由于容器会不断重启,只有一个目录下的文件在系统设置中会一直保存数据,因此需要将环境搭建到指定目录下。
搭建目标
搭建python3.6环境,手动安装python库包,使用gpu运行脚本
遇到的问题
1. conda 搭建到指定路径后的虚拟环境,环境不会正确命名,简单的conda activate 名字,无法激活
2. 由于内网环境,初始化的python环境并不完全满足开发需求,需要手动添加包配置环境。
3. 由于python3.x 输出环境没有配置好 utf-8编码,无法正确输出到终端
4. 装包过程中使用wget工具导入包时,创建了多层目录,找不到正确包的位置
Conda 使用
在指定目录下建立conda虚拟环境,但这种指定会导致创建出来的虚拟环境没有名字
conda create –-prefix=your_path python=X.X
需要用如下语句才能激活
conda activate /app/py....(路径)
查看创建的所有虚拟环境
conda info --env
列出当前虚拟环境中所有自定义的环境变量
conda env config vars list
Wget 使用
参数使用,path为目标路径 url为资源下载地址。注意搭建环境装包的时候,加-nd,则子目录不会被下载,后续移动文件夹很麻烦;
wget -c -r -np -P path url
-c 断点续传
-r 递归下载
-np 不下载父附录,没有加参数-np,就会同时下载path的上一级目录pub下的其它文件
-nd 不建立目录,递归下载时不创建一层一层的目录,把所有的文件下载到当前目录
-P 将下载的所有内容存放到指定目录
与上一条命令相似,多了一个 --accept=iso
选项,这指示 wget 仅下载 i386 目录中所有扩展名为 iso 的文件。也可以指定多个扩展名,用逗号分隔。
wget -r -np -nd --accept=iso url
但不加-nd,子目录会按照网页结构下目录创建文件夹下载,此时用Linux mv指令即可
mv <源地址> <目的地址/>,即文件夹目录地址后面加上/移动文件夹的内容以及文件夹本身
mv <源地址/*> <目的地址>,移动文件夹下的所有内容到目的地址文件夹下,不会新建源地址文件夹
-f:覆盖目标文件(不提示)。
-i:询问是否覆盖目标文件。
-n:不覆盖任何已存在的目标文件。
-v:显示移动的详细过程。
Linux 操作指令细节
查看环境变量
env
以下删除到包括最后一个文件夹,envs文件夹也会被删除
rm -rf /app/envs/
rm -rf python3.6/ # python3.6文件夹也会被删
在虚拟环境中无法输出中文内容,原因是python3输出环境没有配置好 utf-8编码,需要手动配置,在linux终端运行。一开始一直以为是数据编码的问题,代码里用hashlib加密字符串生成唯一id,一直在修改加密和解码格式,最后找了很多资料才发现是python3没有配置好编码格式。这个仅单词终端有效,永久生效要改配置文件。但由于这次项目无法修改配置文件,每次容器删除都会重新初始化,因此不做修改了。
export PYTHONIOENCODING=UTF-8
解压zip
unzip xx.zip
递归修改文件权限是大写R
chmod -R 775 /xxx/xxx
GPU跑程序
指定GPU跑程序
CUDA_VISIBLE_DEVICES=0 python test.py
实时查看gpu使用情况
watch -n 10 nvidia-smi
--------------------------------------------你以为就这么结束了吗?不是的!
一切搞到这里以为部署完了,可以跑gpu了,结果跑完检测gpu发现,脚本算法根部不能用gpu跑。泪目,整整一周忙个寂寞。求助谢大佬,大佬说脚本原来的代码nltk,lemmatization 是传统nlp,spacy才有gpu加速的lemmatization。好心的大佬帮我修改了一下代码算法,换成了spacy,我重新部署了torch1.8.1版本,才正式能用gpu跑上加速。因为torch1.7版本,没有ConvBn1属性!!
【pytorch】torch1.8.1安装、查看torch版本、GPU是否可用_pytorch和gpu版本查询-优快云博客
在安装spacy过程中,也遇到了许多bug。放一些行之有效的改bug链接吧。
gpu - Spacy + GPU 给出错误 : GPU is not accessible. 库是否安装正确? - IT工具网 (coder.work)
另外在安装whl文件的时候,有个好用的方法,用下面的命令,可以一次性安装指定平台的whl, 需要自己加上--python-version 参数可以指定python版本。
pip download --platform=linux_x86_64 --only-binary=:all: lxml
在装环境download时,直接下载一个python.exe,在命令行运行就行,不一定要pycharm软件。
注意:Spacy的版本与en_core_web_sm需对应
NLP Spacy中en_core_web_sm安装问题(附最新下载地址)_cmd如何安装 en_code_web_sm-优快云博客
比如Spacy2.3.n需要对应安装en_core_web_sm2.3.0
安装Spacy
pip install Spacy==2.3.2 #==后面是版本号
注意到细节:
在众多教程里,下载的链接可以从后面的命令行网址获得。
whl文件名里,cuxxx才是gpu版本,cpu只是cpu版本,window会默认选择cpu版本,本地pip安装会默认选择window版本。