📢gitzw.com上线了,功能陆续更新中,如有问题或反馈请在下方反馈/建议中给我们留言。
Ray:AI 计算引擎实战与选型

Ray:AI 计算引擎实战与选型

📌 本文速览

Ray 是一个统一的 AI 计算引擎,用于加速机器学习工作负载。通过本教程,你将学习如何使用 Ray 进行分布式计算、如何选择合适的 AI 库以及如何将 Ray 集成到你的项目中。

🎯 进阶📖 11 章⏱ ≈32 分钟读完🔄 更新于 2026-07-09📅 资料截至 2026-07
源项目:github.com/ray-project/ray★ 43,177

1. Ray 介绍:什么是 Ray,为什么需要 Ray

Ray 介绍:什么是 Ray,为什么需要 Ray

Ray 是一个用于扩展 AI 和 Python 应用的统一框架。它提供了一种简单的方式来扩展你的应用程序,从单机到分布式集群。

要点

  • Ray 是一个开源项目
  • Ray 支持 Python 语言
  • Ray 提供了任务、演员和对象的概念

我们先来了解一下 Ray 的核心概念:

任务(Task)

任务是 Ray 中的基本执行单位。它代表了一段可以被执行的代码。

演员(Actor)

演员是 Ray 中的状态ful 的执行单位。它可以维护自己的状态,并提供方法来访问和修改状态。

对象(Object)

对象是 Ray 中的数据单元。它可以被任务和演员使用和共享。

为什么需要 Ray

Ray 提供了一种简单的方式来扩展你的应用程序。它可以帮助你:

  • 提高应用程序的性能
  • 提高应用程序的可扩展性
  • 简化分布式计算的开发

本章小结

  • 了解了 Ray 的基本概念:任务、演员和对象
  • 了解了 Ray 的优势:提高性能、可扩展性和简化分布式计算
  • 为后续章节的学习打下了基础

2. 安装和配置 Ray:如何安装和配置 Ray 环境

安装和配置 Ray:如何安装和配置 Ray 环境

要开始使用 Ray,我们需要先安装和配置 Ray 环境。下面我们将一步步地介绍如何安装和配置 Ray。

前置条件

  • Python 3.7 或更高版本
  • pip 20.0 或更高版本

安装 Ray

我们可以使用 pip 来安装 Ray:

pip install ray

预期结果:Ray 安装成功,版本号为最新版本。

配置 Ray

安装完成后,我们需要配置 Ray。我们可以通过设置环境变量来配置 Ray:

import ray

# 初始化 Ray
ray.init()

# 配置 Ray 的日志级别
ray.set_log_level(ray.logging.INFO)

预期结果:Ray 初始化成功,日志级别设置为 INFO。

常见问题和解决方法

  • 安装失败:检查 pip 版本是否符合要求,尝试重新安装。
  • 配置失败:检查环境变量是否设置正确,尝试重新初始化 Ray。

实用技巧

  • 使用 ray.init() 来初始化 Ray。
  • 使用 ray.set_log_level() 来设置 Ray 的日志级别。
  • 使用 ray.shutdown() 来关闭 Ray。

小例子

下面是一个简单的例子,演示如何使用 Ray 来执行一个任务:

import ray

# 初始化 Ray
ray.init()

# 定义一个任务
@ray.remote
def hello():
    return "Hello, World!"

# 执行任务
result = ray.get(hello.remote())

# 输出结果
print(result)

# 关闭 Ray
ray.shutdown()

预期结果:输出 "Hello, World!"。

本章小结

  • 了解了如何安装和配置 Ray 环境
  • 了解了如何使用 pip 来安装 Ray
  • 了解了如何配置 Ray 的日志级别
  • 了解了如何使用 Ray 来执行一个任务

3. Ray Core:任务、演员和对象的使用

Ray Core:任务、演员和对象的使用

要开始使用 Ray Core,我们需要确保已经安装并配置好了 Ray 环境。假设你已经完成了上一章的安装和配置步骤。

前置条件

  • 已经安装并配置好了 Ray 环境。
  • 熟悉 Python 语言。

任务(Task)的使用

任务是 Ray 中最基本的执行单位。我们可以使用 @ray.remote 装饰器来定义一个任务。

import ray

# 初始化 Ray
ray.init()

