ENH: Move hi-ml and fastMRI to PyPI packages (#752)
* 🔥 💥 Remove submodules * ➕ Add packages to primary dependencies * 📌 ⬆️ Upgrade python to 3.8 and lock * ✅ Fix fastMRI test * 💚 ✅ Fix tests and CI workflows * 🏷️ Fix MyPy and Flake8 issues * ⬆️ Update windows dependencies * 📝 Add fastMRI reference * ⚰️ Remove references to old submodules
This commit is contained in:
Родитель
69a5e8cd2c
Коммит
38f830374e
|
@ -32,7 +32,7 @@ jobs:
|
|||
activate-environment: InnerEye
|
||||
auto-activate-base: false
|
||||
environment-file: environment.yml
|
||||
python-version: 3.7
|
||||
python-version: 3.8.3
|
||||
if: always()
|
||||
|
||||
- name: mypy
|
||||
|
@ -68,7 +68,7 @@ jobs:
|
|||
activate-environment: InnerEye
|
||||
auto-activate-base: false
|
||||
environment-file: environment_win.yml
|
||||
python-version: 3.7
|
||||
python-version: 3.8.3
|
||||
if: always()
|
||||
|
||||
- name: Run HelloWorld model
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
[submodule "fastMRI"]
|
||||
path = fastMRI
|
||||
url = https://github.com/facebookresearch/fastMRI
|
||||
[submodule "hi-ml"]
|
||||
path = hi-ml
|
||||
url = https://github.com/microsoft/hi-ml
|
|
@ -6,7 +6,7 @@ import logging
|
|||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import List, Optional, Tuple
|
||||
from typing import Optional
|
||||
|
||||
from InnerEye.Common.type_annotations import PathOrString
|
||||
|
||||
|
@ -104,15 +104,6 @@ def get_environment_yaml_file() -> Path:
|
|||
return env
|
||||
|
||||
|
||||
def get_hi_ml_submodule_relative_paths() -> List[Tuple[Path, str]]:
|
||||
"""
|
||||
Returns the paths relative to the repository root where the submodules for hi-ml and hi-ml-azure are expected.
|
||||
It returns a list with a tuple (folder name, expected subfolder in that folder)
|
||||
"""
|
||||
return [(Path("hi-ml") / "hi-ml-azure" / "src", "health_azure"),
|
||||
(Path("hi-ml") / "hi-ml" / "src", "health_ml")]
|
||||
|
||||
|
||||
def add_submodules_to_path() -> None:
|
||||
"""
|
||||
This function adds all submodules that the code uses to sys.path and to the environment variables. This is
|
||||
|
@ -123,9 +114,7 @@ def add_submodules_to_path() -> None:
|
|||
up in sys.path.
|
||||
"""
|
||||
innereye_root = repository_root_directory()
|
||||
folders_to_add = [(innereye_root, "InnerEye"),
|
||||
(innereye_root / "fastMRI", "fastmri")]
|
||||
folders_to_add.extend([(innereye_root / p, folder) for p, folder in get_hi_ml_submodule_relative_paths()])
|
||||
folders_to_add = [(innereye_root, "InnerEye")]
|
||||
for (folder, subfolder_that_must_exist) in folders_to_add:
|
||||
if (folder / subfolder_that_must_exist).is_dir():
|
||||
folder_str = str(folder)
|
||||
|
|
|
@ -654,11 +654,7 @@ class MLRunner:
|
|||
# we can identify it by going up the folder structure off a known file (repository_root does exactly that)
|
||||
repository_root = fixed_paths.repository_root_directory()
|
||||
copy_folder(repository_root / INNEREYE_PACKAGE_NAME)
|
||||
# If hi-ml is used as a submodule, copy that too
|
||||
for relative_path, _ in fixed_paths.get_hi_ml_submodule_relative_paths():
|
||||
full_submodule_path = repository_root / relative_path
|
||||
if full_submodule_path.is_dir():
|
||||
copy_folder(full_submodule_path, relative_path)
|
||||
|
||||
# Extra code directory is expected to be relative to the project root folder.
|
||||
if self.azure_config.extra_code_directory:
|
||||
extra_code_folder = self.project_root / self.azure_config.extra_code_directory
|
||||
|
|
|
@ -11,7 +11,7 @@ dependencies:
|
|||
- 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
|
||||
- certifi=2022.5.18.1=py38h06a4308_0
|
||||
- cudatoolkit=11.3.1=h2bc3f7f_2
|
||||
- ffmpeg=4.2.2=h20bf706_0
|
||||
- freetype=2.11.0=h70c0345_0
|
||||
|
@ -22,8 +22,8 @@ dependencies:
|
|||
- 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
|
||||
- ld_impl_linux-64=2.38=h1181459_1
|
||||
- libffi=3.3=he6710b0_2
|
||||
- libgcc-ng=11.2.0=h1234567_1
|
||||
- libgomp=11.2.0=h1234567_1
|
||||
- libidn2=2.3.2=h7f8727e_0
|
||||
|
@ -39,23 +39,23 @@ dependencies:
|
|||
- 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
|
||||
- mkl-service=2.4.0=py38h7f8727e_0
|
||||
- mkl_fft=1.3.1=py38hd3c417c_0
|
||||
- mkl_random=1.2.2=py38h51133e4_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
|
||||
- pip=20.1.1=py38_1
|
||||
- python=3.8.3
|
||||
- python-blosc=1.7.0=py38h7b6447c_0
|
||||
- pytorch=1.10.0=py3.8_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
|
||||
- readline=8.1.2=h7f8727e_1
|
||||
- setuptools=61.2.0=py38h06a4308_0
|
||||
- sqlite=3.38.3=hc218d9a_0
|
||||
- tk=8.6.12=h1ccaba5_0
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- torchvision=0.11.1=py38_cu113
|
||||
- typing_extensions=4.1.1=pyh06a4308_0
|
||||
- wheel=0.37.1=pyhd3eb1b0_0
|
||||
- x264=1!157.20191217=h7b6447c_0
|
||||
|
@ -73,7 +73,6 @@ dependencies:
|
|||
- 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.1
|
||||
|
@ -103,7 +102,6 @@ dependencies:
|
|||
- 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
|
||||
|
@ -124,7 +122,6 @@ dependencies:
|
|||
- databricks-cli==0.17.0
|
||||
- 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
|
||||
|
@ -133,6 +130,7 @@ dependencies:
|
|||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- fastmri==0.2.0
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
|
@ -148,6 +146,8 @@ dependencies:
|
|||
- grpcio==1.46.3
|
||||
- gunicorn==20.1.0
|
||||
- h5py==2.10.0
|
||||
- hi-ml==0.2.2
|
||||
- hi-ml-azure==0.2.2
|
||||
- humanize==4.2.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
|
@ -161,9 +161,8 @@ dependencies:
|
|||
- ipywidgets==7.7.0
|
||||
- isodate==0.6.1
|
||||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jinja2==3.0.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
|
@ -183,7 +182,6 @@ dependencies:
|
|||
- 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
|
||||
|
@ -202,7 +200,7 @@ dependencies:
|
|||
- nbformat==5.4.0
|
||||
- ndg-httpsclient==0.5.1
|
||||
- nest-asyncio==1.5.5
|
||||
- networkx==2.6.3
|
||||
- networkx==2.8.4
|
||||
- nibabel==4.0.1
|
||||
- notebook==6.4.12
|
||||
- numba==0.51.2
|
||||
|
@ -214,17 +212,14 @@ dependencies:
|
|||
- 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.2
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
- ptyprocess==0.7.0
|
||||
|
@ -237,12 +232,12 @@ dependencies:
|
|||
- 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
|
||||
- pysocks==1.7.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
|
@ -286,7 +281,7 @@ dependencies:
|
|||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tifffile==2022.5.4
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
|
@ -294,12 +289,9 @@ dependencies:
|
|||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.3.0
|
||||
- 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.3
|
||||
- werkzeug==2.1.2
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
# Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
|
||||
# ------------------------------------------------------------------------------------------
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
@ -11,7 +10,6 @@ import pytest
|
|||
from InnerEye.Common import common_util
|
||||
from InnerEye.Common.common_util import (change_working_directory, check_is_any_of,
|
||||
is_private_field_name, namespace_to_path, path_to_namespace, print_exception)
|
||||
from InnerEye.Common.fixed_paths import add_submodules_to_path, repository_root_directory
|
||||
from InnerEye.Common.fixed_paths_for_tests import full_ml_test_data_path, tests_root_directory
|
||||
from InnerEye.Common.output_directories import OutputFolderForTests
|
||||
|
||||
|
@ -125,17 +123,3 @@ def test_change_dir(test_output_dirs: OutputFolderForTests) -> None:
|
|||
Path("bar.txt").touch()
|
||||
assert Path.cwd() == test_output_dirs.root_dir
|
||||
assert (new_dir / "bar.txt").is_file()
|
||||
|
||||
|
||||
def test_add_submodules_to_path() -> None:
|
||||
original_sys_path = sys.path
|
||||
try:
|
||||
fastmri_folder = repository_root_directory() / "fastMRI"
|
||||
fastmri_str = str(fastmri_folder)
|
||||
assert fastmri_folder.is_dir()
|
||||
if fastmri_str in sys.path:
|
||||
sys.path.remove(fastmri_str)
|
||||
add_submodules_to_path()
|
||||
assert fastmri_str in sys.path
|
||||
finally:
|
||||
sys.path = original_sys_path
|
||||
|
|
|
@ -8,18 +8,118 @@
|
|||
# flake8: noqa
|
||||
import shutil
|
||||
from pathlib import Path
|
||||
from typing import Any, Optional
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
import h5py
|
||||
import numpy as np
|
||||
from _pytest.monkeypatch import MonkeyPatch
|
||||
from pytorch_lightning import LightningDataModule, LightningModule
|
||||
|
||||
from InnerEye.ML.configs.other.fastmri_varnet import VarNetWithImageLogging
|
||||
from InnerEye.ML.lightning_container import LightningContainer
|
||||
from fastMRI.tests.create_temp_data import create_temp_data
|
||||
from fastmri.data import SliceDataset
|
||||
from fastmri.data.subsample import create_mask_for_mask_type
|
||||
from fastmri.data.transforms import VarNetDataTransform
|
||||
from fastmri.pl_modules import FastMriDataModule
|
||||
from pytorch_lightning import LightningDataModule, LightningModule
|
||||
|
||||
from InnerEye.ML.configs.other.fastmri_varnet import VarNetWithImageLogging
|
||||
from InnerEye.ML.lightning_container import LightningContainer
|
||||
|
||||
|
||||
# Copied and modified from the FastMRI codebase.
|
||||
# https://github.com/facebookresearch/fastMRI/blob/main/tests/create_temp_data.py
|
||||
def create_temp_data(path: Path) -> Dict[str, Any]:
|
||||
rg = np.random.default_rng(seed=1234)
|
||||
max_num_slices = 15
|
||||
max_num_coils = 15
|
||||
data_splits = {
|
||||
"knee_data": [
|
||||
"multicoil_train",
|
||||
"multicoil_val",
|
||||
"multicoil_test",
|
||||
"multicoil_challenge",
|
||||
"singlecoil_train",
|
||||
"singlecoil_val",
|
||||
"singlecoil_test",
|
||||
"singlecoil_challenge",
|
||||
],
|
||||
"brain_data": [
|
||||
"multicoil_train",
|
||||
"multicoil_val",
|
||||
"multicoil_test",
|
||||
"multicoil_challenge",
|
||||
],
|
||||
}
|
||||
|
||||
enc_sizes = {
|
||||
"train": [(1, 128, 64), (1, 128, 49), (1, 150, 67)],
|
||||
"val": [(1, 128, 64), (1, 170, 57)],
|
||||
"test": [(1, 128, 64), (1, 96, 96)],
|
||||
"challenge": [(1, 128, 64), (1, 96, 48)],
|
||||
}
|
||||
recon_sizes = {
|
||||
"train": [(1, 64, 64), (1, 49, 49), (1, 67, 67)],
|
||||
"val": [(1, 64, 64), (1, 57, 47)],
|
||||
"test": [(1, 64, 64), (1, 96, 96)],
|
||||
"challenge": [(1, 64, 64), (1, 48, 48)],
|
||||
}
|
||||
|
||||
metadata = {}
|
||||
for dataset in data_splits:
|
||||
for split in data_splits[dataset]:
|
||||
fcount = 0
|
||||
(path / dataset / split).mkdir(parents=True)
|
||||
encs = enc_sizes[split.split("_")[-1]]
|
||||
recs = recon_sizes[split.split("_")[-1]]
|
||||
for i in range(len(encs)):
|
||||
fname = path / dataset / split / f"file{fcount}.h5"
|
||||
num_slices = rg.integers(2, max_num_slices)
|
||||
if "multicoil" in split:
|
||||
num_coils = rg.integers(2, max_num_coils)
|
||||
enc_size = (num_slices, num_coils, encs[i][-2], encs[i][-1]) # type: ignore
|
||||
recon_size = (num_slices, recs[i][-2], recs[i][-1])
|
||||
else:
|
||||
enc_size = (num_slices, encs[i][-2], encs[i][-1]) # type: ignore
|
||||
recon_size = (num_slices, recs[i][-2], recs[i][-1])
|
||||
|
||||
data = rg.normal(size=enc_size) + 1j * rg.normal(size=enc_size)
|
||||
|
||||
if split.split("_")[-1] in ("train", "val"):
|
||||
recon = np.absolute(rg.normal(size=recon_size)).astype(
|
||||
np.dtype("<f4")
|
||||
)
|
||||
else:
|
||||
mask = rg.integers(0, 2, size=recon_size[-1]).astype(bool)
|
||||
|
||||
with h5py.File(fname, "w") as hf:
|
||||
hf.create_dataset("kspace", data=data.astype(np.complex64))
|
||||
if split.split("_")[-1] in ("train", "val"):
|
||||
hf.attrs["max"] = recon.max()
|
||||
if "singlecoil" in split:
|
||||
hf.create_dataset("reconstruction_esc", data=recon)
|
||||
else:
|
||||
hf.create_dataset("reconstruction_rss", data=recon)
|
||||
else:
|
||||
hf.create_dataset("mask", data=mask)
|
||||
|
||||
enc_size = encs[i] # type: ignore
|
||||
|
||||
enc_limits_center = enc_size[1] // 2 + 1
|
||||
enc_limits_max = enc_size[1] - 2
|
||||
|
||||
padding_left = enc_size[1] // 2 - enc_limits_center
|
||||
padding_right = padding_left + enc_limits_max
|
||||
|
||||
metadata[str(fname)] = (
|
||||
{
|
||||
"padding_left": padding_left,
|
||||
"padding_right": padding_right,
|
||||
"encoding_size": enc_size,
|
||||
"recon_size": recon_size,
|
||||
},
|
||||
num_slices,
|
||||
)
|
||||
|
||||
fcount += 1
|
||||
|
||||
return metadata
|
||||
|
||||
|
||||
class FastMriRandomData(FastMriDataModule):
|
||||
|
@ -28,7 +128,7 @@ class FastMriRandomData(FastMriDataModule):
|
|||
if data_path.is_dir():
|
||||
shutil.rmtree(str(data_path))
|
||||
data_path.mkdir(exist_ok=False, parents=True)
|
||||
_, _, metadata = create_temp_data(data_path)
|
||||
metadata = create_temp_data(data_path)
|
||||
|
||||
def retrieve_metadata_mock(a: Any, fname: Any) -> Any:
|
||||
return metadata[str(fname)]
|
||||
|
|
|
@ -12,6 +12,7 @@ import param
|
|||
import pytest
|
||||
from azureml.core import ScriptRunConfig
|
||||
from azureml.train.hyperdrive.runconfig import HyperDriveConfig
|
||||
from health_azure import AzureRunInfo
|
||||
from pytorch_lightning import LightningModule
|
||||
|
||||
from InnerEye.Azure.azure_config import AzureConfig
|
||||
|
@ -24,10 +25,11 @@ from InnerEye.ML.model_config_base import ModelConfigBase
|
|||
from InnerEye.ML.run_ml import MLRunner
|
||||
from InnerEye.ML.runner import Runner
|
||||
from Tests.ML.configs.DummyModel import DummyModel
|
||||
from Tests.ML.configs.lightning_test_containers import (DummyContainerWithAzureDataset, DummyContainerWithHooks,
|
||||
DummyContainerWithModel, DummyContainerWithPlainLightning)
|
||||
from Tests.ML.configs.fastmri_random import FastMriOnRandomData
|
||||
from Tests.ML.configs.lightning_test_containers import (
|
||||
DummyContainerWithAzureDataset, DummyContainerWithHooks, DummyContainerWithModel, DummyContainerWithPlainLightning
|
||||
)
|
||||
from Tests.ML.util import default_runner
|
||||
from health_azure import AzureRunInfo
|
||||
|
||||
|
||||
def test_run_container_in_situ(test_output_dirs: OutputFolderForTests) -> None:
|
||||
|
@ -127,7 +129,6 @@ def test_create_fastmri_container() -> None:
|
|||
and if the submodule is created correctly.
|
||||
"""
|
||||
from InnerEye.ML.configs.other.fastmri_varnet import VarNetWithImageLogging
|
||||
from Tests.ML.configs.fastmri_random import FastMriOnRandomData
|
||||
FastMriOnRandomData()
|
||||
VarNetWithImageLogging()
|
||||
|
||||
|
@ -147,7 +148,6 @@ def test_run_fastmri_container(test_output_dirs: OutputFolderForTests) -> None:
|
|||
with mock.patch("sys.argv", args):
|
||||
loaded_config, run_info = runner.run()
|
||||
assert isinstance(run_info, AzureRunInfo)
|
||||
from Tests.ML.configs.fastmri_random import FastMriOnRandomData
|
||||
assert isinstance(runner.lightning_container, FastMriOnRandomData)
|
||||
|
||||
|
||||
|
|
|
@ -52,8 +52,6 @@ def test_copy_child_paths_to_folder(is_ensemble: bool,
|
|||
project_root = Path(__file__).parent.parent
|
||||
ml_runner = MLRunner(model_config=fake_model, azure_config=azure_config, project_root=project_root)
|
||||
model_folder = test_output_dirs.root_dir / "final"
|
||||
hi_ml_submodules = [p for p, _ in fixed_paths.get_hi_ml_submodule_relative_paths()]
|
||||
has_submodule = any(folder.is_dir() for folder in hi_ml_submodules)
|
||||
ml_runner.copy_child_paths_to_folder(model_folder=model_folder, checkpoint_paths=checkpoints_absolute)
|
||||
expected_files = [
|
||||
fixed_paths.ENVIRONMENT_YAML_FILE_NAME,
|
||||
|
@ -63,9 +61,7 @@ def test_copy_child_paths_to_folder(is_ensemble: bool,
|
|||
"InnerEye/Common/fixed_paths.py",
|
||||
"InnerEye/Common/common_util.py",
|
||||
]
|
||||
if has_submodule:
|
||||
expected_files.extend(["hi-ml/hi-ml/src/health_ml/__init__.py",
|
||||
"hi-ml/hi-ml-azure/src/health_azure/__init__.py"])
|
||||
|
||||
for r in checkpoints_relative:
|
||||
expected_files.append(f"{CHECKPOINT_FOLDER}/{r}")
|
||||
for expected_file in expected_files:
|
||||
|
|
|
@ -11,7 +11,7 @@ dependencies:
|
|||
- 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
|
||||
- certifi=2022.5.18.1=py38h06a4308_0
|
||||
- cudatoolkit=11.3.1=h2bc3f7f_2
|
||||
- ffmpeg=4.2.2=h20bf706_0
|
||||
- freetype=2.11.0=h70c0345_0
|
||||
|
@ -22,8 +22,8 @@ dependencies:
|
|||
- 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
|
||||
- ld_impl_linux-64=2.38=h1181459_1
|
||||
- libffi=3.3=he6710b0_2
|
||||
- libgcc-ng=11.2.0=h1234567_1
|
||||
- libgomp=11.2.0=h1234567_1
|
||||
- libidn2=2.3.2=h7f8727e_0
|
||||
|
@ -39,23 +39,23 @@ dependencies:
|
|||
- 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
|
||||
- mkl-service=2.4.0=py38h7f8727e_0
|
||||
- mkl_fft=1.3.1=py38hd3c417c_0
|
||||
- mkl_random=1.2.2=py38h51133e4_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
|
||||
- pip=20.1.1=py38_1
|
||||
- python=3.8.3
|
||||
- python-blosc=1.7.0=py38h7b6447c_0
|
||||
- pytorch=1.10.0=py3.8_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
|
||||
- readline=8.1.2=h7f8727e_1
|
||||
- setuptools=61.2.0=py38h06a4308_0
|
||||
- sqlite=3.38.3=hc218d9a_0
|
||||
- tk=8.6.12=h1ccaba5_0
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- torchvision=0.11.1=py38_cu113
|
||||
- typing_extensions=4.1.1=pyh06a4308_0
|
||||
- wheel=0.37.1=pyhd3eb1b0_0
|
||||
- x264=1!157.20191217=h7b6447c_0
|
||||
|
@ -73,7 +73,6 @@ dependencies:
|
|||
- 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.1
|
||||
|
@ -103,7 +102,6 @@ dependencies:
|
|||
- 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
|
||||
|
@ -124,7 +122,6 @@ dependencies:
|
|||
- databricks-cli==0.17.0
|
||||
- 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
|
||||
|
@ -133,6 +130,7 @@ dependencies:
|
|||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- fastmri==0.2.0
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
|
@ -148,6 +146,8 @@ dependencies:
|
|||
- grpcio==1.46.3
|
||||
- gunicorn==20.1.0
|
||||
- h5py==2.10.0
|
||||
- hi-ml==0.2.2
|
||||
- hi-ml-azure==0.2.2
|
||||
- humanize==4.2.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
|
@ -161,9 +161,8 @@ dependencies:
|
|||
- ipywidgets==7.7.0
|
||||
- isodate==0.6.1
|
||||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jinja2==3.0.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
|
@ -183,7 +182,6 @@ dependencies:
|
|||
- 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
|
||||
|
@ -202,7 +200,7 @@ dependencies:
|
|||
- nbformat==5.4.0
|
||||
- ndg-httpsclient==0.5.1
|
||||
- nest-asyncio==1.5.5
|
||||
- networkx==2.6.3
|
||||
- networkx==2.8.4
|
||||
- nibabel==4.0.1
|
||||
- notebook==6.4.12
|
||||
- numba==0.51.2
|
||||
|
@ -214,17 +212,14 @@ dependencies:
|
|||
- 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.2
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
- ptyprocess==0.7.0
|
||||
|
@ -237,12 +232,12 @@ dependencies:
|
|||
- 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
|
||||
- pysocks==1.7.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
|
@ -286,7 +281,7 @@ dependencies:
|
|||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tifffile==2022.5.4
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
|
@ -294,12 +289,9 @@ dependencies:
|
|||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.3.0
|
||||
- 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.3
|
||||
- werkzeug==2.1.2
|
||||
|
|
|
@ -6,7 +6,7 @@ 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
|
||||
- certifi=2022.5.18.1=py38haa95532_0
|
||||
- cudatoolkit=11.3.1=h59b6b97_2
|
||||
- freetype=2.10.4=hd328e21_0
|
||||
- intel-openmp=2021.4.0=haa95532_3556
|
||||
|
@ -17,48 +17,47 @@ dependencies:
|
|||
- 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
|
||||
- mkl-service=2.4.0=py38h2bbff1b_0
|
||||
- mkl_fft=1.3.1=py38h277e83a_0
|
||||
- mkl_random=1.2.2=py38hf11a4ad_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
|
||||
- pip=20.1.1=py38_1
|
||||
- python=3.8.3=he1778fa_2
|
||||
- python-blosc=1.7.0=py38he774522_0
|
||||
- pytorch=1.10.0=py3.8_cuda11.3_cudnn8_0
|
||||
- pytorch-mutex=1.0=cuda
|
||||
- setuptools=61.2.0=py37haa95532_0
|
||||
- setuptools=61.2.0=py38haa95532_0
|
||||
- sqlite=3.38.3=h2bbff1b_0
|
||||
- tk=8.6.11=h2bbff1b_1
|
||||
- torchvision=0.11.1=py37_cu113
|
||||
- tk=8.6.12=h2bbff1b_0
|
||||
- torchvision=0.11.1=py38_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
|
||||
- wincertstore=0.2=py38haa95532_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
|
||||
- absl-py==1.1.0
|
||||
- adal==1.2.7
|
||||
- aiohttp==3.8.1
|
||||
- aiosignal==1.2.0
|
||||
- alembic==1.7.7
|
||||
- alembic==1.8.0
|
||||
- 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-core==1.24.1
|
||||
- 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-core==1.3.1
|
||||
- azure-mgmt-datafactory==1.1.0
|
||||
- azure-mgmt-keyvault==9.3.0
|
||||
- azure-mgmt-resource==12.1.0
|
||||
|
@ -91,14 +90,14 @@ dependencies:
|
|||
- charset-normalizer==2.0.12
|
||||
- click==8.1.3
|
||||
- cloudpickle==1.6.0
|
||||
- colorama==0.4.4
|
||||
- colorama==0.4.5
|
||||
- commonmark==0.9.1
|
||||
- conda-merge==0.1.5
|
||||
- contextlib2==21.6.0
|
||||
- coverage==6.4
|
||||
- coverage==6.4.1
|
||||
- cryptography==3.3.2
|
||||
- cycler==0.11.0
|
||||
- databricks-cli==0.16.6
|
||||
- databricks-cli==0.17.0
|
||||
- dataclasses-json==0.5.2
|
||||
- debugpy==1.6.0
|
||||
- decorator==5.1.1
|
||||
|
@ -110,6 +109,7 @@ dependencies:
|
|||
- entrypoints==0.4
|
||||
- execnet==1.9.0
|
||||
- fastjsonschema==2.15.3
|
||||
- fastmri==0.2.0
|
||||
- flake8==3.8.3
|
||||
- flask==2.1.2
|
||||
- frozenlist==1.3.0
|
||||
|
@ -124,14 +124,16 @@ dependencies:
|
|||
- greenlet==1.1.2
|
||||
- grpcio==1.46.3
|
||||
- h5py==2.10.0
|
||||
- humanize==4.1.0
|
||||
- hi-ml==0.2.2
|
||||
- hi-ml-azure==0.2.2
|
||||
- humanize==4.2.0
|
||||
- idna==3.3
|
||||
- imageio==2.15.0
|
||||
- importlib-metadata==4.11.4
|
||||
- importlib-resources==5.7.1
|
||||
- importlib-resources==5.8.0
|
||||
- iniconfig==1.1.1
|
||||
- innereye-dicom-rt==1.0.3
|
||||
- ipykernel==6.13.0
|
||||
- ipykernel==6.15.0
|
||||
- ipython==7.31.1
|
||||
- ipython-genutils==0.2.0
|
||||
- ipywidgets==7.7.0
|
||||
|
@ -139,18 +141,18 @@ dependencies:
|
|||
- itsdangerous==2.1.2
|
||||
- jedi==0.18.1
|
||||
- jeepney==0.8.0
|
||||
- jinja2==3.1.2
|
||||
- jinja2==3.0.2
|
||||
- jmespath==0.10.0
|
||||
- joblib==0.16.0
|
||||
- jsonpickle==2.2.0
|
||||
- jsonschema==4.5.1
|
||||
- jsonschema==4.6.0
|
||||
- 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
|
||||
- kiwisolver==1.4.3
|
||||
- lightning-bolts==0.4.0
|
||||
- llvmlite==0.34.0
|
||||
- mako==1.2.0
|
||||
|
@ -166,21 +168,21 @@ dependencies:
|
|||
- mlflow-skinny==1.26.1
|
||||
- monai==0.6.0
|
||||
- more-itertools==8.13.0
|
||||
- msal==1.17.0
|
||||
- msal==1.18.0
|
||||
- msal-extensions==0.3.1
|
||||
- msrest==0.6.21
|
||||
- msrest==0.7.1
|
||||
- msrestazure==0.6.4
|
||||
- multidict==6.0.2
|
||||
- mypy==0.910
|
||||
- mypy-extensions==0.4.3
|
||||
- nbclient==0.6.3
|
||||
- nbclient==0.6.4
|
||||
- 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
|
||||
- networkx==2.8.4
|
||||
- nibabel==4.0.1
|
||||
- notebook==6.4.12
|
||||
- numba==0.51.2
|
||||
- numpy==1.19.1
|
||||
- oauthlib==3.2.0
|
||||
|
@ -198,7 +200,7 @@ dependencies:
|
|||
- pluggy==0.13.1
|
||||
- portalocker==2.4.0
|
||||
- prometheus-client==0.14.1
|
||||
- prometheus-flask-exporter==0.20.1
|
||||
- prometheus-flask-exporter==0.20.2
|
||||
- prompt-toolkit==3.0.29
|
||||
- protobuf==3.20.1
|
||||
- psutil==5.7.2
|
||||
|
@ -217,6 +219,7 @@ dependencies:
|
|||
- pyopenssl==20.0.1
|
||||
- pyparsing==3.0.9
|
||||
- pyrsistent==0.18.1
|
||||
- pysocks==1.7.1
|
||||
- pytest==6.0.1
|
||||
- pytest-cov==2.10.1
|
||||
- pytest-forked==1.3.0
|
||||
|
@ -228,11 +231,11 @@ dependencies:
|
|||
- pywin32==227
|
||||
- pywinpty==2.0.5
|
||||
- pyyaml==6.0
|
||||
- pyzmq==23.0.0
|
||||
- qtconsole==5.3.0
|
||||
- pyzmq==23.2.0
|
||||
- qtconsole==5.3.1
|
||||
- qtpy==2.1.0
|
||||
- querystring-parser==1.2.4
|
||||
- requests==2.27.1
|
||||
- requests==2.28.0
|
||||
- requests-oauthlib==1.3.1
|
||||
- rich==10.13.0
|
||||
- rpdb==0.1.6
|
||||
|
@ -250,7 +253,7 @@ dependencies:
|
|||
- six==1.15.0
|
||||
- smmap==5.0.0
|
||||
- soupsieve==2.3.2.post1
|
||||
- sqlalchemy==1.4.36
|
||||
- sqlalchemy==1.4.37
|
||||
- sqlparse==0.4.2
|
||||
- stopit==1.1.2
|
||||
- stringcase==1.2.0
|
||||
|
@ -262,7 +265,7 @@ dependencies:
|
|||
- terminado==0.15.0
|
||||
- textwrap3==0.9.2
|
||||
- threadpoolctl==3.1.0
|
||||
- tifffile==2021.11.2
|
||||
- tifffile==2022.5.4
|
||||
- tinycss2==1.1.1
|
||||
- toml==0.10.2
|
||||
- tomli==2.0.1
|
||||
|
@ -270,15 +273,14 @@ dependencies:
|
|||
- torchmetrics==0.6.0
|
||||
- tornado==6.1
|
||||
- tqdm==4.64.0
|
||||
- traitlets==5.2.1.post0
|
||||
- typed-ast==1.4.3
|
||||
- traitlets==5.3.0
|
||||
- typing-inspect==0.7.1
|
||||
- umap-learn==0.5.2
|
||||
- urllib3==1.26.7
|
||||
- waitress==2.1.1
|
||||
- waitress==2.1.2
|
||||
- wcwidth==0.2.5
|
||||
- webencodings==0.5.1
|
||||
- websocket-client==1.3.2
|
||||
- websocket-client==1.3.3
|
||||
- werkzeug==2.1.2
|
||||
- widgetsnbextension==3.6.0
|
||||
- wrapt==1.14.1
|
||||
|
|
1
fastMRI
1
fastMRI
|
@ -1 +0,0 @@
|
|||
Subproject commit 13560d2f198cc72f06e01675e9ecee509ce5639a
|
1
hi-ml
1
hi-ml
|
@ -1 +0,0 @@
|
|||
Subproject commit aff0f340b08c43c87e6841733767c860d0e0e63c
|
|
@ -6,7 +6,7 @@ channels:
|
|||
dependencies:
|
||||
- cudatoolkit=11.3
|
||||
- pip=20.1.1
|
||||
- python=3.7.3
|
||||
- python=3.8.3
|
||||
- pytorch=1.10.0
|
||||
- python-blosc=1.7.0
|
||||
- torchvision=0.11.1
|
||||
|
@ -22,10 +22,12 @@ dependencies:
|
|||
- cryptography==3.3.2
|
||||
- dataclasses-json==0.5.2
|
||||
- docker==4.3.1
|
||||
- fastmri==0.2.0
|
||||
- flake8==3.8.3
|
||||
- gitpython==3.1.7
|
||||
- gputil==1.4.0
|
||||
- h5py==2.10.0
|
||||
- hi-ml==0.2.2
|
||||
- ipython==7.31.1
|
||||
- imageio==2.15.0
|
||||
- InnerEye-DICOM-RT==1.0.3
|
||||
|
|
Загрузка…
Ссылка в новой задаче