Featured image of post 配置数据科学研究环境

配置数据科学研究环境

Build research environment of data science

简介

数据科学研究环境主要是基于 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安装包,包会被安装到当前环境,而不会污染系统或用户空间。
  • 环境操作
    • config # 创建配置文件.condarc
    • create -n 环境名称 包名=版本 # 创建包含所指定包的新环境
    • info # 显示信息
    • activate 环境名称 # 进入指定环境
    • deactivate # 退出当前环境
    • remove -n 环境名称 –all # 删除环境

配置

  • 参考配置
1
2
3
channels:
  - defaults
show_channel_urls: true
  • 不同环境划分建议
    • 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。

配置

1
set -g mouse on	# 启用鼠标滚动

命令参数

1
2
3
4
5
6
tmux	# 打开一个默认命名的窗口
tmux new -s 窗口名称	# 新建一个持久终端窗口,exit即可推出
# attach可以简写为a
tmux attach	# 进入上一次的窗口
tmux attach -t 窗口名称	# 进入指定名称的窗口
tmux ls	# 列出所有窗口
1
:set mouse on # 启用鼠标滚动

快捷键

Tmux的快捷键基于Ctrl+B,类似的screen的快捷键基于Ctrl+A。 用法是按住Ctrl,先按B再按另一个表示所需功能的字母。

  • C 窗口中创建新的标签页
  • D 返回外部环境但不结束窗口
  • W 进入窗口和标签页的导航
  • : 进入输入命令模式
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy