You need to enable JavaScript to run this app.
导航
提交Ray作业使用指导
最近更新时间:2024.05.20 11:13:28首次发布时间:2024.05.20 11:13:28

VKE场景下,可以通过以下途径,向RayCluster方式提交Ray作业,也可参考官网 进行操作:

  1. kubectl方式提交:需要安装kubectl工具,且配置kubernetes的连接信息。

  2. 采用Ray Client SDK(如JobSubmissionClient)提交:需要部署Ray环境。

1通过 kubectl 命令提交

  1. 参考连接VKE集群安装kubectl和配置VKE集群连接信息

  2. 获取RayCluster的Head所在的pod名称

export NAMESPACE=<命名空间>
APPNAME=<RayCluster应用名称>
HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head -o custom-columns=POD:metadata.name --no-headers  -n $NAMESPACE |grep $APPNAME) 

echo $HEAD_POD

示例中NAMESPACE是RayCluster所在VKE集群中的命名中间。APPNAME是RayCluster的名称。

  1. 连接Head pod提交Ray job,获取资源信息
# 打印集群资源信息
kubectl exec -it $HEAD_POD  -n $NAMESPACE -- python -c "import ray; ray.init(); print(ray.cluster_resources())"
  1. 连接Head pod提交Ray job,执行python文件
# 将本地python文件上传到head pod中
echo '
import ray
ray.init()
print(ray.cluster_resources())' > test.py
kubectl exec -it $HEAD_POD -n $NAMESPACE -c ray-head -- mkdir -p /home/ray/work_dir
kubectl cp  test.py -n $NAMESPACE -c ray-head $HEAD_POD:/home/ray/work_dir

# 执行python文件
kubectl exec -n $NAMESPACE -it $HEAD_POD -- ray job submit --working-dir /home/ray/work_dir  -- python /home/ray/work_dir/test.py

  1. 通过Ray的Dashboard页面查看Ray执行情况,也可以通过下面命令查看作业执行情况
kubectl exec -n $NAMESPACE -it $HEAD_POD -- ray job status <jobID>

采用Ray Client SDK(如JobSubmissionClient)提交

  1. 安装Ray环境。EMR中提供Ray的镜像列表,可以在Docker中部署Ray的环境。

    安装Ray环境时,Ray的版本信息需与RayCluster使用的版本一致。

  2. 通过下面的命令,获取RayCluster的Head的IP地址,或者手动获取Head的IP地址:

    export NAMESPACE=<命名空间>
    APPNAME=<RayCluster应用名称>
    HEAD_POD=$(kubectl get pods --selector=ray.io/node-type=head -o custom-columns=POD:metadata.name --no-headers  -n $NAMESPACE |grep $APPNAME) 
    IP=$(kubectl describe pod $HEAD_POD -n $NAMESPACE |grep IP |awk '{print $2}' | head -1)
    

示例中NAMESPACE和APPNAME需根据实际情况填写。

  1. 进入Ray环境中,配置export IP=<Head的IP地址>。然后执行python命令,采用交互式方式执行下面的python代码块

    import ray
    import os
    
    head_ip = os.getenv("IP")
    ray.init(address="ray://{}:10001".format(head_ip))
    print(ray.cluster_resources())
    

    其中IP地址是Head的IP,需确保执行环境可以访问RayCluster,可以通过命令telnet $IP 10001确认网络是否打通。

  2. 通过JobSubmissionClient方式提交下面的代码段。也可以采用Ray Cli方式提交。

    1. 创建目录,将作业脚本放在该目录下:

      mkdir -p /tmp/ray_working_dir
      cd /tmp/ray_working_dir
      
    2. 编写ray作业脚本:ray_data_demo.py

      import ray
      
      ds = ray.data.range(100)
      ds.show(limit=10)
      
    3. 定义SDK方式提交作业:job_submmiter.py

      import os
      from ray.job_submission import JobSubmissionClient
      
      os.makedirs("/tmp/ray_working_dir", exist_ok=True)
      
      head_ip = os.getenv("IP")
      dashboard_url="http://{}:8265".format(head_ip)
      client = JobSubmissionClient(dashboard_url)
      job_id = client.submit_job(
          # Entrypoint shell command to execute
          entrypoint="python ray_data_demo.py",
          # Path to the local directory that contains the script.py file
          runtime_env={
              "working_dir": "/tmp/ray_working_dir",
          }
      )
      print(job_id)
      
      # 查看状态
      job_status = client.get_job_status(job_id)
      print(job_status)
      
    4. 执行job_submmiter.py

      python job_submmiter.py
      

    提交Ray job后,会返回Job ID,这时可以通过下面shell命令查看作业状态

    1. 查看任务执行状态

      export RAY_ADDRESS=http://$IP:8265
      ray job status <jobID>