# 定义一个任务
@ray.remote
def add(x, y):
    return x + y

# 执行任务
result = ray.get(add.remote(2, 3))

# 输出结果
print(result)  # 输出:5

# 关闭 Ray
ray.shutdown()

预期结果:输出 5

演员(Actor)的使用

演员是 Ray 中一种特殊的任务,可以维持自己的状态。

import ray

# 初始化 Ray
ray.init()

# 定义一个演员
@ray.remote
class Counter:
    def __init__(self):
        self.count = 0

    def increment(self):
        self.count += 1
        return self.count

# 创建一个演员
counter = Counter.remote()

# 调用演员的方法
result = ray.get(counter.increment.remote())

# 输出结果
print(result)  # 输出:1

# 关闭 Ray
ray.shutdown()

预期结果:输出 1

对象(Object)的使用

对象是 Ray 中一种可以被多个任务或演员共享的数据。

import ray

# 初始化 Ray
ray.init()

# 创建一个对象
obj = ray.put("Hello, World!")

# 定义一个任务
@ray.remote
def print_obj(obj_id):
    obj = ray.get(obj_id)
    print(obj)

# 执行任务
print_obj.remote(obj)

# 关闭 Ray
ray.shutdown()

预期结果:输出 Hello, World!

注意事项

  • 任务、演员和对象的创建和使用需要在 Ray 初始化后进行。
  • 任务、演员和对象的使用需要在 Ray 关闭前完成。

实用技巧

  • 使用 ray.get() 来获取任务或演员的结果。
  • 使用 ray.put() 来创建一个对象。
  • 使用 ray.remote() 来定义一个任务或演员。

本章小结

  • 了解了任务、演员和对象的定义和使用。
  • 了解了如何使用 @ray.remote 装饰器来定义一个任务或演员。
  • 了解了如何使用 ray.get() 来获取任务或演员的结果。
  • 了解了如何使用 ray.put() 来创建一个对象。

4. Ray AI Libraries:Data、Train、Tune、RLlib 和 Serve 的介绍

Ray AI Libraries 是 Ray 框架中的一个重要组成部分,提供了多种库来支持 AI 和机器学习任务的开发,包括 Data、Train、Tune、RLlib 和 Serve。这些库可以帮助开发者更容易地构建和部署 AI 模型。

前置条件

  • 已经安装和配置了 Ray 环境。
  • 了解了 Ray 的基本概念和使用方法。

Data 库

Data 库提供了数据处理和管理的功能,包括数据加载、预处理和存储等。

import ray

# 初始化 Ray
ray.init()

# 加载数据
data = ray.data.read_csv("data.csv")

# 预处理数据
data = data.map(lambda x: x["column1"] + 1)

# 存储数据
data.write_csv("output.csv")

# 关闭 Ray
ray.shutdown()

预期结果:输出处理后的数据到 output.csv 文件。

Train 库

Train 库提供了分布式训练的功能,支持多种机器学习框架,包括 TensorFlow 和 PyTorch。

import ray
from ray import train

# 初始化 Ray
ray.init()

# 定义训练函数
@train.function
def train_model():
    # 训练模型
    model = ...
    return model

# 执行训练
train_model.remote()

# 关闭 Ray
ray.shutdown()

预期结果:输出训练后的模型。

Tune 库

Tune 库提供了超参数调优的功能,支持多种调优算法,包括随机搜索和贝叶斯优化。

import ray
from ray import tune

# 初始化 Ray
ray.init()

# 定义调优函数
def tune_model(config):
    # 训练模型
    model = ...
    return model

# 执行调优
tune.run(tune_model, config={"param1": tune.uniform(0, 1)})

# 关闭 Ray
ray.shutdown()

预期结果:输出调优后的模型。

RLlib 库

RLlib 库提供了强化学习的功能,支持多种强化学习算法,包括 DQN 和 PPO。

import ray
from ray import rllib

# 初始化 Ray
ray.init()

# 定义强化学习环境
env = ...

# 定义强化学习算法
algo = rllib.algorithms.dqn.DQN(env=env)

# 执行强化学习
algo.train()

# 关闭 Ray
ray.shutdown()

预期结果:输出训练后的强化学习模型。

Serve 库

Serve 库提供了模型服务的功能,支持多种模型框架,包括 TensorFlow 和 PyTorch。

import ray
from ray import serve

