La libreria di R keras è utilizzabile in Terastat usando R/3.6.1; il primo passo è quindi quello di caricare R nella versione corretta e tenendo conto che la versione 3.4.1 è tra i moduli caricati di default per tutte le utenze

module rm R/3.4.1
module load R/3.6.1
keras si interfaccia con python e attraverso questo con tensorflow; è quindi necessario che tutti questi software siano presenti in verisoni compatibili tra loro. Inoltre si tratta di software ancora in veloce evoluzione per il quale utenti diversi potrebbero porre facilmente requisiti differenti.
Considerato tutto questo si è deciso di lasciare in userspace parte del software. Per utilizzare Keras quindi, bisogna quindi prima di tutto predisporre il prorpio ambiente istallando miniconda. Si può scaricare l'installer dal sito di Anaconda su uno dei nodi del cluster; in assenza di propri requisiti si consiglia di scaricare la versione basata su python 3 più recente compilata per Linux a 64bit. L'installer deve poi essere eseguito sempre su uno dei nodi del cluster. L'installer richiederà di accettare la licenza, di inserire il path di istallazione (si consiglia di lasciare il path suggerito) e di eseguire l'init (consigliato).
Una volta istallato, anaconda non è direttamente disponibile e dovrà essere attivato prima dell'uso in modo analogo a quanto avviene per i moduli. In questo caso bisogna però eseguire, ogni volta che lo si vuole usare, source ${HOME}/.bashrc. Come per i moduli questa riga dovrà essere presente negli script schedulati su TeraStat.
L'effetto di questo script è di cambiare la variabile PATH in modo tale che il source il path di python risulti differente e venga utilizzata la verisone di anaconda. lo si può verificare con

which python

Dato che i requisiti di keras/tensorflow escludono i processori più vecchi non lavorare su n2 ma su uno dei nodi da n7 a n18. Si consideri a questo proposito che non è necessario fare nulla nella schedulazione dei job dato che n2 non è incluso tra i nodi di calcolo.
Con anaconda attivo si può eseguire R (versione 3.6.1) ed infine in R

library(reticulate)
use_condaenv("r-reticulate")
library(tensorflow)
library(keras)
install_keras()

Il comando install_keras() dovrebbe essere necessario solo la prima volta e si occupa di scaricare nel virtul environment di python la versione di tensorflow opprtuna. A questo punto si può procedere con i propri esperimenti.
Per verificare l'istallazione  sempre in R si possono, tra gli altri, eseguire

py_discover_config("tensorflow")
py_discover_config("keras")
is_keras_available()

In particolare l'ultimo dovrebbe restituire TRUE a prova del corretto funzionamento di keras.
A seguire un breve esempio tratto da  keras.rstudio.com utilizzabile come test del proprio setup

library(reticulate)
use_condaenv("r-reticulate")
library(tensorflow)
library(keras)
mnist <- dataset_mnist()
x_train <- mnist$train$x
y_train <- mnist$train$y
x_test <- mnist$test$x
y_test <- mnist$test$y
# reshape
x_train <- array_reshape(x_train, c(nrow(x_train), 784))
x_test <- array_reshape(x_test, c(nrow(x_test), 784))
# rescale
x_train <- x_train / 255
x_test <- x_test / 255
y_train <- to_categorical(y_train, 10)
y_test <- to_categorical(y_test, 10)

model <- keras_model_sequential()
model %>%
layer_dense(units = 256, activation = 'relu', input_shape = c(784)) %>%
layer_dropout(rate = 0.4) %>%
layer_dense(units = 128, activation = 'relu') %>%
layer_dropout(rate = 0.3) %>%
layer_dense(units = 10, activation = 'softmax')

summary(model)
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_rmsprop(),
metrics = c('accuracy')
)

history <- model %>% fit(
x_train, y_train,
epochs = 30, batch_size = 128,
validation_split = 0.2
)

plot(history)

model %>% evaluate(x_test, y_test)

model %>% predict_classes(x_test)