一般来说,启动Ray-Head后,就可以通过端口8265(默认)访问Ray的Dashboard服务。
如果无法访问,可能有下面几个原因:
1. 防火墙屏蔽了端口
关闭端口限制
2. 未安装Dashboard服务
安装命令pip install ray
是不包括dashboard服务模块的。正确的命令是:pip install ray[default]
,这个命令会安装所有ray的模块
3. 只绑定了本地loalhost的端口
使用dashboard-host参数ray start --head --dashboard-host='0.0.0.0'
绑定所有ip,或者指定一个固定ip
4. Dashboard模块的依赖有错误(ImportError: Not all Ray Dashboard dependencies were found)
这个问题特别坑,所以需要详细描述一下解决过程:
4.1. 现象
使用命令ray start --head
启动之后,发现dashboard无法访问。尝试指定dashboard-host和dashboard-port:ray start --head --dashboard-host='0.0.0.0' --dashboard-port=8265
,依然无法访问。后来发现服务器的8265端口根本没有被监听(netstat -anp |grep 8265
)。这说明dashboard服务没有启动,但在日志里根本没有体现,真坑。
4.2. 排错
查阅官方文档,发现有个参数--include-dashboard
,这个参数可以强制启用dashboard。加上这个参数启动head:ray start --head --include-dashboard=true
,这个时候错误信息终于出现了:ImportError: Not all Ray Dashboard dependencies were found
查看ray源码https://github.com/ray-project/ray/,找到出错的代码行:
而import ray.dashboard.optional_deps的代码如下:
我们在python shell直接运行一下试试:
很明显是import aiohttp这个库出了问题,大概率是版本不兼容导致的。我又翻阅了一下ray相关的commit信息,发现ray的aiohttp的依赖由aiohttp==3.7
变成了aiohttp>=3.7
。而服务器上python里的aiohttp正是3.8.0,将aiohttp降为3.7.4:
pip install -i https://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com -U aiohttp==3.7.4
再次启动head,dashboard能正常访问。
4.3. 原因
通过实验我们知道,ray不能兼容aiohttp的3.8.x版本,而依赖配置里却声明为aiohttp>=3.7
,导致依赖安装的aiohttp版本不对。将aiohttp更新成3.7.4就可解决这个问题。