# 初始化 Ray
ray.init()

# 定义模型服务
@serve.deployment
def model_service():
    # 加载模型
    model = ...
    return model

# 执行模型服务
model_service.deploy()

# 关闭 Ray
ray.shutdown()

预期结果:输出模型服务的结果。

注意事项

  • Data 库需要在 Ray 初始化后使用。
  • Train 库需要在 Ray 初始化后使用。
  • Tune 库需要在 Ray 初始化后使用。
  • RLlib 库需要在 Ray 初始化后使用。
  • Serve 库需要在 Ray 初始化后使用。

实用技巧

  • 使用 ray.data 来加载和预处理数据。
  • 使用 ray.train 来执行分布式训练。
  • 使用 ray.tune 来执行超参数调优。
  • 使用 ray.rllib 来执行强化学习。
  • 使用 ray.serve 来执行模型服务。

本章小结

  • 了解了 Data 库的使用方法。
  • 了解了 Train 库的使用方法。
  • 了解了 Tune 库的使用方法。
  • 了解了 RLlib 库的使用方法。
  • 了解了 Serve 库的使用方法。

5. 分布式计算:如何使用 Ray 进行分布式计算

分布式计算是 Ray 的核心功能之一,我们可以使用 Ray 来进行分布式计算。要使用 Ray 进行分布式计算,我们需要先初始化 Ray 环境。

初始化 Ray 环境

我们可以使用以下命令来初始化 Ray 环境:

import ray
ray.init()

定义任务

任务是 Ray 中的基本计算单位,我们可以使用 @ray.remote 装饰器来定义任务:

@ray.remote
def my_task(x):
    return x * x

执行任务

我们可以使用 ray.get 函数来执行任务:

result = ray.get(my_task.remote(2))
print(result)  # 输出:4

使用多个 worker

我们可以使用 ray.cluster 模块来创建多个 worker:

import ray.cluster as cluster

# 创建一个集群
cluster.init()

# 创建多个 worker
for i in range(4):
    cluster.add_worker()

# 定义任务
@ray.remote
def my_task(x):
    return x * x

# 执行任务
results = ray.get([my_task.remote(i) for i in range(10)])
print(results)

注意事项

  • 任务必须是无状态的,不能依赖于外部状态。
  • 任务必须是幂等的,多次执行相同的任务应该得到相同的结果。
  • 任务必须是可序列化的,才能被发送到其他 worker 中执行。

实用技巧

  • 使用 ray.put 函数来存储数据,这样可以避免数据被多次传输。
  • 使用 ray.get 函数来获取数据,这样可以避免数据被多次计算。
  • 使用 ray.wait 函数来等待任务完成,这样可以避免任务被多次执行。

本章小结

  • 了解了如何初始化 Ray 环境。
  • 了解了如何定义任务。
  • 了解了如何执行任务。
  • 了解了如何使用多个 worker。
  • 了解了任务的限制和注意事项。

6. 性能优化:如何优化 Ray 的性能

性能优化:如何优化 Ray 的性能

要优化 Ray 的性能,我们需要了解几个关键因素:任务的粒度、数据的传输、worker 的利用率。下面我们一步步来分析和优化这些因素。

任务的粒度

任务的粒度直接影响到 Ray 的性能。如果任务太小,会导致任务调度的开销大于任务执行的时间,降低整体性能。反之,如果任务太大,可能导致 worker 的利用率不均衡,同样影响性能。

推荐做法

  • 将大任务分解成小任务,这样可以提高任务的并行度和 worker 的利用率。
  • 使用 ray.remote decorator 来定义任务,并使用 ray.get 函数来获取任务的结果。

数据的传输

数据的传输是 Ray 中一个重要的性能瓶颈。特别是当数据量大时,传输数据会占用大量的时间和资源。

注意事项

  • 使用 ray.put 函数来存储数据,这样可以避免数据被多次传输。
  • 使用 ray.get 函数来获取数据,这样可以避免数据被多次计算。

worker 的利用率

worker 的利用率直接影响到 Ray 的整体性能。如果 worker 的利用率太低,可能导致任务执行时间变长,降低性能。

实用技巧

  • 使用 ray.cluster 模块来创建和管理 worker。
  • 使用 ray.wait 函数来等待任务完成,这样可以避免任务被多次执行。

