由于服务器不是一个人在用且根据需求需要不同的环境,所以在服务器上安装虚拟环境就能方便解决。这篇主要记录在虚拟环境安装过程的方法及出现的问题。(根据网上大佬无私分享的总结)
一般虚拟环境的创建用到一下命令:
conda create -n your_env_name python=x.x (your_env_name是指你创建的虚拟环境的名字)
激活虚拟环境:
Linux: source activate your_env_name
Windows: activate your_env_name
退出虚拟环境:
Linux: source deactivate your_env_name
##若是出现deactivate命令没找到,则输入以下命令
conda deactivate
Windows:deactivate your_env_name #也可以使用`activate root`切回root环境
删除虚拟环境以及某个包:
conda remove -n your_env_name --all
conda remove --name your_env_name package_name #删除某个包
查看全部虚拟环境:
##可以具体看到虚拟环境名字及所在位置v
conda info --envs
激活后,根据自己需要安装包,一般来说用conda安装包,需要添加镜像源(加快下载速度)。主要推荐的是清华的镜像源,当然还有其他镜像源。
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --set show_channel_urls yes
#附加pytorch库
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud//pytorch/
若是使用pip安装包,则有两种方法。
第一种指定镜像源:
#这两种都可以
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 库名
第二种永久添加镜像源:
Linux:尝试修改 ~/.pip/pip.conf (如若没有需要自己创建): 在用户目录下输入 vi ~/.pip/pip.conf ,将下列内容输入到文件中(注意看是否输入完全了,没有则自己手动补上),然后按Esc键输入 :wq 保存退出vim,若此时不报错(E212: Can’t open file for writing),报错原因也是因为没有此文件
#先新建 .pip 文件夹,再新建文件 pip.conf
$ cd ~
$ mkdir .pip
$ cd .pip
$ vi pip.conf
#修改
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
Windows:直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
指定阿里云镜像源时,如若出现 报错***"The repository located at mirrors.aliyun.com is not a trusted … "*** 的情况 。
#一次性解决
pip install scrapy -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
#永久解决,在pip.conf下添加
[global]
trusted-host=mirrors.aliyun.com
pip install出现问题,可用以下命令安装包:
python -m pip install 库名
#服务器pip安装出错,只需要在install后加一个--user
python -m pip install --user --upgrade pip==9.0.3
服务器配置好后,更希望在本地码代码debug,故而需要远程连接服务,利用服务器的资源和环境。
安装jupyter notebook (这个过程是接着激活环境后的)
conda install jupyter notebook
默认jupyter notebook 是不需要配置文件的。因此,需要用以下命令生成该文件。
主要配置一下内容:
生成配置文件
jupyter notebook --generate-config
如果是 root 用户执行上面的命令,会发生一个问题
Running as root it not recommended. Use --allow-root to bypass.
提示信息很明显,root 用户执行时需要加上 --allow-root 选项。
jupyter notebook --generate-config --allow-config
执行成功后,会出现下面的信息:
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
打开ipython
ipython
生成密钥,passwd()后会让你两次输入密码(该密码作为客户端登录jupyter用,密钥后面配置文件用)
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:8361f5f08937:081cdf40730cb5548e2c213ddd36813a5313192f'
修改配置文件:(注意配置文件是python代码,故而要将修改的设置前面的#去掉)
vim ~/.jupyter/jupyter_notebook_config.py
c.NotebookApp.ip='*'
c.NotebookApp.password = u'sha:ce...刚才复制的那个密钥'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888 #可自行指定一个端口, 访问时使用该端口
在本地上设置打开jupyter的浏览器
##Anaconda Prompt输入以下命令定位到配置文件所在位置
jupyter notebook --generate-config
##若是cmd输入也可以,但会出现让你重写配置文件的选项
##打开配置文件,在#c.NotebookApp.browser = ''
##后输入以下代码
import webbrowser
webbrowser.register("chrome",None,webbrowser.GenericBrowser(u"浏览器路径"))
c.NotebookApp.browser = 'chrome'
conda install nb_conda #安装插件即可
点击选项“Tools”->“Start SSH session…”,选择对应服务器,即可以在pycharm下的Terminal打开服务器的终端。
使用conda命令安装pytorch会出现一个很难受的报错:
ImportError: dlopen: cannot load any more object with static TLS
找遍百度,stackoverflow上都没有解决,最后还是师弟在git中的一个讨论区找到了解决方法(向师弟学习)。这个bug是在服务器conda安装pytorch后,在cmd中import torch正常,但是在配置好的jupyter中则会报错。给出的方法是用pip安装pytorch。
conda uninstall pytorch #卸载conda安装的pytorch
pip install torch torchvision
若系统版本过低,则不支持pytorch,会出现报错:
ImportError: /lib64/libstdc++.so.6: version ‘CXXABI_1.3.9’ not found(required by anaconda3/lib/python3.6/site-packages/scipy/sparse/_sparsetools.cpython-36m-x86_64-linux-gnu.so)
查看当前可用版本:
strings /lib64/libc.so.6 |grep GLIBC_
用rpm升级到2.17(没有则下载rpm):
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-common-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-devel-2.17-55.el6.x86_64.rpm
$ wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55.fc20/glibc-headers-2.17-55.el6.x86_64.rpm
安装:
sudo rpm -Uvh glibc-2.17-55.el6.x86_64.rpm \
glibc-common-2.17-55.el6.x86_64.rpm \
glibc-devel-2.17-55.el6.x86_64.rpm \
glibc-headers-2.17-55.el6.x86_64.rpm
查看当前可用版本:
strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'
进入python的安装路径下的lib文件夹,我的在~/anaconda3/lib,找到最新版的libstdc++.so.6:
ls |grep libstdc++.so.6
我这里是6.0.26
libstdc++.so.6
libstdc++.so.6.0.26
将最新版本复制到/usr/lib64/目录下,删除原来的libstdc++.so.6,并将最新版本命名为libstdc++.so.6,然后连接:
# 复制到
cp libstdc++.so.6.0.26 /usr/lib64/
# 进入目录
cd /usr/lib64
# 删除原来的库
rf -rf /usr/lib64/libstdc++.so.6
# 重新构建库
ln -s libstdc++.so.6.0.26 libstdc++.so.6
#查看服务器GPU的使用情况,英伟达的命令:
nvidia-smi
#cuda是否可用:
torch.cuda.is_available()
#返回gpu数量:
torch.cuda.device_count()
#返回gpu名字:
torch.cuda.get_device_name(0)
#返回当前设备索引:
torch.cuda.current_device()
由于使用远程连接的方式开启服务器上的Jupyter的,所以一旦关掉连接的终端,Jupyter也会关闭。这时就需要使用Screen工具让终端后台运行,保持Jupyter始终可以登录。
#查看当前的screen:
screen -ls
#创建一个screen,这时相当于打开了一个新终端:
screen -S {screen name}
#将当前screen后台,返回打开前的终端:
CTRL+A+D #快捷键
#回到screen:
screen -r {screen name}
#关闭后台的screen:
screen -X -S {name you want to kill} quit
在使用堡垒机链接服务器的时候,不能使用xftp上传下载文件(应该有方法,由于懒就没弄了),有xshell就足够了。
rz ##弹出窗口选择要上传的文件,也可直接拖拉文件到xshell窗口
sz filename ##下载文件到本地