Using Environment Variables

User-specified environment variables

You can specify environment variables to be made available to a task in two ways:

  • The envs field (dict) in a task YAML

  • The --env flag in the sky launch/exec CLI (takes precedence over the above)

The file_mounts, setup, and run sections of a task YAML can access the variables via the ${MYVAR} syntax.

Using in file_mounts

# Sets default values for some variables; can be overridden by --env.
  MY_BUCKET: skypilot-temp-gcs-test
  MY_LOCAL_PATH: tmp-workdir

        name: ${MY_BUCKET}  # Name of the bucket.
        mode: MOUNT

        name: ${MY_BUCKET}-2
        source: ["~/${MY_LOCAL_PATH}"]

    /checkpoint/${MODEL_SIZE}: ~/${MY_LOCAL_PATH}

The values of these variables are filled in by SkyPilot at task YAML parse time.

Read more at examples/using_file_mounts_with_env_vars.yaml.

Using in setup and run

All user-specified environment variables are exported to a task’s setup and run commands (i.e., accessible when they are being run).

For example, this is useful for passing secrets (see below) or passing configurations:

# Sets default values for some variables; can be overridden by --env.
  MODEL_NAME: decapoda-research/llama-65b-hf

run: |
  python --model_name ${MODEL_NAME} <other args>
$ sky launch --env MODEL_NAME=decapoda-research/llama-7b-hf task.yaml  # Override.

See complete examples at llm/vllm/serve.yaml and llm/vicuna/train.yaml.

Passing secrets

We recommend passing secrets to any node(s) executing your task by first making it available in your current shell, then using --env to pass it to SkyPilot:

$ sky launch -c mycluster --env WANDB_API_KEY task.yaml
$ sky exec mycluster --env WANDB_API_KEY task.yaml


In other words, you do not need to pass the value directly such as --env WANDB_API_KEY=1234.

SkyPilot environment variables

SkyPilot exports these environment variables for a task’s execution (while run commands are running):





Rank (an integer ID from 0 to num_nodes-1) of the node executing the task. Read more here.



A string of IP addresses of the nodes reserved to execute the task, where each line contains one IP address. Read more here.


Number of GPUs reserved on each node to execute the task; the same as the count in accelerators: <name>:<count> (rounded up if a fraction). Read more here.



A unique ID assigned to each task. Useful for logging purposes: e.g., use a unique output path on the cluster; pass to Weights & Biases; etc.

If a task is run as a managed spot job, then all recoveries of that job will have the same ID value. Read more here.


The values of these variables are filled in by SkyPilot at task execution time.

You can access these variables in the following ways:

  • In the task YAML’s run commands (a Bash script), access them using the ${MYVAR} syntax;

  • In the program(s) launched in run, access them using the language’s standard method (e.g., os.environ for Python).