在虚拟机上使用 Ray Train XGBoostTrainer#
备注
要学习Ray在虚拟机上的基础知识,我们建议首先查看 入门指南。
在本指南中,我们将向您展示如何在AWS上运行一个Ray机器学习工作负载。类似的步骤也可以用于在GCP或Azure上部署。
我们将使用100GB的训练集运行Ray的XGBoost训练基准测试。要了解更多关于使用Ray的XGBoostTrainer的信息,请查看XGBoostTrainer文档。
VM 集群设置#
对于本指南中的工作负载,建议使用以下设置:
总共10个节点
每个节点的容量为 16 个 CPU 和 64 Gi 内存。对于主要的云服务提供商,合适的实例类型包括
m5.4xlarge (亚马逊网络服务)
Standard_D5_v2 (Azure)
e2-standard-16 (Google Cloud)
每个节点应配置1000千兆字节的磁盘空间(用于存储训练集)。
相应的集群配置文件如下:
# This is a Ray cluster configuration for exploration of the 100Gi Ray XGBoostTrainer benchmark.
# The configuration includes 1 Ray head node and 9 worker nodes.
cluster_name: ray-cluster-xgboost-benchmark
# The maximum number of worker nodes to launch in addition to the head
# node.
max_workers: 9
docker:
image: "rayproject/ray-ml:2.0.0"
container_name: "ray_container"
provider:
type: aws
region: us-west-2
availability_zone: us-west-2a
auth:
ssh_user: ubuntu
available_node_types:
# Configurations for the head node.
head:
node_config:
InstanceType: m5.4xlarge
ImageId: latest_dlami
BlockDeviceMappings:
- DeviceName: /dev/sda1
Ebs:
VolumeSize: 1000
# Configurations for the worker nodes.
worker:
# To experiment with autoscaling, set min_workers to 0.
# min_workers: 0
min_workers: 9
max_workers: 9
node_config:
InstanceType: m5.4xlarge
ImageId: latest_dlami
BlockDeviceMappings:
- DeviceName: /dev/sda1
Ebs:
VolumeSize: 1000
head_node_type: head
可选:设置一个自动扩展集群
如果你想尝试在启用自动扩展的情况下运行工作负载,请将工作节点的 min_workers
更改为 0。提交工作负载后,将会有 9 个工作节点扩展以适应工作负载。这些节点在工作负载完成后将缩减。
部署一个 Ray 集群#
现在我们已经准备好使用上面定义的配置来部署 Ray 集群了。在运行命令之前,请确保您的 AWS 凭证已正确配置。
ray up -y cluster.yaml
将创建一个 Ray 头节点和 9 个 Ray 工作节点。
运行工作负载#
我们将使用 Ray 作业提交 来启动工作负载。
连接到集群#
首先,我们连接到作业服务器。在单独的shell中运行以下阻塞命令。
ray dashboard cluster.yaml
这将把远程端口 8265 转发到本地主机上的端口 8265。
提交工作负载#
我们将使用 Ray Job Python SDK 来提交 XGBoost 工作负载。
from ray.job_submission import JobSubmissionClient
client = JobSubmissionClient("http://127.0.0.1:8265")
kick_off_xgboost_benchmark = (
# Clone ray. If ray is already present, don't clone again.
"git clone https://github.com/ray-project/ray || true; "
# Run the benchmark.
"python ray/release/train_tests/xgboost_lightgbm/train_batch_inference_benchmark.py"
" xgboost --size=100G --disable-check"
)
submission_id = client.submit_job(
entrypoint=kick_off_xgboost_benchmark,
)
print("Use the following command to follow this Job's logs:")
print(f"ray job logs '{submission_id}' --follow")
要提交工作负载,请运行上述 Python 脚本。该脚本可在 [Ray 仓库][XGBSubmit] 中找到。
# Download the above script.
curl https://raw.githubusercontent.com/ray-project/ray/releases/2.0.0/doc/source/cluster/doc_code/xgboost_submit.py -o xgboost_submit.py
# Run the script.
python xgboost_submit.py
观察进度#
基准测试可能需要长达30分钟的时间来运行。使用以下工具来观察其进度。
作业日志#
要查看作业的日志,请使用上述提交脚本打印的命令。
# Subsitute the Ray Job's submission id.
ray job logs 'raysubmit_xxxxxxxxxxxxxxxx' --address="http://localhost:8265" --follow
Ray 仪表盘#
在浏览器中访问 localhost:8265
以查看 Ray 仪表板。
Ray 状态#
观察自动扩展状态和 Ray 资源使用情况
ray exec cluster.yaml 'ray status'
任务完成#
基准测试结果#
一旦基准测试完成,作业日志将显示结果:
Results: {'training_time': 1338.488839321999, 'prediction_time': 403.36653568099973}
基准测试的性能对底层云基础设施敏感——你可能无法匹配 基准测试文档中引用的数字。
模型参数#
Ray 头节点中的文件 model.json
包含了训练模型的参数。其他结果数据将在头节点中的目录 ray_results
中可用。详情请参阅 XGBoostTrainer 文档。
缩小
如果启用了自动扩展,Ray 工作节点将在指定的空闲超时后缩减。
清理#
使用以下命令删除您的 Ray 集群:
ray down -y cluster.yaml