学习Ray,新手,比如我,都会从tutorial入手,从简单的开始上手,然后进一步挖掘,学习更深的知识要点。本文,是介绍笔者在安装 ray 的最新tutorial时所遇到的问题,以及如何解决的。供后来人少走弯路。
1. Ray 最新的学习资料在这个链接。这个链接有一步,一步的介绍,笔者暂时不会翻译这个tutorial,但会后续中写下心得体会。
2. 安装ray,最好安装 anaconda,因为这个环境管理软件会使后续的开发很容易,因为它通过conda命令直接设置所有开发软件所需的依赖包及其版本,是一站式的开发环境管理。
3. 安装完anaconda,就要设置开发环境,根据上面的学习资料链接,安装到pip所覆盖的python软件包时,输入命令:
conda env create -f environment.yml
然后我们来看看环境文件的具体内容:
name: anyscale-academy
channels:
- conda-forge
- pyviz
dependencies:
- python=3.7
...
- numpy >= 1.18.5
- pandas
...
- nodejs
- pip:
- ray[all] >= 1.2
- tensorboard >= 2.3
- tensorflow >= 2.3
- atoma
- box2d-py
我们省略了一些依赖包,因为便于阅读,dependencies下的依赖包conda环境都可以解决下载,安装,但pip下的,可能安装到一半,安装环境到这个点或很慢,或干脆就断了。不要紧的,因为依赖包在pip管辖下的镜像源在国外,可以用国内的,国内的当数阿里云的最快。版本如果没有,就选择当前最新的就可以了。比如我们要安装ray[all], 输入以下命令就可以,注意使用阿里云的镜像源,用-i的标识符:
#pip install -i https://mirrors.aliyun.com/pypi/simple/ 要下的包名
pip install -i https://mirrors.aliyun.com/pypi/simple/ ray[all]
这样从国内镜像源下载,安装python依赖包就很快了。
4. 最后,一步输入命令行 jupyter lab 后,会有bind.socket 异常抛出,例如
/usr/lib64/xxx/tornado/netutil.py", line 196, in bind_sockets sock.bind(sockaddr)
OSError: [Errno 99] Cannot assign requested address
这个问题曾经困扰笔者多天,后来www.bing.com.cn 一下,发现不是ray的问题,是tornado的一个bug,centOS及其他Linux机器默认的IPv6一半激活,一半不激活的,所以只要明确IPv6要么全部激活,要么全部不激活就可以。输入以下命令,就可以 解决问题,具体原因可以查这个链接报告。笔者也在stackoverflow上传了解决方案,会英语的读者可以参考这个解答。
# 激活IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
# 不激活IPv6
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
5. 最后,我们一般都在linux虚拟机上安装ray,虚拟机没有GUI,即图形界面,我们用局域网的其他机器访问虚拟机所在的web服务器,那么避免麻烦,就不要防火墙了。因为ray的tutorial web服务器侦听的是8888端口,一般都被防火墙屏蔽了。那么查询防火墙的状态和屏蔽防火墙的命令如下所示:
systemctl status firewalld
# 防火墙工作状态: active (running) since Fri 2021-03-19 10:17:27 CST; 4 days ago
# 拆卸防火墙: inactive (dead) since Tue 2021-03-23 10:58:10 CST; 3s ago
systemctl stop fiewalld
6. 最后,安装成功,会显示web访问地址,笔者能看到的图示如下所示: