This section describes the environment in which your program will execute on Qarnot's computing farm.
A compute node is a bare metal server embedded inside Qarnot's digital heaters, or its industrial version. Compute nodes have the following caracteristics:
- High end CPU: Intel® Core™ i7 (4c/8t) CPUs, with a frequency of 3.5 GHz or more.
- 16 GB of RAM
- Diskless: all storage (task resources, results and intermediate files) are either network volumes or ramdisks.
- Rebooted for each new client: when your task arrives on a computing node, it is rebooted, so you start with a clean environment.
- No sharing: when your task runs on a compute node, it is the only task running there. We don't share CPUs between customers.
Environment variables and directories
Here is a list of environment variables accessible to your program:
$INSTANCE_ID: the id of the running instance of your program (see tasks and advanced ranges for details on what instances are and how to precisely control the values taken by
$INSTANCE_COUNT: the total number of instances of your task.
$TASK_PATH: where you will find your resources (from the resource bucket), and where you should write your results. Any file that you write here will be available in the results bucket when your task completes. Please note that this directory is optimized for final results transfers and is not well suited to store temporary files.
$TMP_RAMFS_PATH: directory aimed at storing small temporary files in RAM. This is a ramdisk, so it is very fast, however every file stored here will use some RAM that will not be available to your application. Hence it's only suited for small files.
$TMP_PATH: directory aimed at storing bigger temporary files. Contrary to
$TMP_RAMFS_PATH, this is a network volume, so it will be slower, but you can store bigger files than what is possible to keep in RAM, without impacting the amount of memory available to your application.
The working directory of your program is
About accessing environment variables from
Using our docker profiles, you set the command that you want to be executed
in your docker container using the
DOCKER_CMD constant (see profiles).
Please note that this command is not executed by a shell, but in a way equivalent to
passing it to
docker run $DOCKER_REPO:$DOCKER_TAG $DOCKER_CMD. Hence, all the environment
variables listed above cannot be used directly in
DOCKER_CMD, as nothing will take care
of any substitution. For instance, setting the constant
DOCKER_CMD = "echo $INSTANCE_ID"
will not work as expected. To do this correctly, you need to specifically run your command
in a shell, for instance like this:
DOCKER_CMD = 'sh -c "echo $INSTANCE_ID"', the same
way you would do on your own machine.