From c2b49a760c4a81c1d85832e38b99840fc6e2919b Mon Sep 17 00:00:00 2001
From: Natasha Pavlovikj <npavlovikj2@unl.edu>
Date: Thu, 9 Jan 2020 15:25:01 -0600
Subject: [PATCH] Update anaconda page

This resolves #10, resolves #14
---
 .../using_anaconda_package_manager.md         | 75 +++++++++++++++----
 1 file changed, 61 insertions(+), 14 deletions(-)

diff --git a/content/applications/user_software/using_anaconda_package_manager.md b/content/applications/user_software/using_anaconda_package_manager.md
index 13a3db0f..b8641eb6 100644
--- a/content/applications/user_software/using_anaconda_package_manager.md
+++ b/content/applications/user_software/using_anaconda_package_manager.md
@@ -17,8 +17,10 @@ package and environment manager to make managing these environments
 straightforward.
 
 - [Using Anaconda](#using-anaconda)
-- [Installing Packages](#installing-packages)
-- [Adding Packages to an Existing Environment](#adding-packages-to-an-existing-environment)
+- [Searching for Packages](#searching-for-packages)
+- [Creating custom Anaconda Environment](#creating-custom-anaconda-environment)
+- [Adding and Removing Packages from an Existing Environment](#adding-and-removing-packages-from-an-existing-environment)
+- [Creating custom GPU Anaconda Environment](#creating-custom-gpu-anaconda-environment)
 - [Using an Anaconda Environment in a Jupyter Notebook on Crane](#using-an-anaconda-environment-in-a-jupyter-notebook-on-crane)
 
 ### Using Anaconda
@@ -68,6 +70,7 @@ conda info -e
 
 The active environment will be marked with an asterisk (\*) character.
 
+
 The `list` command will show all packages installed
 in the currently active environment.
 
@@ -77,9 +80,9 @@ conda list
 {{< /highlight >}}
 {{% /panel %}}
 
-### Installing Packages
+### Searching for Packages
 
-To find the names of packages, use the `search` subcommand.
+To find packages, use the `search` subcommand.
 
 {{% panel theme="info" header="Search for packages" %}}
 {{< highlight bash >}}
@@ -91,32 +94,33 @@ If the package is available, this will also display available package
 versions and compatible Python versions the package may be installed
 under.
 
+### Creating Custom Anaconda Environment
+
 The `create` command is used to create a new environment.  It requires
 at a minimum a name for the environment, and at least one package to
 install.  For example, suppose we wish to create a new environment, and
-need version 1.8 of NumPy.
+need version 1.17 of NumPy.
 
 {{% panel theme="info" header="Create a new environment by providing a name and package specification" %}}
 {{< highlight bash >}}
-conda create -n mynumpy numpy=1.8 
+conda create -n mynumpy numpy=1.17
 {{< /highlight >}}
 {{% /panel %}}
 
 This will create a new environment called 'mynumpy' and installed NumPy
-version 1.8, along with any required dependencies.  
+version 1.17, along with any required dependencies.  
 
 To use the environment, we must first *activate* it.
 
 {{% panel theme="info" header="Activate environment" %}}
 {{< highlight bash >}}
-source activate mynumpy
+conda activate mynumpy
 {{< /highlight >}}
 {{% /panel %}}
 
-Our new environment is now active, and we can use it.  The shell prompt
-will change to indicate this as well (this can be disable if desired).
+Our new environment is now active, and we can use it.  The shell prompt will change to indicate this as well.
 
-### Adding Packages to an Existing Environment
+### Adding and Removing Packages from an Existing Environment
 
 To install additional packages in an environment, use the `install`
 subcommand.  Suppose we want to install iPython in our 'mynumpy'
@@ -156,7 +160,7 @@ To exit an environment, we *deactivate* it.
 
 {{% panel theme="info" header="Exit current environment" %}}
 {{< highlight bash >}}
-source deactivate
+conda deactivate
 {{< /highlight >}}
 {{% /panel %}}
 
@@ -169,6 +173,49 @@ conda remove -n mynumpy --all
 {{< /highlight >}}
 {{% /panel %}}
 
+### Creating Custom GPU Anaconda Environment
+
+We provide GPU versions of various frameworks such as `tensorflow`, `keras`, `theano`, via [modules](../../modules). 
+However, sometimes you may need additional libraries or packages that are not available as part of these modules. 
+In this case, you will need to create your own GPU Anaconda environment.
+
+To do this, you need to first clone one of our GPU modules to a new Anaconda environment, and then install the desired packages in this new environment.
+
+The reason for this is that the GPU modules we support are built using the specific CUDA drivers our GPU nodes have. 
+If you just create custom GPU environment without cloning the module, your code will not utilize the GPUs correctly.
+
+
+For example, if you want to use `tensorflow` with additional packages, first do:
+{{% panel theme="info" header="Cloning GPU module to a new Anaconda environment" %}}
+{{< highlight bash >}}
+module load tensorflow-gpu/py36/1.14
+module load anaconda
+conda create -n tensorflow-gpu-1.14-custom --clone $CONDA_DEFAULT_ENV
+module purge
+{{< /highlight >}}
+{{% /panel %}}
+
+This will create a new `tensorflow-gpu-1.14-custom` environment in your home directory that is a copy of the `tensorflow-gpu` module. 
+Then, you can install the additional packages you need in this environment.
+{{% panel theme="info" header="Install new packages in the currently active environment" %}}
+{{< highlight bash >}}
+module load anaconda
+conda activate tensorflow-gpu-1.14-custom
+conda install <packages>
+{{< /highlight >}}
+{{% /panel %}}
+
+Next, whenever you want to use this custom GPU Anaconda environment, you need to add these two lines in your submit script:
+{{< highlight bash >}}
+module load anaconda
+conda activate tensorflow-gpu-1.14-custom
+{{< /highlight >}}
+
+{{% notice info %}}
+If you have custom GPU Anaconda environment please only use the two lines from above and **DO NOT** load the module you have cloned earlier. 
+Using `module load tensorflow-gpu/py36/1.14` and `conda activate tensorflow-gpu-1.14-custom` in the same script is **wrong** and may give you various errors and incorrect results.
+{{% /notice %}}
+
 ### Using an Anaconda Environment in a Jupyter Notebook on Crane
 
 It is not difficult to make an Anaconda environment available to a
@@ -185,7 +232,7 @@ Jupyter Notebook. To do so, follow the steps below, replacing
           
 2.  Using the command-line environment, load the target conda
     environment:
-    {{< highlight bash >}}source activate myenv{{< /highlight >}}
+    {{< highlight bash >}}conda activate myenv{{< /highlight >}}
 
 3.  Install the Jupyter kernel and add the environment:
 
@@ -216,7 +263,7 @@ Jupyter Notebook. To do so, follow the steps below, replacing
         {{< /highlight >}}
 
 4.  Once you have the environment set up, deactivate it:
-    {{< highlight bash >}}source deactivate{{< /highlight >}}
+    {{< highlight bash >}}conda deactivate{{< /highlight >}}
 
 5.  To make your conda environments accessible from the worker nodes,
     enter the following commands:
-- 
GitLab