示例代码

import ray
import time

# 初始化 Ray
ray.init()

# 定义任务
@ray.remote
def my_task(x):
    time.sleep(1)  # 模拟任务执行时间
    return x * x

# 执行任务
results = ray.get([my_task.remote(i) for i in range(10)])
print(results)

# 关闭 Ray
ray.shutdown()

本章小结

  • 了解了任务的粒度对 Ray 性能的影响。
  • 了解了数据传输对 Ray 性能的影响。
  • 了解了 worker 的利用率对 Ray 性能的影响。
  • 了解了如何优化 Ray 的性能。

7. 集成和部署:如何将 Ray 集成到你的项目中

要将 Ray 集成到你的项目中,首先需要确保 Ray 已经正确安装和配置。假设你已经完成了前面的章节,具备基本的 Ray 使用知识。

前置条件

  • Ray 已经安装并配置好。
  • 你的项目已经具备基本的 Python 环境。

步骤一:创建 Ray 集群

创建 Ray 集群是将 Ray 集成到你的项目中的第一步。你可以使用 ray.cluster 模块来创建和管理 worker。

import ray

# 初始化 Ray
ray.init()

# 创建一个 Ray 集群
cluster = ray.cluster.RayCluster()

步骤二:定义和注册任务

定义和注册任务是使用 Ray 的关键步骤。你需要使用 @ray.remote 装饰器来定义任务。

# 定义任务
@ray.remote
def my_task(x):
    return x * x

步骤三:执行任务

执行任务是使用 Ray 的另一个关键步骤。你可以使用 ray.get 函数来获取任务的结果。

# 执行任务
result = ray.get(my_task.remote(10))
print(result)

实用技巧

  • 使用 ray.wait 函数来等待任务完成,这样可以避免任务被多次执行。
  • 使用 ray.put 函数来存储数据,这样可以避免数据被多次传输。

注意

  • 在生产环境中,需要确保 Ray 集群的安全性和稳定性。
  • 需要监控和调试 Ray 的性能和日志。

本章小结

  • 了解了如何创建 Ray 集群。
  • 了解了如何定义和注册任务。
  • 了解了如何执行任务。
  • 了解了如何优化 Ray 的性能和安全性。

8. 监控和调试:如何使用 Ray Dashboard 和 Distributed Debugger

监控和调试是使用 Ray 的重要步骤。我们需要使用 Ray Dashboard 和 Distributed Debugger 来监控和调试 Ray 的性能和日志。

步骤一:启动 Ray Dashboard

我们可以使用以下命令来启动 Ray Dashboard:

ray dashboard

这将启动 Ray Dashboard 的 web 服务器,我们可以通过浏览器访问 http://localhost:8265 来查看 Ray 的监控信息。

步骤二:使用 Ray Dashboard

Ray Dashboard 提供了多种监控信息,包括:

  • 任务执行情况
  • 演员状态
  • 对象存储情况
  • 日志信息

我们可以通过 Ray Dashboard 来监控 Ray 的性能和日志,快速定位问题。

步骤三:使用 Distributed Debugger

Distributed Debugger 是 Ray 提供的分布式调试工具。我们可以使用以下命令来启动 Distributed Debugger:

ray debug

这将启动 Distributed Debugger 的 web 服务器,我们可以通过浏览器访问 http://localhost:8239 来进行调试。

实用技巧

  • 使用 ray debug 命令来启动 Distributed Debugger。
  • 使用 ray dashboard 命令来启动 Ray Dashboard。
  • 使用 ray logs 命令来查看 Ray 的日志信息。

注意

  • 在生产环境中,需要确保 Ray Dashboard 和 Distributed Debugger 的安全性和稳定性。
  • 需要监控和调试 Ray 的性能和日志。

本章小结

  • 了解了如何启动 Ray Dashboard。
  • 了解了如何使用 Ray Dashboard 来监控 Ray 的性能和日志。
  • 了解了如何使用 Distributed Debugger 来调试 Ray。
  • 了解了如何优化 Ray 的性能和安全性。

9. 选型和比较:Ray 与其他 AI 计算引擎的比较

选型和比较:Ray 与其他 AI 计算引擎的比较

在选择 AI 计算引擎时,我们需要考虑多种因素,包括性能、可扩展性、易用性和社区支持。Ray 是一个流行的选择,但也需要与其他引擎进行比较。

