====== Keras Python Virtual Environment ======
This page documents the creation of a Python virtual environment (virtualenv) containing the Keras deep-learning suite on the Caviness HPC system. It assumes that the user is adding the software to the workgroup storage.
===== Prepare Workgroup Directory =====
Prepare to add software in the standard sub-directories of the workgroup storage:
[user@login01 ~]$ workgroup -g my_workgroup
[(my_workgroup:user)@login01 ~]$ mkdir --mode=2775 --parent ${WORKDIR}/sw/keras
[(my_workgroup:user)@login01 ~]$ mkdir --mode=2775 --parent ${WORKDIR}/sw/valet
These commands create any missing directories. All directories created will have group-write and -inherit permissions.
===== Create Keras Virtualenv =====
All versions of the Keras virtualenv will be stored in the common base directory, ''$WORKDIR/sw/keras''; each virtualenv must have a unique name that will become the VALET version of Keras. In this tutorial, the latest version of Keras as of today (2020-02-04) will be installed and the SKLearn package will be added, as well. An appropriate version would be '':sklearn'', or ''20200204:sklearn''. That version can be translated to a VALET-friendly directory name:
[(my_workgroup:user)@login01 ~]$ vpkg_id2path --version-id=20200204:sklearn
20200204-sklearn
[(my_workgroup:user)@login01 ~]$ mkdir --mode=3750 ${WORKDIR}/sw/keras/20200204-sklearn
The Intel Python distribution will form the basis for the Keras virtualenv, so add it to the environment:
[(my_workgroup:user)@login01 ~]$ vpkg_require intel-python/2019u5:python3
Adding package `intel-python/2019u5:python3` to your environment
(root) [(my_workgroup:user)@login01 ~]$
Notice the prompt changed: the text ''(root)'' now prefixes it, indicating the directory that contains the active Python virtualenv.
The Python environment will include Keras, numpy, and pip:
(root) [(my_workgroup:user)@login01 ~]$ conda create --prefix=${WORKDIR}/sw/keras/20200204-sklearn keras numpy pip
The conda environment builder will take some time to locate all the necessary packages and their dependencies. It will then ask for confirmation:
Proceed ([y]/n)? y
Answer "y" to create the virtualenv. If successful, text will be displayed that mentions source'ing a file to activate the virtualenv: refrain from doing that, and instead use VALET to manage the Keras virtualenv instances. Rollback the ''intel-python'' environment changes before proceeding:
(root) [(my_workgroup:user)@login01 ~]$ vpkg_rollback
[(my_workgroup:user)@login01 ~]$
Notice the ''(root)'' has disappeared from the prompt, indicating that the baseline virtualenv has been deactivated.
===== VALET Package Definition =====
Assuming the workgroup does //not// already have a Keras VALET package definition, the following text:
keras:
prefix: /work/my_workgroup/sw/keras
description: KERAS Python environments
flags:
- no-standard-paths
actions:
- action: source
script:
sh: intel-python.sh
order: failure-first
success: 0
versions:
"20200204:sklearn":
description: 2020-02-04 conda build with SKLearn added
dependencies:
- intel-python/2019u5:python3
would be added to ''${WORKDIR}/sw/valet/keras.vpkg_yaml''. If that file already exists, add your new version at the same level as others:
keras:
prefix: /work/my_workgroup/sw/keras
description: KERAS Python environments
flags:
- no-standard-paths
actions:
- action: source
script:
sh: intel-python.sh
order: failure-first
success: 0
versions:
"20200204:sklearn":
description: 2020-02-04 conda build with SKLearn added
dependencies:
- intel-python/2019u5:python3
"20191218":
description: 2019-12-18 conda build
dependencies:
- intel-python/2019u2:python3
"20191112":
description: 2019-11-12 conda build
dependencies:
- intel-python/2019u5:python3
On Caviness after a user has used the ''workgroup'' command, VALET searches for package definitions in ''${WORKDIR}/sw/valet'' by default.
===== Install SKLearn =====
The SKLearn package is not present in the conda online repositories, but it can be installed using ''pip.'' First, activate the new Keras virtualenv:
[(my_workgroup:user)@login01 ~]$ vpkg_require keras/20200204:sklearn
Adding dependency `intel-python/2019u5:python3` to your environment
Adding package `keras/20200204:sklearn` to your environment
(/work/my_workgroup/sw/keras/20200204-sklearn) [(my_workgroup:user)@login01 keras]$ which pip
/work/my_workgroup/sw/keras/20200204-sklearn/bin/pip
A prefix has reappeared on the prompt — the path at which the new Keras virtualenv was created — and the ''pip'' command refers to an executable within that directory tree. The virtualenv is ready to have SKLearn installed.
(/work/my_workgroup/sw/keras/20200204-sklearn) [(my_workgroup:user)@login01 ~]$ pip install sklearn
Collecting sklearn
Downloading ..
:
Successfully built sklearn
Installing collected packages: joblib, scikit-learn, sklearn
Successfully installed joblib-0.14.1 scikit-learn-0.22.1 sklearn-0.0
(/work/my_workgroup/sw/keras/20200204-sklearn) [(my_workgroup:user)@login01 ~]$ python3 -c "import sklearn;print(sklearn.__version__)"
0.22.1
The Keras environment with SKLearn is now ready for use.
===== Job Scripts =====
Any job scripts you submit that want to run scripts using this virtualenv should include something like the following toward its end:
#
# Setup Keras virtualenv:
#
vpkg_require keras/20200204:sklearn
#
# Run a Python script in that virtualenv:
#
python3 my_keras_work.py
rc=$?
#
# Do cleanup work, etc....
#
#
# Exit with whatever exit code our Python script handed back:
#
exit $rc