recommenders/SETUP.md

192 строки
8.0 KiB
Markdown
Исходник Обычный вид История

2018-11-13 20:28:31 +03:00
# Setup guide
2018-10-18 17:55:45 +03:00
2019-01-23 09:27:44 +03:00
In this guide we show how to setup all the dependencies to run the notebooks of this repo on a local Linux system or Linux [Azure DSVM](https://azure.microsoft.com/en-us/services/virtual-machines/data-science-virtual-machines/) and on [Azure Databricks](https://azure.microsoft.com/en-us/services/databricks/).
2018-12-11 07:50:19 +03:00
## Table of Contents
2018-11-15 20:26:26 +03:00
2018-11-15 20:22:28 +03:00
* [Compute environments](#compute-environments)
2018-12-03 12:20:01 +03:00
* [Setup guide for Local or DSVM](#setup-guide-for-local-or-dsvm)
* [Setup Requirements](#setup-requirements)
* [Dependencies setup](#dependencies-setup)
2018-12-06 21:35:27 +03:00
* [Register the conda environment in Jupyter notebook](#register-the-conda-environment-in-jupyter-notebook)
2018-11-13 20:28:31 +03:00
* [Troubleshooting for the DSVM](#troubleshooting-for-the-dsvm)
* [Setup guide for Azure Databricks](#setup-guide-for-azure-databricks)
* [Requirements of Azure Databricks](#requirements-of-azure-databricks)
* [Repository installation](#repository-installation)
2018-11-13 20:28:31 +03:00
* [Troubleshooting for Azure Databricks](#troubleshooting-for-azure-databricks)
2018-11-15 20:22:28 +03:00
## Compute environments
We have different compute environments, depending on the kind of machine
2019-01-23 09:27:44 +03:00
Environments supported to run the notebooks on the Linux DSVM:
2018-11-15 20:22:28 +03:00
* Python CPU
2019-01-09 13:35:02 +03:00
* Python GPU
2018-11-15 20:22:28 +03:00
* PySpark
Environments supported to run the notebooks on Azure Databricks:
* PySpark
2018-12-03 12:20:01 +03:00
## Setup guide for Local or DSVM
2018-11-13 20:28:31 +03:00
2018-12-03 12:20:01 +03:00
### Setup Requirements
2018-10-18 17:55:45 +03:00
- Anaconda with Python version >= 3.6. [Miniconda](https://conda.io/miniconda.html) is the fastest way to get started.
2018-11-01 10:43:26 +03:00
- The Python library dependencies can be found in this [script](scripts/generate_conda_file.sh).
- Machine with Spark (optional for Python environment but mandatory for PySpark environment).
2018-10-18 17:55:45 +03:00
2018-12-03 12:20:01 +03:00
### Dependencies setup
2018-10-18 17:55:45 +03:00
2018-11-13 20:37:10 +03:00
We install the dependencies with Conda. As a pre-requisite, we may want to make sure that Conda is up-to-date:
2018-10-18 17:55:45 +03:00
conda update anaconda
2018-10-18 17:55:45 +03:00
We provided a script to [generate a conda file](scripts/generate_conda_file.sh), depending of the environment we want to use. This will create the environment using the Python version 3.6 with all the correct dependencies.
2018-10-18 17:55:45 +03:00
2018-12-11 07:50:19 +03:00
To install each environment, first we need to generate a conda yaml file and then install the environment. We can specify the environment name with the input `-n`.
Click on the following menus to see more details:
2018-10-18 17:55:45 +03:00
<details>
<summary><strong><em>Python CPU environment</em></strong></summary>
2018-10-18 17:55:45 +03:00
2018-11-01 10:43:26 +03:00
Assuming the repo is cloned as `Recommenders` in the local system, to install the Python CPU environment:
2018-10-18 17:55:45 +03:00
2018-10-18 19:16:21 +03:00
cd Recommenders
2018-10-18 17:55:45 +03:00
./scripts/generate_conda_file.sh
conda env create -n reco_bare -f conda_bare.yaml
</details>
2019-01-09 13:35:02 +03:00
<details>
<summary><strong><em>Python GPU environment</em></strong></summary>
Assuming that you have a GPU machine, to install the Python GPU environment, which by default installs the CPU environment:
cd Recommenders
./scripts/generate_conda_file.sh --gpu
conda env create -n reco_gpu -f conda_gpu.yaml
</details>
<details>
<summary><strong><em>PySpark environment</em></strong></summary>
2018-10-18 17:55:45 +03:00
To install the PySpark environment, which by default installs the CPU environment:
2018-10-18 19:16:21 +03:00
cd Recommenders
2018-10-18 17:55:45 +03:00
./scripts/generate_conda_file.sh --pyspark
2018-10-30 12:31:51 +03:00
conda env create -n reco_pyspark -f conda_pyspark.yaml
2018-10-18 17:55:45 +03:00
**NOTE** - for this environment, we need to set the environment variables `PYSPARK_PYTHON` and `PYSPARK_DRIVER_PYTHON` to point to the conda python executable.
To set these variables every time the environment is activated, we can follow the steps of this [guide](https://conda.io/docs/user-guide/tasks/manage-environments.html#macos-and-linux). Assuming that we have installed the environment in `/anaconda/envs/reco_pyspark`, we create the file `/anaconda/envs/reco_pyspark/etc/conda/activate.d/env_vars.sh` and add:
```bash
#!/bin/sh
export PYSPARK_PYTHON=/anaconda/envs/reco_pyspark/bin/python
export PYSPARK_DRIVER_PYTHON=/anaconda/envs/reco_pyspark/bin/python
```
This will export the variables every time we do `conda activate reco_pyspark`. To unset these variables when we deactivate the environment, we create the file `/anaconda/envs/reco_pyspark/etc/conda/deactivate.d/env_vars.sh` and add:
```bash
#!/bin/sh
unset PYSPARK_PYTHON
unset PYSPARK_DRIVER_PYTHON
```
</details>
2018-10-18 17:55:45 +03:00
2019-01-09 13:35:02 +03:00
<details>
<summary><strong><em>All environments</em></strong></summary>
To install all three environments:
cd Recommenders
./scripts/generate_conda_file.sh --gpu --pyspark
conda env create -n reco_full -f conda_full.yaml
</details>
### Register the conda environment in Jupyter notebook
We can register our created conda environment to appear as a kernel in the Jupyter notebooks.
conda activate my_env_name
python -m ipykernel install --user --name my_env_name --display-name "Python (my_env_name)"
2018-11-08 13:01:16 +03:00
2018-11-13 20:28:31 +03:00
### Troubleshooting for the DSVM
* We found that there could be problems if the Spark version of the machine is not the same as the one in the conda file. You will have to adapt the conda file to your machine.
* When running Spark on a single local node it is possible to run out of disk space as temporary files are written to the user's home directory. To avoid this we attached an additional disk to the DSVM and made modifications to the Spark configuration. This is done by including the following lines in the file at `/dsvm/tools/spark/current/conf/spark-env.sh`.
```
2018-12-11 07:50:19 +03:00
SPARK_LOCAL_DIRS="/mnt"
2018-12-12 04:40:57 +03:00
SPARK_WORKER_DIR="/mnt"
2018-12-11 07:50:19 +03:00
SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true, -Dspark.worker.cleanup.appDataTtl=3600, -Dspark.worker.cleanup.interval=300, -Dspark.storage.cleanupFilesAfterExecutorExit=true"
```
2018-11-13 20:28:31 +03:00
## Setup guide for Azure Databricks
### Requirements of Azure Databricks
* Runtime version 4.1 (Apache Spark 2.3.0, Scala 2.11)
2018-11-13 20:28:31 +03:00
* Python 3
### Repository installation
You can setup the repository as a library on Databricks either manually or by simply running an installation script.
<details>
<summary><strong><em>Quick install</em></strong></summary>
Prerequisite
* Install [Azure Databricks CLI (command-line interface)](https://docs.azuredatabricks.net/user-guide/dev-tools/databricks-cli.html#install-the-cli)
and setup CLI [authentication](https://docs.azuredatabricks.net/user-guide/dev-tools/databricks-cli.html#set-up-authentication).
1. Start a target cluster and copy the target cluster id. Cluster id can be found with following script:
```
databricks clusters list
<CLUSTER_ID> <CLUSTER_NAME> <STATUS>
...
```
2019-01-29 03:51:52 +03:00
2. If the cluster status is not *RUNNING*, start it with the command `databricks clusters start --cluster-id <CLUSTER_ID>`.
If the cluster is already running, skip this step.
3. Once the cluster status turns into *RUNNING*, use following commands to install the repository:
```
cd Recommenders
2019-01-29 03:51:52 +03:00
./scripts/databricks_install.sh <CLUSTER_ID>
```
</details>
<details>
<summary><strong><em>Manual setup</em></strong></summary>
To install the repo manually onto Databricks, follow the steps:
1. Clone Microsoft Recommenders repo in your local computer.
2. Zip the contents inside the Recommenders folder (Azure Databricks requires compressed folders to have the .egg suffix, so we don't use the standard .zip):
```
cd Recommenders
zip -r Recommenders.egg .
```
3. Once your cluster has started, go to the Databricks home workspace, then go to your user and press import.
4. In the next menu there is an option to import a library, it says: `To import a library, such as a jar or egg, click here`. Press click here.
5. Then, at the first drop-down menu, mark the option `Upload Python egg or PyPI`.
6. Then press on `Drop library egg here to upload` and select the the file `Recommenders.egg` you just created.
7. Then press `Create library`. This will upload the zip and make it available in your workspace.
8. Finally, in the next menu, attach the library to your cluster.
</details>
To make sure it works, you can now create a new notebook and import the utilities from Databricks:
2018-11-13 20:28:31 +03:00
```
import reco_utils
...
2018-11-13 20:28:31 +03:00
```
### Troubleshooting for Azure Databricks
* For the [reco_utils](reco_utils) import to work on Databricks, it is important to zip the content correctly. The zip has to be performed inside the Recommenders folder, if you zip directly above the Recommenders folder, it won't work.
2018-11-13 20:28:31 +03:00