要点

  • 性能:Ray 的性能优势在于其能够将任务并行化和分布式执行。
  • 可扩展性:Ray 支持水平扩展和垂直扩展,能够适应大规模的计算任务。
  • 易用性:Ray 提供了简单易用的 API 和 Dashboard,方便用户管理和监控计算任务。
  • 社区支持:Ray 有一个活跃的社区和丰富的文档,能够提供快速的支持和解决方案。

对比表格

引擎 性能 可扩展性 易用性 社区支持
Ray 支持水平和垂直扩展 简单易用 活跃的社区和丰富的文档
TensorFlow 支持水平扩展 复杂 大规模的社区和丰富的文档
PyTorch 支持水平扩展 简单易用 活跃的社区和丰富的文档
Apache Spark 支持水平扩展 复杂 大规模的社区和丰富的文档

注意

  • 在选择 AI 计算引擎时,需要根据具体的需求和场景进行选择。
  • Ray 的性能优势在于其能够将任务并行化和分布式执行,但也需要考虑其资源占用和网络通信的开销。
  • Ray 的可扩展性和易用性使其成为一个流行的选择,但也需要考虑其社区支持和文档的丰富度。

实用技巧

  • 使用 Ray 的 Dashboard 来监控和管理计算任务。
  • 使用 Ray 的 API 来创建和管理任务和演员。
  • 使用 Ray 的分布式调试工具来调试计算任务。

本章小结

  • 了解了 Ray 与其他 AI 计算引擎的比较。
  • 了解了 Ray 的性能优势和可扩展性。
  • 了解了 Ray 的易用性和社区支持。
  • 了解了如何选择合适的 AI 计算引擎。

10. 实战案例:使用 Ray 进行机器学习任务

实战案例:使用 Ray 进行机器学习任务

我们已经了解了 Ray 的基本概念和特性,现在让我们通过一些实战案例来学习如何使用 Ray 进行机器学习任务。

任务 1:使用 Ray 进行数据预处理

  • 安装必要的库:pip install ray pandas numpy
  • 导入必要的库:```python import ray import pandas as pd import numpy as np
*   初始化 Ray:```python
ray.init()
  • 定义一个数据预处理函数:```python @ray.remote def preprocess_data(data):

    数据预处理逻辑

    return data.apply(lambda x: x ** 2)
*   创建一个样本数据集:```python
data = pd.DataFrame(np.random.rand(100, 5))
  • 使用 Ray 进行数据预处理:```python result = ray.get(preprocess_data.remote(data))
*   预期结果:`result` 将是一个预处理后的数据集。

### 任务 2:使用 Ray 进行模型训练

*   安装必要的库:`pip install ray scikit-learn`
*   导入必要的库:```python
import ray
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
  • 初始化 Ray:```python ray.init()
*   加载 iris 数据集:```python
iris = load_iris()
X, y = iris.data, iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
  • 定义一个模型训练函数:```python @ray.remote def train_model(X_train, y_train):

    模型训练逻辑

    model = RandomForestClassifier() model.fit(X_train, y_train) return model
*   使用 Ray 进行模型训练:```python
model = ray.get(train_model.remote(X_train, y_train))
  • 预期结果:model 将是一个训练好的模型。

注意

  • 在使用 Ray 进行数据预处理和模型训练时,需要确保数据集和模型参数正确传递给远程函数。
  • Ray 的远程函数需要使用 @ray.remote 装饰器进行定义。
  • 使用 ray.get 函数来获取远程函数的返回值。

实用技巧

  • 使用 Ray 的 Dashboard 来监控和管理计算任务。
  • 使用 Ray 的 API 来创建和管理任务和演员。
  • 使用 Ray 的分布式调试工具来调试计算任务。

本章小结

  • 了解了如何使用 Ray 进行数据预处理和模型训练。
  • 了解了 Ray 的远程函数和任务管理。
  • 了解了如何使用 Ray 的 Dashboard 和 API 来监控和管理计算任务。

11. 进阶话题:Ray 的高级特性和最佳实践

进阶话题:Ray 的高级特性和最佳实践

要深入掌握 Ray 的高级特性和最佳实践,我们需要了解如何优化 Ray 的性能、如何使用 Ray 的高级 API,以及如何将 Ray 集成到我们的项目中。

