简介
数据科学研究环境主要是基于 conda 搭建便于数据科学和人工智能研究的计算机开发环境。 数据科学和人工智能主要是用 Python 程式语言,而 OS 的 python 包管理完全不能适应前沿研究的需要。 尽管 Python 本身就有灵活的包管理和虚拟环境功能,但数据科学研究所依赖的 scipy, cuda 等工具链安装非常容易出错。 这里主要介绍数据科学所涉及的开发环境配置注意事项。
主要包括
- 包管理工具 conda
- 集成开发环境 jupyter
- 远程终端管理 tmux。
conda
conda是一个包管理器,主要为了管理数据科学所需要的 Python 包而设计。 早先是为了解决 pip 安装 numpy 和 scipy 时复杂的编译问题。 后来更广泛的支持了基于 Python 的数据科学和人工智能研究。
conda 不限于 Python 包管理,其能解决 scipy 等复杂的编译问题,是因为其顺便支持了相关 C\C++ 包的管理。
如果把 conda 比作 apt, 那么 anaconda 和 miniconda 就是发行版,pip 可以安装发行版以外的包。 conda 也有类似 main, contrib, non-free 之类的通道的概念,类似 Ubuntu 的 ppa。
优点
- 无需管理员权限,无需依赖,直接执行sh安装包即可安装到用户目录
- 多虚拟环境支持,可以创建不同的环境安装不同的包,尤其是不同版本的cuda,甚至是不同版本的Python
- 比较好的解决Python包的依赖问题
- 兼容用 pip 安装额外的包
安装
conda 通常选择 Anaconda 或 miniconda 之一进行安装。 Anaconda 预先包含常用的数据科学相关 Python 包,miniconda 如名字所示只包含精简环境。 Anaconda 有商业公司支持,miniconda 是衍生出来的发行版,其中的包都是一样的,只是初始内容的不同。 为了便于离线开箱即用,这里推荐 Anaconda。
安装默认位置是主目录,可以修改。
安装结束的时候问是否添加初始化,如果添加会在Linux服务器当前用户Home的 .bashrc 或 .zshrc 添加 conda 的初始化命令。
目前初始化主要是加载环境变量和激活默认环境,建议添加初始化。
功能
- 包操作
- list install update remove
- -c 指定通道
- 也可以用pip安装包,包会被安装到当前环境,而不会污染系统或用户空间。
- list install update remove
- 环境操作
- config # 创建配置文件.condarc
- create -n 环境名称 包名=版本 # 创建包含所指定包的新环境
- info # 显示信息
- activate 环境名称 # 进入指定环境
- deactivate # 退出当前环境
- remove -n 环境名称 –all # 删除环境
配置
- 参考配置
|
|
- 不同环境划分建议
- base 主要安装 jupyter 等默认包和公共包
- pytorch tensorflow 等包分别装到不同的子环境
- 不同项目考虑使用不同子环境
注意
用pip安装conda里没有的包,尽量用环境中的pip而不是系统的pip。
pip换源
pip config set global.index-url https://mirror.url.link/simple
jupyter
Jupyter Notebook (此前被称为 IPython notebook) 是一个交互式笔记本,支持运行 40 多种编程语言。后来又开发了 Jupyter Lab 成为更加集成,功能更加服务的交互工作环境。
部署
直接安装Anaconda就会附带它们。
miniconda或新环境需要手动安装conda install jupyter-lab。
Jupyter Lab比Jupyter Notebook更加集成和方便,主要是多了文件夹浏览侧边栏。
Jupyter套件的不同部分共享很多配置,通常设置命令采用notebook。
比如生成配置文件 jupyter notebook --generate-config
通过配置文件可以进行更多配置,所有jupyter系列共用配置文件。
主要配置端口、密码、监听地址等。
进入想启动 jupyter 服务的目录,通过 --ip 参数即可配置远程。其实不用 --ip 也是可以的,但是默认配置文件限制只能本地访问。
如果使用 Jupyter Notebook 输入: jupyter notebook --ip='*'
如果使用 Jupyter Lab 输入: jupyter-lab –ip='*'’
--ip 是指定服务要监听的ip,应当写服务器的某个ip地址(对于多网卡情况)。
指定*监听所有ip,会警告但自己用没什么事儿。
使用期间服务不能关,也就是ssh不能断或挂nohup,或者用Tmux来运行。
推荐使用Tmux,既可以避免意外中断连接没保存,也能查看控制台输出检查问题。
如果服务器安装了字符界面浏览器,执行命令后可能会弹出一个字符浏览器界面,按Q退出。
默认是8888端口,如果被占用了,会自动分配别的端口和地址。
不用理会这些,反正之后会给出一个web地址(如果是--ip=’*’要把 localhost 换成服务器IP),把地址复制到个人电脑的浏览器里就可以使用服务器的 Jupyter 了,用服务器的 GPU 和 Disk 就像用本机一样方便。
注意
在浏览器使用jupyter就像本机似的,可以删除东西,所以尽量在项目根目录启动服务,而不直接在系统根目录启动。 这样虽然是使用服务器的算力,但是浏览器加载还是在个人电脑,而jupyter的加载又很耗内存,所以本机加载不出来的ipynb文档用这个方法以然加载不出来。好处只是便于使用GPU等硬件资源。
Tmux
数据科学和人工智能的研究经常需要长时间的在服务器上训练模型,这就需要在断开连接后保持程序继续运行。 服务器安装的Linux类OS通常自带的nohup可以保持程序运行但是没有交互功能。 tmux和screen是两个持久终端软件,功能类似,这里推荐tmux。
配置
|
|
命令参数
|
|
|
|
快捷键
Tmux的快捷键基于Ctrl+B,类似的screen的快捷键基于Ctrl+A。 用法是按住Ctrl,先按B再按另一个表示所需功能的字母。
- C 窗口中创建新的标签页
- D 返回外部环境但不结束窗口
- W 进入窗口和标签页的导航
- : 进入输入命令模式