Files
ray-project--ray/python/ray/train/v2/tests/test_tensorflow_trainer.py
T
2026-07-13 13:17:40 +08:00

83 lines
2.2 KiB
Python

import os
os.environ["TF_USE_LEGACY_KERAS"] = "1"
import sys
import pytest
import ray
from ray.data.preprocessors import Concatenator
from ray.train import ScalingConfig
from ray.train.constants import TRAIN_DATASET_KEY
if sys.version_info >= (3, 12):
# Tensorflow is not installed for Python 3.12 because of keras compatibility.
pass
else:
from ray.train.examples.tf.tensorflow_regression_example import (
train_func as tensorflow_linear_train_func,
)
from ray.train.tensorflow import TensorflowTrainer
@pytest.fixture
def ray_start_4_cpus():
address_info = ray.init(num_cpus=4)
yield address_info
# The code after the yield will run as teardown code.
ray.shutdown()
def build_model():
import tensorflow as tf
model = tf.keras.Sequential(
[
tf.keras.layers.InputLayer(input_shape=()),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(1),
]
)
return model
@pytest.mark.parametrize("num_workers", [1, 2])
def test_tensorflow_linear(ray_start_4_cpus, num_workers):
"""Also tests air Keras callback."""
epochs = 1
def train_func(config):
result = tensorflow_linear_train_func(config)
assert len(result) == epochs
train_loop_config = {
"lr": 1e-3,
"batch_size": 32,
"epochs": epochs,
}
scaling_config = ScalingConfig(num_workers=num_workers)
dataset = ray.data.read_csv("s3://anonymous@air-example-data/regression.csv")
columns_to_concatenate = [f"x{i:03}" for i in range(100)]
preprocessor = Concatenator(columns=columns_to_concatenate, output_column_name="x")
dataset = preprocessor.transform(dataset)
trainer = TensorflowTrainer(
train_loop_per_worker=train_func,
train_loop_config=train_loop_config,
scaling_config=scaling_config,
datasets={TRAIN_DATASET_KEY: dataset},
)
result = trainer.fit()
assert not result.error
assert result.checkpoint
if __name__ == "__main__":
if sys.version_info >= (3, 12):
# Tensorflow is not installed for Python 3.12 because of keras compatibility.
sys.exit(0)
else:
sys.exit(pytest.main(["-v", "-x", __file__]))