前置条件

  • 已经安装和配置了 Ray 环境。
  • 了解了 Ray 的基本概念和 API。

优化 Ray 的性能

要优化 Ray 的性能,我们可以使用以下方法:

  • 使用 Ray 的缓存机制:Ray 提供了缓存机制,可以缓存计算结果以减少重复计算。
  • 使用 Ray 的并行计算:Ray 提供了并行计算机制,可以同时执行多个任务以提高性能。
  • 优化 Ray 的配置:Ray 提供了多种配置选项,我们可以根据我们的需求优化这些配置选项。

使用 Ray 的高级 API

Ray 提供了多种高级 API,我们可以使用这些 API 来实现更复杂的功能。例如:

  • 使用 Ray 的任务依赖:Ray 提供了任务依赖机制,我们可以使用这个机制来定义任务之间的依赖关系。
  • 使用 Ray 的资源管理:Ray 提供了资源管理机制,我们可以使用这个机制来管理计算资源。

将 Ray 集成到项目中

要将 Ray 集成到我们的项目中,我们需要了解如何使用 Ray 的 API 来实现我们的需求。例如:

  • 使用 Ray 的远程函数:Ray 提供了远程函数机制,我们可以使用这个机制来定义远程函数。
  • 使用 Ray 的任务管理:Ray 提供了任务管理机制,我们可以使用这个机制来管理任务。

注意

  • 在使用 Ray 的高级 API 时,需要确保我们理解这些 API 的语义和用法。
  • 在将 Ray 集成到我们的项目中时,需要确保我们理解 Ray 的配置选项和资源管理机制。

实用技巧

  • 使用 Ray 的 Dashboard 来监控和管理计算任务。
  • 使用 Ray 的 API 来创建和管理任务和演员。
  • 使用 Ray 的分布式调试工具来调试计算任务。

本章小结

  • 了解了如何优化 Ray 的性能。
  • 了解了如何使用 Ray 的高级 API。
  • 了解了如何将 Ray 集成到我们的项目中。

常见问题

安装报错如何解决

如果您在安装 Ray 时遇到报错,可以尝试检查您的 Python 版本是否兼容,以及是否安装了必要的依赖库。您可以通过 pip install --upgrade pip 命令更新 pip 版本,然后再尝试安装 Ray。同时,也可以查看 Ray 的官方文档和 GitHub Issues 中的相关问题解决方案。

Ray 的环境和依赖要求

Ray 支持 Python 3.7 及以上版本,推荐使用 Python 3.9 或更高版本。同时,Ray 也依赖于一些其他库,如 numpypyarrow 等。您可以通过 pip install ray 命令安装 Ray 和其依赖库。

Ray 的配置方式

Ray 提供了多种配置方式,包括通过环境变量、配置文件和代码中的配置参数。您可以通过设置环境变量 RAY_ADDRESS 来指定 Ray 集群的地址,或者通过创建配置文件 ray_config.yaml 来配置 Ray 的参数。

Ray 的使用误区

Ray 是一个分布式计算引擎,需要正确配置和使用才能发挥其优势。常见的使用误区包括未正确配置 Ray 集群,未使用合适的并行度,未优化任务执行等。您可以通过查看 Ray 的官方文档和示例代码来避免这些误区。

Ray 与同类产品的对比

Ray 与其他分布式计算引擎如 Apache Spark、Dask 等相比,具有更高的性能和更低的延迟。同时,Ray 也提供了更简单的 API 和更易用的接口,方便开发者使用。您可以通过查看 Ray 的官方文档和 benchmark 测试结果来了解其优势。

Ray 的监控和调试

Ray 提供了多种监控和调试工具,包括 Ray Dashboard 和 Ray Distributed Debugger。您可以通过这些工具来监控 Ray 集群的状态,调试任务执行的错误等。同时,Ray 也提供了日志记录和性能分析工具,帮助您优化 Ray 的性能。

Ray 的社区支持

Ray 有一个活跃的社区,提供了多种支持渠道,包括 Discourse Forum、GitHub Issues、Slack 等。您可以通过这些渠道来提问、报告 bug 和获取帮助。同时,Ray 的社区也提供了多种资源,包括文档、示例代码和教程等,帮助您学习和使用 Ray。

🔗 相关推荐

📦 相关项目