几个很简单的步骤却陆陆续续配置了一整天。记录一下。
部分步骤来自该博文: https://blog.csdn.net/m0_46336568/article/details/127836072
下载miniconda安装包
wget -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh
执行安装脚本
bash Miniconda3-py39_4.9.2-Linux-x86_64.sh
conda换源
source ~/.bashrc
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
source ~/.bashrc
创建python3.7环境下的conda虚拟环境并进入
conda create -n yourEnvName python=3.7
conda activate yourEnvName
安装torch1.10+cuda10.2(cuda版本号可进入集群后使用nvidia-smi命令查看)
conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch
# cuda 11.2
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.2 -c pytorch -c conda-forge
进入集群,安装bmtrain
pip install bmtrain
pip install model-center
此时可以正常安装opendelta等包。进入Python查看是否安装成功
$ python3
>> import bmtrain
>> import opendelta
附录:conda常用命令
# 创建环境
conda create -n 环境名 python=3.x
# 进入环境
conda activate 环境名
# 查看虚拟环境列表
conda info --env
# 查看该环境下已有的安装包
conda list
# 退出环境
conda deactivate
# 删除某个环境
conda remove -n 环境名
# 删除某个环境下的某个包
conda remove -n 环境名 包名
注:conda install 和 pip install 的关系至今没有搞懂。。当conda 新建的 python版本号和全局不同时,在conda虚拟环境中遇到了无法引用pip install 的包的情况(ModuleNotFoundError: No module named ‘xxx‘)。但在命令行又可以正常import。尝试按网上教程加入:
import sys
sys.path.append("conda 虚拟环境中安装包的位置")
print(sys.path)
依然无法引用。
1.11中午12:30更新:将bash中的torchrun的路径改为conda虚拟环境bin下的torchrun(~/miniconda3/envs/yourENVNAME/bin/torchrun)即可运行。此时会报错找不到model-center,因为其安装在全局的python3.6安装包中,需要将其重新在虚拟环境安装。由于conda install找不到model-center和bmtrain,故可以使用 `--target 路径` 指定pip的安装位置(默认为全局路径)
pip install --target /home/xxx/miniconda3/envs/yourEnvName/lib/python3.7/site-packages model-center
将其使用pip安装在虚拟环境中。
此时可以成功运行。
注2:opendelta的包依赖
![](https://i-blog.csdnimg.cn/blog_migrate/0cb72087efb8af0fadaa407be27b77d8.png)
datasets==1.17.0 decorator gitpython rich scipy sentencepiece==0.1.96 sklearn web.py
1.11晚上23:20更新:又经历了整整一天的痛苦倒腾环境,一会是numpy报错ModuleNotFoundError: No module named 'numpy.core._multiarray_umath,按网上教程各种升级卸载都不成功。一会是bmtrain报错error:cannot import name‘_C‘,最后把bmtrain目录下的_C.cpython-36m-x86_64-linux-gnu.so文件两个点之间的中缀删掉之后发现这个_C仅支持python3.6,无法在python3.7的环境下加载!!!各种包安了又卸卸了又安,环境create了又remove,我真的会谢orz
好在,经历了一天的毒打,我终于(大致)弄明白各种python、pip、conda之间的关系了!当我再次看到
Python 3.7.4 (default, Aug 13 2019, 20:35:49)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import opendelta
>>>
的时候真的无比激动。把一整天的过程总结记录在这里:
每当用conda创建一个新环境时,会相应地备份一份python。与python相关的几个命令,如python3、pip、pip3、torchrun也会重新备份一份。新出现的这些脚本命令在新环境的路径/home/xxx/miniconda3/envs/环境名/bin/下,如
~/miniconda3/envs/环境名/bin/pip
可以使用which语句来判断当前在终端敲的pip是哪个pip:
$ which pip
$ which python3
$ which torchrun
一般来讲,pip和torchrun都是全局目录下的,即`/home/xxx/.local/lib/python3.6/site-packages`这个目录下面的,而python3则默认调用新环境中的python3。因此,如果直接pip install则会安装在全局目录~/.local/lib/python3.6/site-packages下面。综上,总结一下几种安装命令的安装位置:
pip install(pip uninstall):会装在全局~/.local/lib/python3.6/site-packages
conda install(conda remove): 会装在新环境~/miniconda3/envs/环境名/lib/python3.7/site-packages
为在新环境中安装那些只能用pip而不能用conda安装的包,我们需要调用新环境中的那个pip命令:使用
$ ~/miniconda3/envs/环境名/bin/pip install 包名
就可以安装到新环境内了!
使用
pip install --target ~/miniconda3/envs/环境名/lib/python3.7/site-packages 包名
确实可以安装在该目录下。但是这样安装之后的包就“丢”了,用pip uninstall只能清除全局内安装的包,conda remove也不会删掉被pip安装的包。因此要卸载该包只能进到该目录里手动删除相应的文件夹。当存在多个不同位置的相同的包(尤其是还有不同的版本并存)时,pip --target往往使得包卸载的时候卸不干净,造成混淆。下次不会再用了!
因此,能用conda安装的就用conda安,不能用conda的就用新环境中的~/miniconda3/envs/环境名/bin/pip安。我的做法是只有pytorch和cudatoolkit用conda安装。最后,不要忘记bash脚本的torchrun也要改成~/miniconda3/envs/环境名/bin/torchrun。
综上,总结一下opendelta的安装流程:
把乱七八糟的各种conda虚拟环境删干净,再用pip uninstall/conda remove 命令删除 numpy、bmtrain、torch等包,直到删得一干二净、删无可删为止(numpy会有出现在/usr/lib/的基础版本,那个是管理员安装的,删不掉也不用管它,因为他总是在最后才会被搜索)。
conda创建新的虚拟环境(如果这里只输入python=3.7会默认安装3.7.12,which是个不太好用的版本)
$ conda create -n 环境名 python=3.7.4
安装pytorch1.10.0+cuda10.2
$ conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch
进集群安装bmtrain。由于bmtrain只能用pip安装,这里要用新环境下的pip:
$ ~/miniconda3/envs/环境名/bin/pip install bmtrain
$ ~/miniconda3/envs/环境名/bin/pip install model-center
继续安装opendelta。这里使用了github上的安装方式以获得适用于bmtrain的分支版本:
$ git clone -b with_bmtrain --single-branch https://github.com/thunlp/OpenDelta.git
$ cd OpenDelta
$ python setup.py install
5.1 期间可能还需要用pip安装opendelta的其他依赖,包括:
transformers
datasets==1.17.0
decorator
gitpython
rich
scipy
sentencepiece>=0.1.96
sklearn
web.py
yacs
oss2==2.15.0
然后就安装成功啦!此时在终端进入python3控制台可以顺利import bmtrain和import opendelta。