diff --git a/doc/source/tune-usage.rst b/doc/source/tune-usage.rst index 0748b1cac6883..7d80875f347ad 100644 --- a/doc/source/tune-usage.rst +++ b/doc/source/tune-usage.rst @@ -193,9 +193,12 @@ Using GPUs (Resource Allocation) Tune will allocate the specified GPU and CPU ``trial_resources`` to each individual trial (defaulting to 1 CPU per trial). Under the hood, Tune runs each trial as a Ray actor, using Ray's resource handling to allocate resources and place actors. A trial will not be scheduled unless at least that amount of resources is available in the cluster, preventing the cluster from being overloaded. +Fractional values are also supported, (i.e., ``"gpu": 0.2``). You can find an example of this in the `Keras MNIST example `__. + If GPU resources are not requested, the ``CUDA_VISIBLE_DEVICES`` environment variable will be set as empty, disallowing GPU access. Otherwise, it will be set to the GPUs in the list (this is managed by Ray). + If your trainable function / class creates further Ray actors or tasks that also consume CPU / GPU resources, you will also want to set ``extra_cpu`` or ``extra_gpu`` to reserve extra resource slots for the actors you will create. For example, if a trainable class requires 1 GPU itself, but will launch 4 actors each using another GPU, then it should set ``"gpu": 1, "extra_gpu": 4``. .. code-block:: python diff --git a/python/ray/tune/examples/tune_mnist_keras.py b/python/ray/tune/examples/tune_mnist_keras.py index 32cfb371efc46..da2e0c9e4b981 100644 --- a/python/ray/tune/examples/tune_mnist_keras.py +++ b/python/ray/tune/examples/tune_mnist_keras.py @@ -105,6 +105,8 @@ def create_parser(): parser = argparse.ArgumentParser(description='Keras MNIST Example') parser.add_argument( "--smoke-test", action="store_true", help="Finish quickly for testing") + parser.add_argument( + "--use-gpu", action="store_true", help="Use GPU in training.") parser.add_argument( '--jobs', type=int, @@ -113,8 +115,8 @@ def create_parser(): parser.add_argument( '--threads', type=int, - default=None, - help='threads used in operations (default: all)') + default=2, + help='threads used in operations (default: 2)') parser.add_argument( '--steps', type=float, @@ -185,6 +187,10 @@ def create_parser(): }, "run": "train_mnist", "num_samples": 1 if args.smoke_test else 10, + "trial_resources": { + "cpu": args.threads, + "gpu": 0.5 if args.use_gpu else 0 + }, "config": { "lr": lambda spec: np.random.uniform(0.001, 0.1), "momentum": lambda spec: np.random.uniform(0.1, 0.9),