ENH: Add Environment Locking (#735)
* ✨ Add environment locking script * 📝 ✨ Finish script, add documentation * 🐛 Change Windows env file in workflow * 📝 🐛 Add review changes + fixes * 🚧 Temporarily alter tests and conda channels * 🚧 Add logging * ✅ Fix TestSubmodule env file * 🔥 Delete env test * 🧑💻 Add warning to environment.yml * 📝 ⚰️ Update based on review comments * 📝 Add final changes
This commit is contained in:
Родитель
c7e4a3e945
Коммит
92d94799f2
|
@ -67,7 +67,7 @@ jobs:
|
|||
with:
|
||||
activate-environment: InnerEye
|
||||
auto-activate-base: false
|
||||
environment-file: environment.yml
|
||||
environment-file: environment_win.yml
|
||||
python-version: 3.7
|
||||
if: always()
|
||||
|
||||
|
|
|
@ -234,6 +234,7 @@ def get_all_environment_files(project_root: Path) -> List[Path]:
|
|||
files = [innereye_yaml]
|
||||
if innereye_yaml != project_yaml:
|
||||
files.append(project_yaml)
|
||||
|
||||
return files
|
||||
|
||||
|
||||
|
|
|
@ -306,6 +306,7 @@ class Runner:
|
|||
# be necessary if the innereye package is installed. It is necessary when working with an outer project
|
||||
# and InnerEye as a git submodule and submitting jobs from the local machine.
|
||||
# In case of version conflicts, the package version in the outer project is given priority.
|
||||
logging.info(f"Attempting to merge the following conda files: {source_config.conda_dependencies_files}")
|
||||
merge_conda_files(source_config.conda_dependencies_files, temp_conda)
|
||||
|
||||
# Calls like `self.azure_config.get_workspace()` will fail if we have no AzureML credentials set up, and so
|
||||
|
|
|
@ -1,7 +1,311 @@
|
|||
name: TestSubmodule
|
||||
# WARNING - DO NOT EDIT THIS FILE MANUALLY
|
||||
# Please refer to the environment documentation for instructions on how to create a new version of this file: https://github.com/microsoft/InnerEye-DeepLearning/blob/main/docs/environment.md
|
||||
name: InnerEye
|
||||
channels:
|
||||
- defaults
|
||||
- pytorch
|
||||
- defaults
|
||||
dependencies:
|
||||
- pip=20.1.1
|
||||
- _libgcc_mutex=0.1=main
|
||||
- _openmp_mutex=5.1=1_gnu
|
||||
- blas=1.0=mkl
|
||||
- blosc=1.21.0=h4ff587b_1
|
||||
- bzip2=1.0.8=h7b6447c_0
|
||||
- ca-certificates=2022.4.26=h06a4308_0
|
||||
- certifi=2022.5.18.1=py37h06a4308_0
|
||||
- cudatoolkit=11.3.1=h2bc3f7f_2
|
||||
- ffmpeg=4.2.2=h20bf706_0
|
||||
- freetype=2.11.0=h70c0345_0
|
||||
- giflib=5.2.1=h7b6447c_0
|
||||
- gmp=6.2.1=h2531618_2
|
||||
- gnutls=3.6.15=he1e5248_0
|
||||
- intel-openmp=2021.4.0=h06a4308_3561
|
||||
- jpeg=9e=h7f8727e_0
|
||||
- lame=3.100=h7b6447c_0
|
||||
- lcms2=2.12=h3be6417_0
|
||||
- libedit=3.1.20210910=h7f8727e_0
|
||||
- libffi=3.2.1=hf484d3e_1007
|
||||
- libgcc-ng=11.2.0=h1234567_0
|
||||
- libgomp=11.2.0=h1234567_0
|
||||
- libidn2=2.3.2=h7f8727e_0
|
||||
- libopus=1.3.1=h7b6447c_0
|
||||
- libpng=1.6.37=hbc83047_0
|
||||
- libstdcxx-ng=11.2.0=h1234567_0
|
||||
- libtasn1=4.16.0=h27cfd23_0
|
||||
- libtiff=4.2.0=h2818925_1
|
||||
- libunistring=0.9.10=h27cfd23_0
|
||||
- libuv=1.40.0=h7b6447c_0
|
||||
- libvpx=1.7.0=h439df22_0
|
||||
- libwebp=1.2.2=h55f646e_0
|
||||
- libwebp-base=1.2.2=h7f8727e_0
|
||||
- lz4-c=1.9.3=h295c915_1
|
||||
- mkl=2021.4.0=h06a4308_640
|
||||
- mkl-service=2.4.0=py37h7f8727e_0
|
||||
- mkl_fft=1.3.1=py37hd3c417c_0
|
||||
- mkl_random=1.2.2=py37h51133e4_0
|
||||
- ncurses=6.3=h7f8727e_2
|
||||
- nettle=3.7.3=hbbd107a_1
|
||||
- openh264=2.1.1=h4ff587b_0
|
||||
- openssl=1.1.1o=h7f8727e_0
|
||||
- pip=20.1.1=py37_1
|
||||
- python=3.7.3
|
||||
- python-blosc=1.7.0=py37h7b6447c_0
|
||||
- pytorch=1.10.0=py3.7_cuda11.3_cudnn8.2.0_0
|
||||
- pytorch-mutex=1.0=cuda
|
||||
- readline=7.0=h7b6447c_5
|
||||
- setuptools=61.2.0=py37h06a4308_0
|
||||
- sqlite=3.33.0=h62c20be_0
|
||||
- tk=8.6.11=h1ccaba5_1
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- typing_extensions=4.1.1=pyh06a4308_0
|
||||
- wheel=0.37.1=pyhd3eb1b0_0
|
||||
- x264=1!157.20191217=h7b6447c_0
|
||||
- xz=5.2.5=h7f8727e_1
|
||||
- zlib=1.2.12=h7f8727e_2
|
||||
- zstd=1.5.2=ha4553b6_0
|
||||
- pip:
|
||||
- absl-py==1.0.0
|
||||
- adal==1.2.7
|
||||
- aiohttp==3.8.1
|
||||
- aiosignal==1.2.0
|
||||
- alembic==1.7.7
|
||||
- ansiwrap==0.8.4
|
||||
- applicationinsights==0.11.10
|
||||
- argon2-cffi==21.3.0
|
||||
- argon2-cffi-bindings==21.2.0
|
||||
- async-timeout==4.0.2
|
||||
- asynctest==0.13.0
|
||||
- attrs==21.4.0
|
||||
- azure-common==1.1.28
|
||||
- azure-core==1.24.0
|
||||
- azure-graphrbac==0.61.1
|
||||
- azure-identity==1.7.0
|
||||
- azure-mgmt-authorization==0.61.0
|
||||
- azure-mgmt-containerregistry==10.0.0
|
||||
- azure-mgmt-core==1.3.0
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-mgmt-keyvault==9.3.0
|
||||
- azure-mgmt-resource==12.1.0
|
||||
- azure-mgmt-storage==11.2.0
|
||||
- azure-storage-blob==12.6.0
|
||||
- azureml-automl-core==1.36.1
|
||||
- azureml-core==1.36.0.post2
|
||||
- azureml-dataprep==2.24.4
|
||||
- azureml-dataprep-native==38.0.0
|
||||
- azureml-dataprep-rslex==2.0.3
|
||||
- azureml-dataset-runtime==1.36.0
|
||||
- azureml-mlflow==1.36.0
|
||||
- azureml-pipeline==1.36.0
|
||||
- azureml-pipeline-core==1.36.0
|
||||
- azureml-pipeline-steps==1.36.0
|
||||
- azureml-sdk==1.36.0
|
||||
- azureml-telemetry==1.36.0
|
||||
- azureml-tensorboard==1.36.0
|
||||
- azureml-train-automl-client==1.36.0
|
||||
- azureml-train-core==1.36.0
|
||||
- azureml-train-restclients-hyperdrive==1.36.0
|
||||
- backcall==0.2.0
|
||||
- backports-tempfile==1.0
|
||||
- backports-weakref==1.0.post1
|
||||
- beautifulsoup4==4.11.1
|
||||
- black==22.3.0
|
||||
- bleach==5.0.0
|
||||
- cachetools==4.2.4
|
||||
- cffi==1.15.0
|
||||
- charset-normalizer==2.0.12
|
||||
- click==8.1.3
|
||||
- cloudpickle==1.6.0
|
||||
- colorama==0.4.4
|
||||
- commonmark==0.9.1
|
||||
- conda-merge==0.1.5
|
||||
- contextlib2==21.6.0
|
||||
- coverage==6.4
|
||||
- cryptography==3.3.2
|
||||
- cucim==21.10.1
|
||||
- cycler==0.11.0
|
||||
- databricks-cli==0.16.6
|
||||
- dataclasses-json==0.5.2
|
||||
- debugpy==1.6.0
|
||||
- decorator==5.1.1
|
||||
- defusedxml==0.7.1
|
||||
- deprecated==1.2.13
|
||||
- distro==1.7.0
|
||||
- docker==4.3.1
|
||||
- dotnetcore2==2.1.23
|
||||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
- fsspec==2022.5.0
|
||||
- fusepy==3.0.1
|
||||
- future==0.18.2
|
||||
- gitdb==4.0.9
|
||||
- gitpython==3.1.7
|
||||
- google-auth==1.35.0
|
||||
- google-auth-oauthlib==0.4.6
|
||||
- gputil==1.4.0
|
||||
- greenlet==1.1.2
|
||||
- grpcio==1.46.3
|
||||
- gunicorn==20.1.0
|
||||
- h5py==2.10.0
|
||||
- humanize==4.1.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
- importlib-metadata==4.11.4
|
||||
- importlib-resources==5.7.1
|
||||
- iniconfig==1.1.1
|
||||
- innereye-dicom-rt==1.0.3
|
||||
- ipykernel==6.13.0
|
||||
- ipython==7.31.1
|
||||
- ipython-genutils==0.2.0
|
||||
- ipywidgets==7.7.0
|
||||
- isodate==0.6.1
|
||||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
- jsonschema==4.5.1
|
||||
- jupyter==1.0.0
|
||||
- jupyter-client==6.1.5
|
||||
- jupyter-console==6.4.3
|
||||
- jupyter-core==4.10.0
|
||||
- jupyterlab-pygments==0.2.2
|
||||
- jupyterlab-widgets==1.1.0
|
||||
- kiwisolver==1.4.2
|
||||
- lightning-bolts==0.4.0
|
||||
- llvmlite==0.34.0
|
||||
- mako==1.2.0
|
||||
- markdown==3.3.7
|
||||
- markupsafe==2.1.1
|
||||
- marshmallow==3.16.0
|
||||
- marshmallow-enum==1.5.1
|
||||
- matplotlib==3.3.0
|
||||
- matplotlib-inline==0.1.3
|
||||
- mccabe==0.6.1
|
||||
- mistune==0.8.4
|
||||
- mlflow==1.23.1
|
||||
- mlflow-skinny==1.26.1
|
||||
- monai==0.6.0
|
||||
- more-itertools==8.13.0
|
||||
- msal==1.17.0
|
||||
- msal-extensions==0.3.1
|
||||
- msrest==0.6.21
|
||||
- msrestazure==0.6.4
|
||||
- multidict==6.0.2
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- nbclient==0.6.3
|
||||
- nbconvert==6.5.0
|
||||
- nbformat==5.4.0
|
||||
- ndg-httpsclient==0.5.1
|
||||
- nest-asyncio==1.5.5
|
||||
- networkx==2.6.3
|
||||
- nibabel==3.2.2
|
||||
- notebook==6.4.11
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- oauthlib==3.2.0
|
||||
- opencv-python-headless==4.5.1.48
|
||||
- packaging==21.3
|
||||
- pandas==1.1.0
|
||||
- pandocfilters==1.5.0
|
||||
- papermill==2.2.2
|
||||
- param==1.9.3
|
||||
- parso==0.8.3
|
||||
- pathspec==0.9.0
|
||||
- pexpect==4.8.0
|
||||
- pickleshare==0.7.5
|
||||
- pillow==9.0.0
|
||||
- platformdirs==2.5.2
|
||||
- pluggy==0.13.1
|
||||
- portalocker==2.4.0
|
||||
- prometheus-client==0.14.1
|
||||
- prometheus-flask-exporter==0.20.1
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
- ptyprocess==0.7.0
|
||||
- py==1.11.0
|
||||
- pyarrow==3.0.0
|
||||
- pyasn1==0.4.8
|
||||
- pyasn1-modules==0.2.8
|
||||
- pycodestyle==2.6.0
|
||||
- pycparser==2.21
|
||||
- pydeprecate==0.3.1
|
||||
- pydicom==2.0.0
|
||||
- pyflakes==2.2.0
|
||||
- pygments==2.12.0
|
||||
- pyjwt==1.7.1
|
||||
- pynndescent==0.5.7
|
||||
- pyopenssl==20.0.1
|
||||
- pyparsing==3.0.9
|
||||
- pyrsistent==0.18.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
- pytest-xdist==1.34.0
|
||||
- python-dateutil==2.8.2
|
||||
- pytorch-lightning==1.5.5
|
||||
- pytz==2022.1
|
||||
- pywavelets==1.3.0
|
||||
- pyyaml==6.0
|
||||
- pyzmq==23.0.0
|
||||
- qtconsole==5.3.0
|
||||
- qtpy==2.1.0
|
||||
- querystring-parser==1.2.4
|
||||
- requests==2.27.1
|
||||
- requests-oauthlib==1.3.1
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
- rsa==4.8
|
||||
- ruamel-yaml==0.16.12
|
||||
- ruamel-yaml-clib==0.2.6
|
||||
- runstats==1.8.0
|
||||
- scikit-image==0.17.2
|
||||
- scikit-learn==0.23.2
|
||||
- scipy==1.5.2
|
||||
- seaborn==0.10.1
|
||||
- secretstorage==3.3.2
|
||||
- send2trash==1.8.0
|
||||
- simpleitk==1.2.4
|
||||
- six==1.15.0
|
||||
- smmap==5.0.0
|
||||
- soupsieve==2.3.2.post1
|
||||
- sqlalchemy==1.4.36
|
||||
- sqlparse==0.4.2
|
||||
- stopit==1.1.2
|
||||
- stringcase==1.2.0
|
||||
- tabulate==0.8.7
|
||||
- tenacity==8.0.1
|
||||
- tensorboard==2.3.0
|
||||
- tensorboard-plugin-wit==1.8.1
|
||||
- tensorboardx==2.1
|
||||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
- torchio==0.18.74
|
||||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.2.1.post0
|
||||
- typed-ast==1.4.3
|
||||
- typing-inspect==0.7.1
|
||||
- umap-learn==0.5.2
|
||||
- urllib3==1.26.7
|
||||
- wcwidth==0.2.5
|
||||
- webencodings==0.5.1
|
||||
- websocket-client==1.3.2
|
||||
- werkzeug==2.1.2
|
||||
- widgetsnbextension==3.6.0
|
||||
- wrapt==1.14.1
|
||||
- yacs==0.1.8
|
||||
- yarl==1.7.2
|
||||
- zipp==3.8.0
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
# ------------------------------------------------------------------------------------------
|
||||
# Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
# Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
|
||||
# ------------------------------------------------------------------------------------------
|
||||
from pathlib import Path
|
||||
|
||||
from InnerEye.Common import fixed_paths, fixed_paths_for_tests
|
||||
|
||||
|
||||
def test_invalid_python_packages() -> None:
|
||||
"""
|
||||
Test if the Python environments that we use do not contain packages that might cause trouble with
|
||||
SSL connections.
|
||||
"""
|
||||
packages_to_avoid = [
|
||||
"ca-certificates",
|
||||
"openssl",
|
||||
"ndg-httpsclient",
|
||||
"pyopenssl",
|
||||
"urllib3"
|
||||
# Windows-specific packages
|
||||
"certifi"
|
||||
"icc_rt"
|
||||
"vc"
|
||||
"vs2015_runtime"
|
||||
"wincertstore"
|
||||
"pypiwin32"
|
||||
"pywin32"
|
||||
"pywinpty"
|
||||
]
|
||||
|
||||
def check_file(file: Path) -> None:
|
||||
with file.open("r") as f:
|
||||
for line in f:
|
||||
for package in packages_to_avoid:
|
||||
assert package not in line, "Package {package} should be avoided, but found in: {line}"
|
||||
|
||||
print("Full set of packages that will cause problems:")
|
||||
for package in packages_to_avoid:
|
||||
print("- {}".format(package))
|
||||
check_file(fixed_paths_for_tests.tests_root_directory().parent / fixed_paths.ENVIRONMENT_YAML_FILE_NAME)
|
|
@ -0,0 +1,40 @@
|
|||
#!/bin/bash
|
||||
|
||||
os_name=$(uname)
|
||||
if [[ ! $os_name == *"Linux"* ]]; then
|
||||
echo "ERROR: cannot run AML environment locking in non-linux environment. Windows users can do this using WSL - https://docs.microsoft.com/en-us/windows/wsl/install"
|
||||
exit 1
|
||||
else
|
||||
echo "Starting AML environment locking..."
|
||||
fi
|
||||
|
||||
# get environment name from primary dependencies YAML file
|
||||
name_line="$(cat primary_deps.yml | grep 'name:')"
|
||||
IFS=':' read -ra name_arr <<< "$name_line"
|
||||
env_name="${name_arr[1]}"
|
||||
|
||||
# clear old conda envs, create new one
|
||||
export CONDA_ALWAYS_YES="true"
|
||||
conda env remove --name ${env_name::-1}
|
||||
conda env create --file primary_deps.yml
|
||||
|
||||
# export new environment to environment.yml
|
||||
conda env export -n ${env_name::-1} | grep -v "prefix:" > environment.yml
|
||||
unset CONDA_ALWAYS_YES
|
||||
|
||||
# remove python version hash (technically not locked, so still potential for problems here if python secondary deps change)
|
||||
while IFS='' read -r line; do
|
||||
if [[ $line == *"- python="* ]]; then
|
||||
|
||||
IFS='=' read -ra python_arr <<< "$line"
|
||||
unset python_arr[-1]
|
||||
echo "${python_arr[0]}"="${python_arr[1]}"
|
||||
elif [[ ! $line == "#"* ]]; then
|
||||
echo "${line}"
|
||||
fi
|
||||
done < environment.yml > environment.yml.tmp
|
||||
echo "# WARNING - DO NOT EDIT THIS FILE MANUALLY" > environment.yml
|
||||
echo "# Please refer to the environment documentation for instructions on how to create a new version of this file: https://github.com/microsoft/InnerEye-DeepLearning/blob/main/docs/environment.md" >> environment.yml
|
||||
cat environment.yml.tmp >> environment.yml
|
||||
rm environment.yml.tmp
|
||||
cp environment.yml TestSubmodule/environment.yml
|
|
@ -2,29 +2,96 @@
|
|||
|
||||
## Prerequisites
|
||||
|
||||
In order to work with the solution, your OS environment will need [git](https://git-scm.com/) and [git lfs](https://git-lfs.github.com/) installed. Depending on the OS that you are running the installation instructions may vary. Please refer to respective documentation sections on the tools' websites for detailed instructions.
|
||||
In order to work with the solution, your operating system environment will need [git](https://git-scm.com/) and [git lfs](https://git-lfs.github.com/) installed. Depending on the operating system that you are running the installation instructions may vary. Please refer to respective documentation sections on the tools' websites for detailed instructions.
|
||||
|
||||
We recommend using PyCharm or VSCode as the Python editor.
|
||||
|
||||
You have two options for working with our codebase:
|
||||
|
||||
* You can fork the InnerEye-DeepLearning repository, and work off that. We recommend that because it is easiest to set up.
|
||||
* Or you can create your project that uses the InnerEye-DeepLearning code, and include InnerEye-DeepLearning as a git
|
||||
submodule. We only recommended that if you are very handy with Python. More details about this option
|
||||
[are here](innereye_as_submodule.md).
|
||||
|
||||
## Windows Subsystem for Linux Setup
|
||||
### Set Up Windows Subsystem for Linux
|
||||
|
||||
When developing on a Windows machine, we recommend using [the Windows Subsystem for Linux, WSL2](https://docs.microsoft.com/en-us/windows/wsl/about).
|
||||
That's because PyTorch has better support for Linux. If you want to use WSL2, please follow
|
||||
[these instructions](/docs/WSL.md) , that correspond to the manual installation in the official docs.
|
||||
|
||||
## Installing Conda or Miniconda
|
||||
### Install Conda or Miniconda
|
||||
|
||||
You can skip this step if you have installed WSL as per the previous item.
|
||||
|
||||
Download a Conda or Miniconda [installer for your platform](https://docs.conda.io/en/latest/miniconda.html)
|
||||
and run it.
|
||||
|
||||
## Creating a Conda environment
|
||||
Note that in order to create the Conda environment you will need to have build tools installed on your machine. If you are running Windows, they should be already installed with Conda distribution.
|
||||
## Create a Conda Environment
|
||||
|
||||
There are three important configuration files in this repo for creating conda environments:
|
||||
|
||||
* **`primary_deps.yml`** - This file contains the list of primary package dependencies, and can be used to create an environment on any OS.
|
||||
* **`environment.yml`** - **DO NOT EDIT THIS FILE MANUALLY**. This file contains a locked list of primary and secondary dependencies that is used to create the environments for your AzureML jobs and local Linux deployments. As such it contains Linux-specific platform dependencies (see [Set Up WSL](#set-up-windows-subsystem-for-linux)) and cannot be used to create a windows environment.
|
||||
* **`environment_win.yml`** - This file contains a Windows-dependent list of primary and secondary dependencies. This is the file used to create a locked python environment on windows machines.
|
||||
|
||||
### Create environment from lockfile
|
||||
|
||||
To create an environment from one of the lockfiles, run the following command, selecting the one appropriate to your operating system:
|
||||
|
||||
* Linux/WSL Users:
|
||||
|
||||
```shell
|
||||
conda env create --file environment.yml
|
||||
conda activate InnerEye
|
||||
```
|
||||
|
||||
* Windows Users:
|
||||
|
||||
```shell
|
||||
conda env create --file environment_win.yml
|
||||
conda activate InnerEye
|
||||
|
||||
```
|
||||
|
||||
### Upgrade primary dependency / create new `environment.yml`
|
||||
|
||||
#### Linux/WSL/AzureML Users
|
||||
|
||||
1. Make your desired changes in `primary_deps.yml`. Make sure your package name and version are correct.
|
||||
2. To create a new environment and a valid `environment.yml`, run the following command:
|
||||
|
||||
```shell
|
||||
bash -i create_and_lock_environment.sh
|
||||
```
|
||||
|
||||
3. Voila! You will now have a new conda environment with your desired primary package versions, as well as a new `environment.yml` which can be ingested by AzureML to create a copy of your local environment.
|
||||
|
||||
#### Windows Users
|
||||
|
||||
If you are using the InnerEye toolbox in a native Windows environment (but not in WSL), you need to follow the steps below. To edit package versions to be used in AML (i.e. to generate a new lockfile `environment.yml`) you will need to follow the steps on creating an conda env in Linux (previous section) using either a Linux operating system or [WSL](#set-up-windows-subsystem-for-linux).
|
||||
|
||||
1. Make your desired changes in `primary_deps.yml`. Make sure your package name and version are correct.
|
||||
2. If you have already created the environment previously, run:
|
||||
|
||||
```shell
|
||||
conda env update --file primary_deps.yml --prune
|
||||
```
|
||||
|
||||
3. Otherwise, run:
|
||||
|
||||
```shell
|
||||
conda env create --file primary_deps.yml
|
||||
```
|
||||
|
||||
4. (Optional) Create a new lockfile by activating your new environment and running
|
||||
|
||||
```shell
|
||||
conda env export > environment_win.yml
|
||||
```
|
||||
|
||||
### Set Up
|
||||
|
||||
In order to create the Conda environment you will need to have build tools installed on your machine. If you are running Windows, they should be already installed with your Conda distribution.
|
||||
|
||||
You can install build tools on Ubuntu (and Debian-based distributions) by running
|
||||
`sudo apt-get install build-essential`
|
||||
|
@ -41,7 +108,8 @@ It is possible to run the training process on a local machine. It will not be as
|
|||
The SDK uses PyTorch to compose and run DNN computations. PyTorch can leverage the underlying GPU via NVidia CUDA technology, which accelerates computations dramatically.
|
||||
|
||||
In order to enable PyTorch to use CUDA, you need to make sure that you have
|
||||
1. Compatible graphics card with CUDA compute capability of at least 3.0 (at the moment of writing). You can check compatibility list here: https://developer.nvidia.com/cuda-gpus
|
||||
|
||||
1. Compatible graphics card with CUDA compute capability of at least 3.0 (at the moment of writing). You can check the compatibility list [on the NVIDA Developer site](https://developer.nvidia.com/cuda-gpus)
|
||||
1. Recent NVidia drivers installed
|
||||
|
||||
A quick way to check if PyTorch can use the underlying GPU for computation is to run the following line from your conda environment with all InnerEye packages installed:
|
||||
|
@ -51,17 +119,20 @@ It will output `True` if CUDA computation is available and `False` if it's not.
|
|||
Some tips for installing NVidia drivers below:
|
||||
|
||||
### Windows
|
||||
You can download NVidia drivers for your graphics card from https://www.nvidia.com/download/index.aspx as a Windows *.exe* file and install them this way.
|
||||
|
||||
You can download NVidia drivers for your graphics card [the NVIDIA website](https://www.nvidia.com/download/index.aspx) as a Windows *.exe* file and install them this way.
|
||||
|
||||
### WSL
|
||||
|
||||
Microsoft provides GPU support via WSL starting WSL 2.0.
|
||||
|
||||
You can find more details on WSL in our separate [WSL section](WSL.md).
|
||||
|
||||
### Linux
|
||||
|
||||
The exact instructions for driver installation will differ depending on the Linux distribution. Generally, you should first run the `nvidia-smi` tool to see if you have NVidia drivers installed. This tool is installed together with NVidia drivers and if your system can not find it, it may mean that the drivers are not installed. A sample output of NVidia SMI tool may look like this:
|
||||
|
||||
```
|
||||
```console
|
||||
+-----------------------------------------------------------------------------+
|
||||
| NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 |
|
||||
|-------------------------------+----------------------+----------------------+
|
||||
|
@ -80,21 +151,24 @@ In this case we can see that the system has access to a Tesla K80 GPU and is run
|
|||
If the driver is not available, you can try the following to install:
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
1. Run
|
||||
`ubuntu-drivers devices`
|
||||
to see what drivers are available (you may need to install the tool via `sudo apt-get install ubuntu-drivers-common` and update the package database via `sudo apt update`). You should see an output like this:
|
||||
```
|
||||
...
|
||||
vendor : NVIDIA Corporation
|
||||
model : GK210GL [Tesla K80]
|
||||
driver : nvidia-driver-450-server - distro non-free recommended
|
||||
driver : nvidia-driver-418-server - distro non-free
|
||||
driver : nvidia-driver-440-server - distro non-free
|
||||
driver : nvidia-driver-435 - distro non-free
|
||||
driver : nvidia-driver-450 - distro non-free
|
||||
driver : nvidia-driver-390 - distro non-free
|
||||
driver : xserver-xorg-video-nouveau - distro free builtin
|
||||
```
|
||||
|
||||
```text
|
||||
...
|
||||
vendor : NVIDIA Corporation
|
||||
model : GK210GL [Tesla K80]
|
||||
driver : nvidia-driver-450-server - distro non-free recommended
|
||||
driver : nvidia-driver-418-server - distro non-free
|
||||
driver : nvidia-driver-440-server - distro non-free
|
||||
driver : nvidia-driver-435 - distro non-free
|
||||
driver : nvidia-driver-450 - distro non-free
|
||||
driver : nvidia-driver-390 - distro non-free
|
||||
driver : xserver-xorg-video-nouveau - distro free builtin
|
||||
```
|
||||
|
||||
2. Run
|
||||
`sudo apt install nvidia-driver-450-server`
|
||||
(or whichever is the recommended in your case)
|
||||
|
@ -103,8 +177,9 @@ driver : xserver-xorg-video-nouveau - distro free builtin
|
|||
At this point you should be able to run the `nvidia-smi` tool and PyTorch should be able to communicate with the GPU
|
||||
|
||||
#### CentOS/RHEL
|
||||
|
||||
1. Add NVidia repository to your config manager
|
||||
`sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo` (if you are running RHEL8, otherwise you can get the URL for your repo from here: https://developer.download.nvidia.com/compute/cuda/repos/)
|
||||
`sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo` (if you are running RHEL8, otherwise you can get the URL for your repo on the [NVIDIA dev site](https://developer.download.nvidia.com/compute/cuda/repos/))
|
||||
2. Clean repository cache via
|
||||
`sudo dnf clean all`
|
||||
3. Install drivers
|
||||
|
@ -113,32 +188,35 @@ At this point you should be able to run the `nvidia-smi` tool and PyTorch should
|
|||
|
||||
At this point you should be able to run the `nvidia-smi` tool and PyTorch should be able to communicate with the GPU
|
||||
|
||||
You can find instructions for other Linux distributions on NVidia website: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
|
||||
You can find instructions for other Linux distributions on the [NVidia website](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html)
|
||||
|
||||
## More Details for Tool Setup
|
||||
|
||||
# More Details for Tool Setup
|
||||
The following steps describe how to set up specific tools. You can execute most of those at a later
|
||||
point, if you want to dig deeper into the code.
|
||||
|
||||
## VSCode
|
||||
### VSCode
|
||||
|
||||
([VSCode](https://code.visualstudio.com/) for example)
|
||||
|
||||
## Conda
|
||||
- `conda env create -f environment.yml`
|
||||
### Conda
|
||||
|
||||
## Conda updates
|
||||
* `conda env create -f environment.yml`
|
||||
|
||||
### Conda updates
|
||||
|
||||
In order to update the Conda environment, you can go down two routes:
|
||||
|
||||
1. You can manually edit the existing `environment.yml` file to force specific (newer) versions of an existing package.
|
||||
You can do this, for example, to force an update of the `azureml-sdk` and all its contained packages, or `pytorch`
|
||||
1. Or you can manually add and update packages, and later export the updated environment to a `yml` file.
|
||||
|
||||
If you want to take the second route:
|
||||
|
||||
1. Use `conda env update -f environment.yml --prune` to refresh if you make changes in environment.yml
|
||||
1. To update packages use `conda update --all` and `pip-review --local --interactive`
|
||||
2. To update packages use `conda update --all` and `pip-review --local --interactive`
|
||||
|
||||
|
||||
## Using the hi-ml package
|
||||
### Using the hi-ml package
|
||||
|
||||
To work on `hi-ml` package at the same time as `InnerEye-DeepLearning`, it can help to add the `hi-ml` package
|
||||
as a submodule, rather than a package from pypi. Any change to the package will require a full new docker image build,
|
||||
|
@ -151,18 +229,22 @@ and that costs 20min per run.
|
|||
add them to `sys.path`.
|
||||
|
||||
Once you are done testing your changes:
|
||||
|
||||
* Remove the entry for `hi-ml` from `.gitmodules`
|
||||
* Execute these steps from the repository root:
|
||||
```shell
|
||||
git submodule deinit -f hi-ml
|
||||
rm -rf hi-ml
|
||||
rm -rf .git/modules/hi-ml
|
||||
```
|
||||
|
||||
```shell
|
||||
git submodule deinit -f hi-ml
|
||||
rm -rf hi-ml
|
||||
rm -rf .git/modules/hi-ml
|
||||
```
|
||||
|
||||
Alternatively, you can consume a developer version of `hi-ml` from `test.pypi`:
|
||||
|
||||
* Remove the entry for the `hi-ml` package from `environment.yml`
|
||||
* Add a section like this to `environment.yml`, to point pip to `test.pypi`, and a specific version of th package:
|
||||
```
|
||||
|
||||
```yaml
|
||||
...
|
||||
- pip:
|
||||
- --extra-index-url https://test.pypi.org/simple/
|
||||
|
|
375
environment.yml
375
environment.yml
|
@ -1,76 +1,311 @@
|
|||
# WARNING - DO NOT EDIT THIS FILE MANUALLY
|
||||
# Please refer to the environment documentation for instructions on how to create a new version of this file: https://github.com/microsoft/InnerEye-DeepLearning/blob/main/docs/environment.md
|
||||
name: InnerEye
|
||||
channels:
|
||||
- defaults
|
||||
- pytorch
|
||||
- conda-forge
|
||||
- defaults
|
||||
dependencies:
|
||||
- cudatoolkit=11.3
|
||||
- pip=20.1.1
|
||||
- _libgcc_mutex=0.1=main
|
||||
- _openmp_mutex=5.1=1_gnu
|
||||
- blas=1.0=mkl
|
||||
- blosc=1.21.0=h4ff587b_1
|
||||
- bzip2=1.0.8=h7b6447c_0
|
||||
- ca-certificates=2022.4.26=h06a4308_0
|
||||
- certifi=2022.5.18.1=py37h06a4308_0
|
||||
- cudatoolkit=11.3.1=h2bc3f7f_2
|
||||
- ffmpeg=4.2.2=h20bf706_0
|
||||
- freetype=2.11.0=h70c0345_0
|
||||
- giflib=5.2.1=h7b6447c_0
|
||||
- gmp=6.2.1=h2531618_2
|
||||
- gnutls=3.6.15=he1e5248_0
|
||||
- intel-openmp=2021.4.0=h06a4308_3561
|
||||
- jpeg=9e=h7f8727e_0
|
||||
- lame=3.100=h7b6447c_0
|
||||
- lcms2=2.12=h3be6417_0
|
||||
- libedit=3.1.20210910=h7f8727e_0
|
||||
- libffi=3.2.1=hf484d3e_1007
|
||||
- libgcc-ng=11.2.0=h1234567_0
|
||||
- libgomp=11.2.0=h1234567_0
|
||||
- libidn2=2.3.2=h7f8727e_0
|
||||
- libopus=1.3.1=h7b6447c_0
|
||||
- libpng=1.6.37=hbc83047_0
|
||||
- libstdcxx-ng=11.2.0=h1234567_0
|
||||
- libtasn1=4.16.0=h27cfd23_0
|
||||
- libtiff=4.2.0=h2818925_1
|
||||
- libunistring=0.9.10=h27cfd23_0
|
||||
- libuv=1.40.0=h7b6447c_0
|
||||
- libvpx=1.7.0=h439df22_0
|
||||
- libwebp=1.2.2=h55f646e_0
|
||||
- libwebp-base=1.2.2=h7f8727e_0
|
||||
- lz4-c=1.9.3=h295c915_1
|
||||
- mkl=2021.4.0=h06a4308_640
|
||||
- mkl-service=2.4.0=py37h7f8727e_0
|
||||
- mkl_fft=1.3.1=py37hd3c417c_0
|
||||
- mkl_random=1.2.2=py37h51133e4_0
|
||||
- ncurses=6.3=h7f8727e_2
|
||||
- nettle=3.7.3=hbbd107a_1
|
||||
- openh264=2.1.1=h4ff587b_0
|
||||
- openssl=1.1.1o=h7f8727e_0
|
||||
- pip=20.1.1=py37_1
|
||||
- python=3.7.3
|
||||
- pytorch=1.10.0
|
||||
- python-blosc=1.7.0
|
||||
- torchvision=0.11.1
|
||||
- python-blosc=1.7.0=py37h7b6447c_0
|
||||
- pytorch=1.10.0=py3.7_cuda11.3_cudnn8.2.0_0
|
||||
- pytorch-mutex=1.0=cuda
|
||||
- readline=7.0=h7b6447c_5
|
||||
- setuptools=61.2.0=py37h06a4308_0
|
||||
- sqlite=3.33.0=h62c20be_0
|
||||
- tk=8.6.11=h1ccaba5_1
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- typing_extensions=4.1.1=pyh06a4308_0
|
||||
- wheel=0.37.1=pyhd3eb1b0_0
|
||||
- x264=1!157.20191217=h7b6447c_0
|
||||
- xz=5.2.5=h7f8727e_1
|
||||
- zlib=1.2.12=h7f8727e_2
|
||||
- zstd=1.5.2=ha4553b6_0
|
||||
- pip:
|
||||
- azure-mgmt-resource==12.1.0
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-storage-blob==12.6.0
|
||||
- azureml-mlflow==1.36.0
|
||||
- azureml-sdk==1.36.0
|
||||
- azureml-tensorboard==1.36.0
|
||||
- cloudpickle <2.0.0,>=1.1.0
|
||||
- conda-merge==0.1.5
|
||||
- cryptography==3.3.2
|
||||
- cucim==21.10.1; platform_system=="Linux"
|
||||
- dataclasses-json==0.5.2
|
||||
- docker==4.3.1
|
||||
- flake8==3.8.3
|
||||
- gitpython==3.1.7
|
||||
- gputil==1.4.0
|
||||
- h5py==2.10.0
|
||||
- ipython==7.31.1
|
||||
- imageio==2.15.0
|
||||
- InnerEye-DICOM-RT==1.0.3
|
||||
- joblib==0.16.0
|
||||
- jupyter==1.0.0
|
||||
- jupyter-client==6.1.5
|
||||
- lightning-bolts==0.4.0
|
||||
- matplotlib==3.3.0
|
||||
- mlflow==1.23.1
|
||||
- monai==0.6.0
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- numba==0.51.2
|
||||
- opencv-python-headless==4.5.1.48
|
||||
- pandas==1.1.0
|
||||
- papermill==2.2.2
|
||||
- param==1.9.3
|
||||
- pillow==9.0.0
|
||||
- psutil==5.7.2
|
||||
- pydicom==2.0.0
|
||||
- pyflakes==2.2.0
|
||||
- PyJWT==1.7.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
- pytest-xdist==1.34.0
|
||||
- pytorch-lightning==1.5.5
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
- ruamel.yaml==0.16.12
|
||||
- runstats==1.8.0
|
||||
- scikit-image==0.17.2
|
||||
- scikit-learn==0.23.2
|
||||
- scipy==1.5.2
|
||||
- seaborn==0.10.1
|
||||
- simpleitk==1.2.4
|
||||
- six==1.15.0
|
||||
- stopit==1.1.2
|
||||
- tabulate==0.8.7
|
||||
- tensorboard==2.3.0
|
||||
- tensorboardX==2.1
|
||||
- torchio==0.18.74
|
||||
- torchmetrics==0.6.0
|
||||
- umap-learn==0.5.2
|
||||
- yacs==0.1.8
|
||||
- absl-py==1.0.0
|
||||
- adal==1.2.7
|
||||
- aiohttp==3.8.1
|
||||
- aiosignal==1.2.0
|
||||
- alembic==1.7.7
|
||||
- ansiwrap==0.8.4
|
||||
- applicationinsights==0.11.10
|
||||
- argon2-cffi==21.3.0
|
||||
- argon2-cffi-bindings==21.2.0
|
||||
- async-timeout==4.0.2
|
||||
- asynctest==0.13.0
|
||||
- attrs==21.4.0
|
||||
- azure-common==1.1.28
|
||||
- azure-core==1.24.0
|
||||
- azure-graphrbac==0.61.1
|
||||
- azure-identity==1.7.0
|
||||
- azure-mgmt-authorization==0.61.0
|
||||
- azure-mgmt-containerregistry==10.0.0
|
||||
- azure-mgmt-core==1.3.0
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-mgmt-keyvault==9.3.0
|
||||
- azure-mgmt-resource==12.1.0
|
||||
- azure-mgmt-storage==11.2.0
|
||||
- azure-storage-blob==12.6.0
|
||||
- azureml-automl-core==1.36.1
|
||||
- azureml-core==1.36.0.post2
|
||||
- azureml-dataprep==2.24.4
|
||||
- azureml-dataprep-native==38.0.0
|
||||
- azureml-dataprep-rslex==2.0.3
|
||||
- azureml-dataset-runtime==1.36.0
|
||||
- azureml-mlflow==1.36.0
|
||||
- azureml-pipeline==1.36.0
|
||||
- azureml-pipeline-core==1.36.0
|
||||
- azureml-pipeline-steps==1.36.0
|
||||
- azureml-sdk==1.36.0
|
||||
- azureml-telemetry==1.36.0
|
||||
- azureml-tensorboard==1.36.0
|
||||
- azureml-train-automl-client==1.36.0
|
||||
- azureml-train-core==1.36.0
|
||||
- azureml-train-restclients-hyperdrive==1.36.0
|
||||
- backcall==0.2.0
|
||||
- backports-tempfile==1.0
|
||||
- backports-weakref==1.0.post1
|
||||
- beautifulsoup4==4.11.1
|
||||
- black==22.3.0
|
||||
- bleach==5.0.0
|
||||
- cachetools==4.2.4
|
||||
- cffi==1.15.0
|
||||
- charset-normalizer==2.0.12
|
||||
- click==8.1.3
|
||||
- cloudpickle==1.6.0
|
||||
- colorama==0.4.4
|
||||
- commonmark==0.9.1
|
||||
- conda-merge==0.1.5
|
||||
- contextlib2==21.6.0
|
||||
- coverage==6.4
|
||||
- cryptography==3.3.2
|
||||
- cucim==21.10.1
|
||||
- cycler==0.11.0
|
||||
- databricks-cli==0.16.6
|
||||
- dataclasses-json==0.5.2
|
||||
- debugpy==1.6.0
|
||||
- decorator==5.1.1
|
||||
- defusedxml==0.7.1
|
||||
- deprecated==1.2.13
|
||||
- distro==1.7.0
|
||||
- docker==4.3.1
|
||||
- dotnetcore2==2.1.23
|
||||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
- fsspec==2022.5.0
|
||||
- fusepy==3.0.1
|
||||
- future==0.18.2
|
||||
- gitdb==4.0.9
|
||||
- gitpython==3.1.7
|
||||
- google-auth==1.35.0
|
||||
- google-auth-oauthlib==0.4.6
|
||||
- gputil==1.4.0
|
||||
- greenlet==1.1.2
|
||||
- grpcio==1.46.3
|
||||
- gunicorn==20.1.0
|
||||
- h5py==2.10.0
|
||||
- humanize==4.1.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
- importlib-metadata==4.11.4
|
||||
- importlib-resources==5.7.1
|
||||
- iniconfig==1.1.1
|
||||
- innereye-dicom-rt==1.0.3
|
||||
- ipykernel==6.13.0
|
||||
- ipython==7.31.1
|
||||
- ipython-genutils==0.2.0
|
||||
- ipywidgets==7.7.0
|
||||
- isodate==0.6.1
|
||||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
- jsonschema==4.5.1
|
||||
- jupyter==1.0.0
|
||||
- jupyter-client==6.1.5
|
||||
- jupyter-console==6.4.3
|
||||
- jupyter-core==4.10.0
|
||||
- jupyterlab-pygments==0.2.2
|
||||
- jupyterlab-widgets==1.1.0
|
||||
- kiwisolver==1.4.2
|
||||
- lightning-bolts==0.4.0
|
||||
- llvmlite==0.34.0
|
||||
- mako==1.2.0
|
||||
- markdown==3.3.7
|
||||
- markupsafe==2.1.1
|
||||
- marshmallow==3.16.0
|
||||
- marshmallow-enum==1.5.1
|
||||
- matplotlib==3.3.0
|
||||
- matplotlib-inline==0.1.3
|
||||
- mccabe==0.6.1
|
||||
- mistune==0.8.4
|
||||
- mlflow==1.23.1
|
||||
- mlflow-skinny==1.26.1
|
||||
- monai==0.6.0
|
||||
- more-itertools==8.13.0
|
||||
- msal==1.17.0
|
||||
- msal-extensions==0.3.1
|
||||
- msrest==0.6.21
|
||||
- msrestazure==0.6.4
|
||||
- multidict==6.0.2
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- nbclient==0.6.3
|
||||
- nbconvert==6.5.0
|
||||
- nbformat==5.4.0
|
||||
- ndg-httpsclient==0.5.1
|
||||
- nest-asyncio==1.5.5
|
||||
- networkx==2.6.3
|
||||
- nibabel==3.2.2
|
||||
- notebook==6.4.11
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- oauthlib==3.2.0
|
||||
- opencv-python-headless==4.5.1.48
|
||||
- packaging==21.3
|
||||
- pandas==1.1.0
|
||||
- pandocfilters==1.5.0
|
||||
- papermill==2.2.2
|
||||
- param==1.9.3
|
||||
- parso==0.8.3
|
||||
- pathspec==0.9.0
|
||||
- pexpect==4.8.0
|
||||
- pickleshare==0.7.5
|
||||
- pillow==9.0.0
|
||||
- platformdirs==2.5.2
|
||||
- pluggy==0.13.1
|
||||
- portalocker==2.4.0
|
||||
- prometheus-client==0.14.1
|
||||
- prometheus-flask-exporter==0.20.1
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
- ptyprocess==0.7.0
|
||||
- py==1.11.0
|
||||
- pyarrow==3.0.0
|
||||
- pyasn1==0.4.8
|
||||
- pyasn1-modules==0.2.8
|
||||
- pycodestyle==2.6.0
|
||||
- pycparser==2.21
|
||||
- pydeprecate==0.3.1
|
||||
- pydicom==2.0.0
|
||||
- pyflakes==2.2.0
|
||||
- pygments==2.12.0
|
||||
- pyjwt==1.7.1
|
||||
- pynndescent==0.5.7
|
||||
- pyopenssl==20.0.1
|
||||
- pyparsing==3.0.9
|
||||
- pyrsistent==0.18.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
- pytest-xdist==1.34.0
|
||||
- python-dateutil==2.8.2
|
||||
- pytorch-lightning==1.5.5
|
||||
- pytz==2022.1
|
||||
- pywavelets==1.3.0
|
||||
- pyyaml==6.0
|
||||
- pyzmq==23.0.0
|
||||
- qtconsole==5.3.0
|
||||
- qtpy==2.1.0
|
||||
- querystring-parser==1.2.4
|
||||
- requests==2.27.1
|
||||
- requests-oauthlib==1.3.1
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
- rsa==4.8
|
||||
- ruamel-yaml==0.16.12
|
||||
- ruamel-yaml-clib==0.2.6
|
||||
- runstats==1.8.0
|
||||
- scikit-image==0.17.2
|
||||
- scikit-learn==0.23.2
|
||||
- scipy==1.5.2
|
||||
- seaborn==0.10.1
|
||||
- secretstorage==3.3.2
|
||||
- send2trash==1.8.0
|
||||
- simpleitk==1.2.4
|
||||
- six==1.15.0
|
||||
- smmap==5.0.0
|
||||
- soupsieve==2.3.2.post1
|
||||
- sqlalchemy==1.4.36
|
||||
- sqlparse==0.4.2
|
||||
- stopit==1.1.2
|
||||
- stringcase==1.2.0
|
||||
- tabulate==0.8.7
|
||||
- tenacity==8.0.1
|
||||
- tensorboard==2.3.0
|
||||
- tensorboard-plugin-wit==1.8.1
|
||||
- tensorboardx==2.1
|
||||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
- torchio==0.18.74
|
||||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.2.1.post0
|
||||
- typed-ast==1.4.3
|
||||
- typing-inspect==0.7.1
|
||||
- umap-learn==0.5.2
|
||||
- urllib3==1.26.7
|
||||
- wcwidth==0.2.5
|
||||
- webencodings==0.5.1
|
||||
- websocket-client==1.3.2
|
||||
- werkzeug==2.1.2
|
||||
- widgetsnbextension==3.6.0
|
||||
- wrapt==1.14.1
|
||||
- yacs==0.1.8
|
||||
- yarl==1.7.2
|
||||
- zipp==3.8.0
|
||||
|
|
|
@ -0,0 +1,287 @@
|
|||
name: InnerEye
|
||||
channels:
|
||||
- pytorch
|
||||
- defaults
|
||||
dependencies:
|
||||
- blas=1.0=mkl
|
||||
- blosc=1.21.0=h19a0ad4_1
|
||||
- ca-certificates=2022.4.26=haa95532_0
|
||||
- certifi=2022.5.18.1=py37haa95532_0
|
||||
- cudatoolkit=11.3.1=h59b6b97_2
|
||||
- freetype=2.10.4=hd328e21_0
|
||||
- intel-openmp=2021.4.0=haa95532_3556
|
||||
- jpeg=9e=h2bbff1b_0
|
||||
- libpng=1.6.37=h2a8f88b_0
|
||||
- libtiff=4.2.0=he0120a3_1
|
||||
- libuv=1.40.0=he774522_0
|
||||
- libwebp=1.2.2=h2bbff1b_0
|
||||
- lz4-c=1.9.3=h2bbff1b_1
|
||||
- mkl=2021.4.0=haa95532_640
|
||||
- mkl-service=2.4.0=py37h2bbff1b_0
|
||||
- mkl_fft=1.3.1=py37h277e83a_0
|
||||
- mkl_random=1.2.2=py37hf11a4ad_0
|
||||
- openssl=1.1.1o=h2bbff1b_0
|
||||
- pip=20.1.1=py37_1
|
||||
- python=3.7.3=h8c8aaf0_1
|
||||
- python-blosc=1.7.0=py37he774522_0
|
||||
- pytorch=1.10.0=py3.7_cuda11.3_cudnn8_0
|
||||
- pytorch-mutex=1.0=cuda
|
||||
- setuptools=61.2.0=py37haa95532_0
|
||||
- sqlite=3.38.3=h2bbff1b_0
|
||||
- tk=8.6.11=h2bbff1b_1
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- typing_extensions=4.1.1=pyh06a4308_0
|
||||
- vc=14.2=h21ff451_1
|
||||
- vs2015_runtime=14.27.29016=h5e58377_2
|
||||
- wheel=0.37.1=pyhd3eb1b0_0
|
||||
- wincertstore=0.2=py37haa95532_2
|
||||
- xz=5.2.5=h8cc25b3_1
|
||||
- zlib=1.2.12=h8cc25b3_2
|
||||
- zstd=1.5.2=h19a0ad4_0
|
||||
- pip:
|
||||
- absl-py==1.0.0
|
||||
- adal==1.2.7
|
||||
- aiohttp==3.8.1
|
||||
- aiosignal==1.2.0
|
||||
- alembic==1.7.7
|
||||
- ansiwrap==0.8.4
|
||||
- applicationinsights==0.11.10
|
||||
- argon2-cffi==21.3.0
|
||||
- argon2-cffi-bindings==21.2.0
|
||||
- async-timeout==4.0.2
|
||||
- asynctest==0.13.0
|
||||
- atomicwrites==1.4.0
|
||||
- attrs==21.4.0
|
||||
- azure-common==1.1.28
|
||||
- azure-core==1.24.0
|
||||
- azure-graphrbac==0.61.1
|
||||
- azure-identity==1.7.0
|
||||
- azure-mgmt-authorization==0.61.0
|
||||
- azure-mgmt-containerregistry==10.0.0
|
||||
- azure-mgmt-core==1.3.0
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-mgmt-keyvault==9.3.0
|
||||
- azure-mgmt-resource==12.1.0
|
||||
- azure-mgmt-storage==11.2.0
|
||||
- azure-storage-blob==12.6.0
|
||||
- azureml-automl-core==1.36.1
|
||||
- azureml-core==1.36.0.post2
|
||||
- azureml-dataprep==2.24.4
|
||||
- azureml-dataprep-native==38.0.0
|
||||
- azureml-dataprep-rslex==2.0.3
|
||||
- azureml-dataset-runtime==1.36.0
|
||||
- azureml-mlflow==1.36.0
|
||||
- azureml-pipeline==1.36.0
|
||||
- azureml-pipeline-core==1.36.0
|
||||
- azureml-pipeline-steps==1.36.0
|
||||
- azureml-sdk==1.36.0
|
||||
- azureml-telemetry==1.36.0
|
||||
- azureml-tensorboard==1.36.0
|
||||
- azureml-train-automl-client==1.36.0
|
||||
- azureml-train-core==1.36.0
|
||||
- azureml-train-restclients-hyperdrive==1.36.0
|
||||
- backcall==0.2.0
|
||||
- backports-tempfile==1.0
|
||||
- backports-weakref==1.0.post1
|
||||
- beautifulsoup4==4.11.1
|
||||
- black==22.3.0
|
||||
- bleach==5.0.0
|
||||
- cachetools==4.2.4
|
||||
- cffi==1.15.0
|
||||
- charset-normalizer==2.0.12
|
||||
- click==8.1.3
|
||||
- cloudpickle==1.6.0
|
||||
- colorama==0.4.4
|
||||
- commonmark==0.9.1
|
||||
- conda-merge==0.1.5
|
||||
- contextlib2==21.6.0
|
||||
- coverage==6.4
|
||||
- cryptography==3.3.2
|
||||
- cycler==0.11.0
|
||||
- databricks-cli==0.16.6
|
||||
- dataclasses-json==0.5.2
|
||||
- debugpy==1.6.0
|
||||
- decorator==5.1.1
|
||||
- defusedxml==0.7.1
|
||||
- deprecated==1.2.13
|
||||
- distro==1.7.0
|
||||
- docker==4.3.1
|
||||
- dotnetcore2==2.1.23
|
||||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
- fsspec==2022.5.0
|
||||
- fusepy==3.0.1
|
||||
- future==0.18.2
|
||||
- gitdb==4.0.9
|
||||
- gitpython==3.1.7
|
||||
- google-auth==1.35.0
|
||||
- google-auth-oauthlib==0.4.6
|
||||
- gputil==1.4.0
|
||||
- greenlet==1.1.2
|
||||
- grpcio==1.46.3
|
||||
- h5py==2.10.0
|
||||
- humanize==4.1.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
- importlib-metadata==4.11.4
|
||||
- importlib-resources==5.7.1
|
||||
- iniconfig==1.1.1
|
||||
- innereye-dicom-rt==1.0.3
|
||||
- ipykernel==6.13.0
|
||||
- ipython==7.31.1
|
||||
- ipython-genutils==0.2.0
|
||||
- ipywidgets==7.7.0
|
||||
- isodate==0.6.1
|
||||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
- jsonschema==4.5.1
|
||||
- jupyter==1.0.0
|
||||
- jupyter-client==6.1.5
|
||||
- jupyter-console==6.4.3
|
||||
- jupyter-core==4.10.0
|
||||
- jupyterlab-pygments==0.2.2
|
||||
- jupyterlab-widgets==1.1.0
|
||||
- kiwisolver==1.4.2
|
||||
- lightning-bolts==0.4.0
|
||||
- llvmlite==0.34.0
|
||||
- mako==1.2.0
|
||||
- markdown==3.3.7
|
||||
- markupsafe==2.1.1
|
||||
- marshmallow==3.16.0
|
||||
- marshmallow-enum==1.5.1
|
||||
- matplotlib==3.3.0
|
||||
- matplotlib-inline==0.1.3
|
||||
- mccabe==0.6.1
|
||||
- mistune==0.8.4
|
||||
- mlflow==1.23.1
|
||||
- mlflow-skinny==1.26.1
|
||||
- monai==0.6.0
|
||||
- more-itertools==8.13.0
|
||||
- msal==1.17.0
|
||||
- msal-extensions==0.3.1
|
||||
- msrest==0.6.21
|
||||
- msrestazure==0.6.4
|
||||
- multidict==6.0.2
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- nbclient==0.6.3
|
||||
- nbconvert==6.5.0
|
||||
- nbformat==5.4.0
|
||||
- ndg-httpsclient==0.5.1
|
||||
- nest-asyncio==1.5.5
|
||||
- networkx==2.6.3
|
||||
- nibabel==3.2.2
|
||||
- notebook==6.4.11
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- oauthlib==3.2.0
|
||||
- opencv-python-headless==4.5.1.48
|
||||
- packaging==21.3
|
||||
- pandas==1.1.0
|
||||
- pandocfilters==1.5.0
|
||||
- papermill==2.2.2
|
||||
- param==1.9.3
|
||||
- parso==0.8.3
|
||||
- pathspec==0.9.0
|
||||
- pickleshare==0.7.5
|
||||
- pillow==9.0.0
|
||||
- platformdirs==2.5.2
|
||||
- pluggy==0.13.1
|
||||
- portalocker==2.4.0
|
||||
- prometheus-client==0.14.1
|
||||
- prometheus-flask-exporter==0.20.1
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
- py==1.11.0
|
||||
- pyarrow==3.0.0
|
||||
- pyasn1==0.4.8
|
||||
- pyasn1-modules==0.2.8
|
||||
- pycodestyle==2.6.0
|
||||
- pycparser==2.21
|
||||
- pydeprecate==0.3.1
|
||||
- pydicom==2.0.0
|
||||
- pyflakes==2.2.0
|
||||
- pygments==2.12.0
|
||||
- pyjwt==1.7.1
|
||||
- pynndescent==0.5.7
|
||||
- pyopenssl==20.0.1
|
||||
- pyparsing==3.0.9
|
||||
- pyrsistent==0.18.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
- pytest-xdist==1.34.0
|
||||
- python-dateutil==2.8.2
|
||||
- pytorch-lightning==1.5.5
|
||||
- pytz==2022.1
|
||||
- pywavelets==1.3.0
|
||||
- pywin32==227
|
||||
- pywinpty==2.0.5
|
||||
- pyyaml==6.0
|
||||
- pyzmq==23.0.0
|
||||
- qtconsole==5.3.0
|
||||
- qtpy==2.1.0
|
||||
- querystring-parser==1.2.4
|
||||
- requests==2.27.1
|
||||
- requests-oauthlib==1.3.1
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
- rsa==4.8
|
||||
- ruamel-yaml==0.16.12
|
||||
- ruamel-yaml-clib==0.2.6
|
||||
- runstats==1.8.0
|
||||
- scikit-image==0.17.2
|
||||
- scikit-learn==0.23.2
|
||||
- scipy==1.5.2
|
||||
- seaborn==0.10.1
|
||||
- secretstorage==3.3.2
|
||||
- send2trash==1.8.0
|
||||
- simpleitk==1.2.4
|
||||
- six==1.15.0
|
||||
- smmap==5.0.0
|
||||
- soupsieve==2.3.2.post1
|
||||
- sqlalchemy==1.4.36
|
||||
- sqlparse==0.4.2
|
||||
- stopit==1.1.2
|
||||
- stringcase==1.2.0
|
||||
- tabulate==0.8.7
|
||||
- tenacity==8.0.1
|
||||
- tensorboard==2.3.0
|
||||
- tensorboard-plugin-wit==1.8.1
|
||||
- tensorboardx==2.1
|
||||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
- torchio==0.18.74
|
||||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.2.1.post0
|
||||
- typed-ast==1.4.3
|
||||
- typing-inspect==0.7.1
|
||||
- umap-learn==0.5.2
|
||||
- urllib3==1.26.7
|
||||
- waitress==2.1.1
|
||||
- wcwidth==0.2.5
|
||||
- webencodings==0.5.1
|
||||
- websocket-client==1.3.2
|
||||
- werkzeug==2.1.2
|
||||
- widgetsnbextension==3.6.0
|
||||
- wrapt==1.14.1
|
||||
- yacs==0.1.8
|
||||
- yarl==1.7.2
|
||||
- zipp==3.8.0
|
2
hi-ml
2
hi-ml
|
@ -1 +1 @@
|
|||
Subproject commit 6cfc73ed8825100e88543697fab0b69cc0b09183
|
||||
Subproject commit aff0f340b08c43c87e6841733767c860d0e0e63c
|
|
@ -0,0 +1,77 @@
|
|||
name: InnerEye
|
||||
channels:
|
||||
- defaults
|
||||
- pytorch
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- cudatoolkit=11.3
|
||||
- pip=20.1.1
|
||||
- python=3.7.3
|
||||
- pytorch=1.10.0
|
||||
- python-blosc=1.7.0
|
||||
- torchvision=0.11.1
|
||||
- pip:
|
||||
- azure-mgmt-resource==12.1.0
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-storage-blob==12.6.0
|
||||
- azureml-mlflow==1.36.0
|
||||
- azureml-sdk==1.36.0
|
||||
- azureml-tensorboard==1.36.0
|
||||
- cloudpickle <2.0.0,>=1.1.0
|
||||
- conda-merge==0.1.5
|
||||
- cryptography==3.3.2
|
||||
- cucim==21.10.1; platform_system=="Linux"
|
||||
- dataclasses-json==0.5.2
|
||||
- docker==4.3.1
|
||||
- flake8==3.8.3
|
||||
- gitpython==3.1.7
|
||||
- gputil==1.4.0
|
||||
- h5py==2.10.0
|
||||
- ipython==7.31.1
|
||||
- imageio==2.15.0
|
||||
- InnerEye-DICOM-RT==1.0.3
|
||||
- joblib==0.16.0
|
||||
- jupyter==1.0.0
|
||||
- jupyter-client==6.1.5
|
||||
- lightning-bolts==0.4.0
|
||||
- matplotlib==3.3.0
|
||||
- mlflow==1.23.1
|
||||
- monai==0.6.0
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- numba==0.51.2
|
||||
- opencv-python-headless==4.5.1.48
|
||||
- pandas==1.1.0
|
||||
- papermill==2.2.2
|
||||
- param==1.9.3
|
||||
- pillow==9.0.0
|
||||
- protobuf<=3.20.1
|
||||
- psutil==5.7.2
|
||||
- pydicom==2.0.0
|
||||
- pyflakes==2.2.0
|
||||
- PyJWT==1.7.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
- pytest-xdist==1.34.0
|
||||
- pytorch-lightning==1.5.5
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
- ruamel.yaml==0.16.12
|
||||
- runstats==1.8.0
|
||||
- scikit-image==0.17.2
|
||||
- scikit-learn==0.23.2
|
||||
- scipy==1.5.2
|
||||
- seaborn==0.10.1
|
||||
- simpleitk==1.2.4
|
||||
- six==1.15.0
|
||||
- stopit==1.1.2
|
||||
- tabulate==0.8.7
|
||||
- tensorboard==2.3.0
|
||||
- tensorboardX==2.1
|
||||
- torchio==0.18.74
|
||||
- torchmetrics==0.6.0
|
||||
- umap-learn==0.5.2
|
||||
- yacs==0.1.8
|
Загрузка…
Ссылка в новой задаче