公司准备做多模态这方面的研究,需要对大量图片文本进行采集处理,领导的要求是需要一个分布式框架,加速这个过程,把这个交给我来做。
我以前是做大数据的写spark,flink那些,虽然也是分布式,但是看了下完全不是同一类。现在处理的非结构化数据,而spark.doris更多的是结构化数据。网上看了一些资料,感觉ray这个框架可能很适合,因为公司算法主要是用python,ray 这个框架用来做分布式调用很合适
选择了这篇官方推荐的部署方式进行部署 GitHub - ray-project/kuberay: A toolkit to run Ray applications on Kubernetes
但是目前的情况是公司的运维在做集群搬迁,没空帮忙。集群机器无法访问外网,即使加了代理,也无法下载镜像。公司内部k8s仓库没有ray相关的repo。只能自己一步步折腾,步骤如下
1.首先要到几台集群机器,将其中一台做成k8s的master,还好没啥坑,问下运维步骤,要了几个yaml文件搞定
2.安装kuberay operator。这里因为没法链接外网,所以把官方项目的helm-chart使用外网机器下载下来,然后传到内网master机器上,在安装时 kubectl 可以看到pod镜像要下载的镜像地址,使用外网机器去下载镜像,很坑的是比如你要的v1.l.1版本,复制地址到quay.io页面后看到的是上百个,当时以为都是,就下载了一个最近的。后来发现这个是错误的,那个页面里,要重新找一下版本。这里搞错了镜像,后来花了很久的时间才发现问题。
3.下载镜像后再传入内网,按照operator的安装策略,pull imges首先会查询本地是否有,然后到远程下载,这里最坑的是什么叫的本地我没法确定,到底他用什么方式什么路径寻找本地镜像?于是只能把镜像压缩文件gz放在安装文件夹,另外用docker把镜像load为本地镜像。因为下错版本,导致再docker images 里仓库和tag显示为none,我还以为是需要自己达标,按照yaml文件给他打标,结果安装失败一直找不到本地镜像.后来才发现镜像文件下错了。其实下载正确的镜像文件,yaml 是不需要改的。load进docker后就是对应的地址。
4.找到正确的镜像后,yaml文件中的镜像地址和docker里面的对应上了,按道理应该可以找到了,但是依然找不到,只能自己在机器上搭建一个私有docker仓库,将镜像推上去,安装chart时候,进入本地机器私有的docker仓库下载镜像。终于找到了镜像,问题解决了。
5.安装好kuberay operator 后,继续安装ray-cluster,镜像部分没问题。但是很奇怪,helm install的时候,nodeselector 是失效的。并没有按照我给的条件安装。我给k8s集群机器加了标签的。因为只有那几台打了标签的机器上有镜像,不知道怎么回事。
6.继续解决nodeselector失效的问题,后面再ray-cluster的values.yaml文件中进行配置,发现头节点没问题,但是worker节点一直报错。后来发现原来,worker节点有一个是备份节点,而我的机器只有2台,他可能再找不到一个节点了。把replies设为0,终于成功。
7.运行起来后,发现ray-cluster的head和woker各自安装一个我打标的机器上,提交了一个helloworld,也是成功了
8.因为不允许截图拍照,不能连接外网。这个过程真的太费劲了,问人都没法问。部门里大多数是算法的,没人懂这个。我以前没接触过k8s,docker也有4年多没接触了,总共花了3天多。如果有相同场景的朋友,可以交流一下哈。