code: def test_torch_linear(ray_start_4_cpus, num_workers):
      num_workers = num_workers
      epochs = 3
  
      config = {
          "lr": 1e-2,
          "hidden_size": 1,
          "batch_size": 4,
          "epochs": epochs,
      }
      trainer = TorchTrainer(
          linear_train_func,
          train_loop_config=config,
          scaling_config=ScalingConfig(num_workers=num_workers),
      )
      results = trainer.fit()
  
      result = results.metrics
      assert result[TRAINING_ITERATION] == epochs
  
      loss = list(results.metrics_dataframe["loss"])
      assert len(loss) == epochs
      assert loss[-1] < loss[0]
  
file_path: ray/python/ray/train/tests/test_examples.py
imports: import pytest
  from ray.air.constants import TRAINING_ITERATION
  from ray.train import ScalingConfig
  from ray.train.examples.horovod.horovod_example import train_func
  from ray.train.examples.pytorch.torch_fashion_mnist_example import train_func_per_worker
  from ray.train.examples.pytorch.torch_linear_example import train_func
  from ray.train.examples.pytorch.torch_quick_start import train_func
  from ray.train.examples.tf.tensorflow_mnist_example import train_func
  from ray.train.examples.tf.tensorflow_quick_start import train_func
  from ray.train.horovod.horovod_trainer import HorovodTrainer
  from ray.train.tensorflow.tensorflow_trainer import TensorflowTrainer
  from ray.train.torch.torch_trainer import TorchTrainer
label_desc: Use image node_id 3 for calling a global function with example usage: test_torch_linear(ray_start_4_cpus, num_workers) without return types