Startup scripts allow you to configure and setup your instance, meaning automatically running scripts or installing software as soon as the instance has booted for the first time. 

We offer both, predefined installer scripts like the NVIDIA® GPU driver in the dashboard or the possibility to run any custom user-defined startup script via the API.


Let's first take one step back. When you create a new instance it contains all the software that comes with the image that you selected. For example in the case of Ubuntu 16 all the software that comes with a vanilla Ubuntu 16 installation.

For a lot of applications, especially GPU applications you will need additional software to be installed in order to successfully run those applications. 

For example, to install and run TensorFlow on an NVIDIA® GPU, you will also need an NVIDIA® GPU driver, NVIDIA® CUDA and of course installing TensorFlow itself. In order, to set up the most common types of software like the GPU driver, we will provide predefined startup scripts to make it easier to be up and running.


With startup scripts, you can inject a script that is automatically executed after the instance becomes active. Under the hood, it uses a mechanism called cloud-init and is also used to deploy your public SSH key on the instance. 


Please Note: The startup script is executed after the instance is booted and active, meaning if you log in to your instance the execution might still happen in the background. 

Please, don't snapshot, shutdown or restart your instance while a startup script is running


You can check the logs of your startup scripts via

journalctl | grep cloud-init

If your startup scripts have finished you will see the in last 2 lines of the logs something like this

Mär 12 12:47:06 julians-instance cloud-init[1891]: Cloud-init v. 19.4-33-gbb4131a2-0ubuntu1~16.04.1 running 'modules:final' at Thu, 12 Mar 2020 12:43:47 +0000. Up 33.96 seconds.
Mär 12 12:47:06 julians-instance cloud-init[1891]: Cloud-init v. 19.4-33-gbb4131a2-0ubuntu1~16.04.1 finished at Thu, 12 Mar 2020 12:47:06 +0000. Datasource DataSourceOpenStackLocal [net,ver=2].  Up 232.33 seconds



Installing the NVIDIA® GPU driver (version 418.56)

Please Note: Installing the driver will take about 4-5 minutes after the instance is active. This means in the first 4-5 minutes you will not be able to use the GPU. Please also don't snapshot or restart the instance during this time. This will fail the driver installation.


You can check if the NVIDIA driver installation already finished using the NVIDIA System Management Interface utility by running:

nvidia-smi


If the driver installation is not yet finished you will likely see error messages such: 

 -bash: nvidia-smi: command not found

Or later in the process:

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

Once the installation successfully finished you should see a proper nvidia-smi response like this one.

Thu Mar 12 12:47:16 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56       Driver Version: 418.56       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 108...  Off  | 00000000:00:05.0 Off |                  N/A |
|  0%   16C    P0    53W / 250W |      0MiB / 11178MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+


Via the Compute Dashboard


In order to install the NVIDIA® GPU driver version 418.56 on your instance just select the checkbox from the Instance Configuration section. 

Via the public Compute API

In order to install the NVIDIA® GPU driver version 418.56 on your instance via the public Compute API you can pass the following shell script as startup_script in your create instance request.

"metadata": {
        "startup_script": "#!\/bin\/sh\r\nset -eux\r\n__nvidia_full_version=\"418_418.56-0ubuntu1\"\r\n__nvidia_short_version=\"418\"\r\nis_installed=false\r\nfor i in $(seq 1 5)\r\ndo\r\n  echo \"Connecting to http:\/\/archive.ubuntu.com site for $i time\"\r\n  if curl -s --head  --request GET http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version} | grep \"HTTP\/1.1\" > \/dev\/null ;\r\n  then\r\n      echo \"Connected to http:\/\/archive.ubuntu.com. Start downloading and installing the NVIDIA driver...\"\r\n      __tempdir=\"$(mktemp -d)\"\r\n      apt-get install -y --no-install-recommends \"linux-headers-$(uname -r)\" dkms\r\n      wget -P \"${__tempdir}\" http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version}\/nvidia-kernel-common-${__nvidia_full_version}_amd64.deb\r\n      wget -P \"${__tempdir}\" http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version}\/nvidia-kernel-source-${__nvidia_full_version}_amd64.deb\r\n      wget -P \"${__tempdir}\" http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version}\/nvidia-dkms-${__nvidia_full_version}_amd64.deb\r\n      dpkg -i \"${__tempdir}\"\/nvidia-kernel-common-${__nvidia_full_version}_amd64.deb \"${__tempdir}\"\/nvidia-kernel-source-${__nvidia_full_version}_amd64.deb \"${__tempdir}\"\/nvidia-dkms-${__nvidia_full_version}_amd64.deb\r\n      wget -P \"${__tempdir}\" http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version}\/nvidia-utils-${__nvidia_full_version}_amd64.deb\r\n      wget -P \"${__tempdir}\" http:\/\/archive.ubuntu.com\/ubuntu\/pool\/restricted\/n\/nvidia-graphics-drivers-${__nvidia_short_version}\/libnvidia-compute-${__nvidia_full_version}_amd64.deb\r\n      dpkg -i \"${__tempdir}\"\/nvidia-utils-${__nvidia_full_version}_amd64.deb \"${__tempdir}\"\/libnvidia-compute-${__nvidia_full_version}_amd64.deb\r\n      rmmod nouveau\r\n      modprobe nvidia\r\n      nvidia-smi\r\n      is_installed=true\r\n      rm -r \"${__tempdir}\"\r\n      break\r\n  fi\r\n  sleep 2\r\ndone\r\nif [ $is_installed = true ];\r\nthen\r\n  echo \"NVIDIA driver has been installed.\"\r\nelse\r\n  echo \"NVIDIA driver has NOT been installed. Because we can NOT reach to http:\/\/archive.ubuntu.com site which hosted necessary deb packages for installation.\"\r\nfi"
}


Installing NVIDIA® CUDA

This feature is coming soon. Feel free to add or upvote on https://feedback.genesiscloud.com/feature-requests


Running custom startup scripts

This feature is coming soon. Feel free to add or upvote on https://feedback.genesiscloud.com/feature-requests