diff --git a/.github/workflows/docs-ci.yaml b/.github/workflows/docs-ci.yaml new file mode 100644 index 000000000..9c008d6a1 --- /dev/null +++ b/.github/workflows/docs-ci.yaml @@ -0,0 +1,51 @@ +name: docs-ci + +on: + workflow_dispatch: + push: + branches: [ main ] + paths: + - 'docs/**.py' + pull_request: + branches: [ main ] + types: [opened, synchronize, reopened, closed] + paths: + - 'docs/**.py' + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: [3.8] + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Ubuntu packages + run: | + sudo apt-get update -y + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools==59.4.0 wheel + python -m pip install -r docs/requirements-doc.txt + - name: Lint with flake8 + run: | + flake8 docs + - name: Lint with black + run: | + black --check docs + - name: Lint with isort + run: | + isort -c docs + - name: Lint with codespell + run: | + codespell + - name: Run unittests + # python -m pytest -rxs docs + run: | + coverage run -m pytest -v docs && coverage report -m diff --git a/.github/workflows/docs-sched-rebuild.yaml b/.github/workflows/docs-sched-rebuild.yaml index 497f5649e..ded190de0 100644 --- a/.github/workflows/docs-sched-rebuild.yaml +++ b/.github/workflows/docs-sched-rebuild.yaml @@ -3,7 +3,7 @@ name: docs-sched-rebuild on: schedule: # * is a special character in YAML so you have to quote this string - - cron: "0 0 * * *" + - cron: "0 1 * * *" workflow_dispatch: jobs: diff --git a/.github/workflows/docs-smx-data.yaml b/.github/workflows/docs-smx-data.yaml new file mode 100644 index 000000000..b267b4537 --- /dev/null +++ b/.github/workflows/docs-smx-data.yaml @@ -0,0 +1,54 @@ +name: docs-smx-data + +on: + schedule: + # * is a special character in YAML so you have to quote this string + - cron: "0 0 * * *" + workflow_dispatch: + +jobs: + build: + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: [3.8] + os: [ubuntu-latest] + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install Ubuntu packages + run: | + sudo apt-get update -y + sudo apt-get clean autoclean + sudo apt-get autoremove --yes + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools==59.4.0 wheel + python -m pip install -r docs/requirements-doc.txt + - name: Maximize disk space + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/share/boost + - name: Get container data + run: | + python docs/extractor.py + - name: Initialize Git configuration + run: | + git config user.name docs-smx-bot + git config user.email do-not-send-@github.com + - name: Commit updates to data.json + run: | + x=$(git status --porcelain) + if grep -q "data.json" <<< "${x}"; then + git add . + git commit -m 'Updates from new containers' + git push + fi diff --git a/.gitignore b/.gitignore index b10e1085d..89caecbee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,9 @@ docs/build/ docs/source/examples docs/source/README.md +docs/source/generated/ + +.coverage + +__pycache__/ +*.py[cod] diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..157ebbae4 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,62 @@ +[MESSAGES CONTROL] +disable=fixme, + # docstrings aren't required (yet). + missing-function-docstring, + missing-module-docstring, + missing-class-docstring, + + # formatting checks that we're handling with black/isort + wrong-import-order, + wrong-import-position, + ungrouped-imports, + line-too-long, + superfluous-parens, + trailing-whitespace, + + # we'll probably never enable these checks + invalid-name, + import-error, + duplicate-code, + + # disable code-complexity checks for now + # TODO: should we configure the thresholds for these rather than just disable? + ; too-many-function-args, + ; too-many-instance-attributes, + ; too-many-locals, + ; too-many-branches, + ; too-many-nested-blocks, + ; too-many-statements, + ; too-many-arguments, + ; too-many-return-statements, + ; too-many-lines, + ; too-few-public-methods, + + # many of these checks would be great to include at some point, but would + # require some changes to our codebase + ; useless-return, + ; protected-access, + ; arguments-differ, + ; unused-argument, + ; unused-variable, + ; abstract-method, + ; no-name-in-module, + ; attribute-defined-outside-init, + ; redefined-outer-name, + ; import-outside-toplevel, + ; no-else-continue, + ; no-else-return, + ; no-else-raise, + ; no-member, + ; super-with-arguments, + ; unsupported-assignment-operation, + ; inconsistent-return-statements, + ; duplicate-string-formatting-argument, + ; len-as-condition, + ; cyclic-import, + + # producing false positives + ; unexpected-keyword-arg, + ; not-an-iterable, + ; unsubscriptable-object +[SIMILARITIES] +min-similarty-lines=20 \ No newline at end of file diff --git a/ci/versions.py b/ci/versions.py index 881a2d6b9..7ab53b998 100644 --- a/ci/versions.py +++ b/ci/versions.py @@ -13,6 +13,8 @@ # limitations under the License. # +# pylint: skip-file + import argparse import contextlib @@ -46,7 +48,7 @@ def get_pythonpkg_version(container, pkg): "bash -c 'pip list | grep " + pkg + "'", stderr=False ) return output[1].decode("utf-8").split()[1] - except: + except: # noqa return "N/A" @@ -56,7 +58,7 @@ def create_pr(repo, branch, filename, content, token, version): r.create_git_ref(ref="refs/heads/" + branch, sha=r.get_branch("main").commit.sha) f = r.get_contents(filename, ref=branch) r.update_file(f.path, "release " + version, content, branch=branch, sha=f.sha) - pr = r.create_pull( + pr = r.create_pull( # noqa title="Merlin Release " + version, body="", head=branch, base="main" ) diff --git a/docs/README.md b/docs/README.md index ebd0636cb..4bd9c8022 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,6 +25,12 @@ Perform the following steps to build the docs. These steps should run Sphinx in your shell and create HTML in the `build/html/` directory. +The build for Merlin is unique because the support matrix is generated during +the build. +The build reads the `docs/data.json` file and creates several RST snippet files +in `docs/source/generated`. +The `docs/data.json` file is updated by the `docs-smx-data` GitHub workflow. + ## Preview the Changes View the docs web page by opening the HTML in your browser. First, navigate to @@ -37,3 +43,37 @@ python -m http.server Afterward, open a web browser and access . Check that yours edits formatted correctly and read well. + +## Tests + +```shell +python -m pytest docs +``` +...or... + +```shell +coverage run -m pytest -v docs && coverage report -m +``` + +## Handy notes + +### Remove a field from the JSON + +In the following case, the `cuparse` key is a mistake and should have been +`cusparse`. The following command removes the mistake from the JSON: + +```shell +jq 'walk(if type == "object" then del(.cuparse) else . end)' < data.json > x +``` + +### View a container for a release + +```shell +jq '.["nvcr.io/nvidia/merlin/merlin-inference"]["22.03"]' < ../docs/source/data.json +``` + +### List the containers and releases + +```shell +jq '. | map_values(keys) ' < docs/source/data.json +``` diff --git a/docs/data.json b/docs/data.json new file mode 100644 index 000000000..825f19e80 --- /dev/null +++ b/docs/data.json @@ -0,0 +1,1166 @@ +{ + "nvcr.io/nvidia/merlin/merlin-inference": { + "21.09": { + "base_container": "Triton version 21.07", + "cublas": "11.5.2.43", + "cuda": "11.4.0.031", + "cudf": "21.08.02", + "cudnn": "8.2.2.26", + "cufft": "10.5.0.43", + "curand": "10.2.5.43", + "cusolver": "11.2.0.43", + "cusparse": "11.6.0.43", + "cutensor": "", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.7.0", + "openmpi": "4.1.1rc1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.9.1+cu102", + "release": "21.09", + "rmm": "0+unknown", + "size": "28.72 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.1.6+cuda11.3.1.005", + "tf": "Not applicable", + "transformers4rec": "0.1.1", + "triton": "2.12.0" + }, + "21.11": { + "base_container": "Triton version 21.10", + "cublas": "11.6.5.2", + "cuda": "11.4.3.001", + "cudf": "21.08.03", + "cudnn": "8.2.4.15", + "cufft": "10.5.2.100", + "curand": "10.2.5.120", + "cusolver": "11.2.0.120", + "cusparse": "11.6.0.120", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.7.1", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.10.0+cu102", + "release": "21.11", + "rmm": "21.08.02", + "size": "24.61 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.2", + "transformers4rec": "0.1.2", + "triton": "2.15.0" + }, + "21.12": { + "base_container": "Triton version 21.10", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "21.08.03", + "cudnn": "8.3.0.96", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.8.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.10.0+cu102", + "release": "21.12", + "rmm": "21.08.02", + "size": "27.26 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.2", + "transformers4rec": "0.1.3", + "triton": "2.16.0" + }, + "22.01": { + "base_container": "Triton version 21.12", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "21.10.00a+345.ge05bd4bf3c.dirty", + "cudnn": "8.3.1.22", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.3.2", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.9.0+1.g31f9350", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.10.1+cu102", + "release": "22.01", + "rmm": "21.10.00a+42.gae27a57", + "size": "25.93 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.1.8+cuda11.4.2.006", + "tf": "2.6.2", + "transformers4rec": "0.1.4", + "triton": "2.17.0" + }, + "22.02": { + "base_container": "Triton version 22.01", + "cublas": "11.8.1.74", + "cuda": "11.6.0.020", + "cudf": "21.12.02", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.10.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.10.2+cu102", + "release": "22.02", + "rmm": "21.12.00", + "size": "20.62 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.2.1+cuda11.4.2.006", + "tf": "2.8.0", + "transformers4rec": "0.1.4", + "triton": "2.18.0" + }, + "22.03": { + "base_container": "Triton version 22.02", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.02", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "v0.1.1+12.g53b1ffc", + "merlin.models": "Not applicable", + "merlin.systems": "0+untagged.9.gccd0e15", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.11.0+20.gafa0e43", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.03", + "rmm": "0+unknown", + "size": "9.19 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.6+4.ga153d6d", + "triton": "2.19.0" + }, + "22.04": { + "base_container": "Triton version 22.03", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "Not applicable", + "nvidia_tensorflow": "Not applicable", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.04", + "rmm": "21.12.0", + "size": "9.45 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.7", + "triton": "2.20.0" + } + }, + "nvcr.io/nvidia/merlin/merlin-pytorch-inference": { + "22.03": { + "base_container": "Triton version 22.02", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.02", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "v0.1.1+3.gee1d59d", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.11.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.03", + "rmm": "21.12.00", + "size": "9.72 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.6", + "triton": "2.19.0" + }, + "22.04": { + "base_container": "Triton version 22.03", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "Not applicable", + "nvidia_tensorflow": "Not applicable", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.04", + "rmm": "21.12.0", + "size": "9.82 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.7", + "triton": "2.20.0" + } + }, + "nvcr.io/nvidia/merlin/merlin-pytorch-training": { + "21.09": { + "base_container": "nvcr.io/nvidia/pytorch:21.07-py3", + "cublas": "11.5.2.43", + "cuda": "11.4.0.031", + "cudf": "21.08.03", + "cudnn": "8.2.2.26", + "cufft": "10.5.0.43", + "curand": "10.2.5.43", + "cusolver": "11.2.0.43", + "cusparse": "11.6.0.43", + "cutensor": "", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "21.07", + "nvidia_tensorflow": "", + "nvtabular": "0.7.0+1.g2aa56e5", + "openmpi": "4.1.1rc1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.9.1+cu102", + "release": "21.09", + "rmm": "0+unknown", + "size": "18.78 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.1.6+cuda11.3.1.005", + "tf": "Not applicable", + "transformers4rec": "0.1.1", + "triton": "Not applicable" + }, + "21.11": { + "base_container": "nvcr.io/nvidia/pytorch:21.10-py3", + "cublas": "11.6.5.2", + "cuda": "11.4.3.001", + "cudf": "21.08.03", + "cudnn": "8.2.4.15", + "cufft": "10.5.2.100", + "curand": "10.2.5.120", + "cusolver": "11.2.0.120", + "cusparse": "11.6.0.120", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "21.10", + "nvidia_tensorflow": "", + "nvtabular": "0.7.1", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.10.0a0+0aef44c", + "release": "21.11", + "rmm": "0+unknown", + "size": "14.31 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "Not applicable", + "transformers4rec": "0.1.2", + "triton": "Not applicable" + }, + "21.12": { + "base_container": "nvcr.io/nvidia/pytorch:21.11-py3", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "0+untagged.1.g0a00579", + "cudnn": "8.3.0.96", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "21.11", + "nvidia_tensorflow": "", + "nvtabular": "0.8.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.11.0a0+b6df043", + "release": "21.12", + "rmm": "0+untagged.1.gccd9647", + "size": "14.8 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "Not applicable", + "transformers4rec": "0.1.3", + "triton": "Not applicable" + }, + "22.01": { + "base_container": "nvcr.io/nvidia/pytorch:21.12-py3", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "0+untagged.1.ge05bd4b", + "cudnn": "8.3.1.22", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.3.2", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "21.12", + "nvidia_tensorflow": "", + "nvtabular": "0.9.0+1.g31f9350", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.11.0a0+b6df043", + "release": "22.01", + "rmm": "0+untagged.1.gae27a57", + "size": "15.2 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.1.8+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.4", + "triton": "Not applicable" + }, + "22.02": { + "base_container": "nvcr.io/nvidia/pytorch:22.01-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.0.020", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "22.01", + "nvidia_tensorflow": "", + "nvtabular": "0.10.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.11.0a0+bfe5ad2", + "release": "22.02", + "rmm": "21.12.00a+31.g0acbd51", + "size": "15.02 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.2.1+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.4", + "triton": "Not applicable" + }, + "22.03": { + "base_container": "nvcr.io/nvidia/pytorch:22.02-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "v0.1.1+3.gee1d59d", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "22.02", + "nvidia_tensorflow": "", + "nvtabular": "0.11.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "1.11.0a0+17540c5", + "release": "22.03", + "rmm": "21.12.00a+31.g0acbd51", + "size": "14.18 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.6", + "triton": "Not applicable" + }, + "22.04": { + "base_container": "nvcr.io/nvidia/pytorch:22.03-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0a0+309.gdad51a548e", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "22.03", + "nvidia_tensorflow": "Not applicable", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "1.12.0a0+2c916ef", + "release": "22.04", + "rmm": "22.2.0a0+37.gf2b1364", + "size": "14.34 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.7", + "triton": "Not applicable" + } + }, + "nvcr.io/nvidia/merlin/merlin-tensorflow-inference": { + "22.03": { + "base_container": "Triton version 22.02", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.02", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "v0.1.1+3.gee1d59d", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "", + "nvtabular": "0.11.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.03", + "rmm": "21.12.00", + "size": "9.2 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.6", + "triton": "2.19.0" + }, + "22.04": { + "base_container": "Triton version 22.03", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "Not applicable", + "nvidia_tensorflow": "Not applicable", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.04", + "rmm": "21.12.0", + "size": "9.43 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "Not applicable", + "transformers4rec": "0.1.7", + "triton": "2.20.0" + } + }, + "nvcr.io/nvidia/merlin/merlin-tensorflow-training": { + "21.09": { + "base_container": "nvcr.io/nvidia/tensorflow:21.07-tf2-py3", + "cublas": "11.5.2.43", + "cuda": "11.4.0.031", + "cudf": "21.08.02", + "cudnn": "8.2.2.26", + "cufft": "10.5.0.43", + "curand": "10.2.5.43", + "cusolver": "11.2.0.43", + "cusparse": "11.6.0.43", + "cutensor": "", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.07-tf2", + "nvtabular": "0.7.0", + "openmpi": "4.1.1rc1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.09", + "rmm": "0+unknown", + "size": "13.85 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.1.6+cuda11.3.1.005", + "tf": "2.5.0", + "transformers4rec": "0.1.1", + "triton": "Not applicable" + }, + "21.11": { + "base_container": "nvcr.io/nvidia/tensorflow:21.10-tf2-py3", + "cublas": "11.6.5.2", + "cuda": "11.4.3.001", + "cudf": "21.08.03", + "cudnn": "8.2.4.15", + "cufft": "10.5.2.100", + "curand": "10.2.5.120", + "cusolver": "11.2.0.120", + "cusparse": "11.6.0.120", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.10-tf2", + "nvtabular": "0.7.1", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.11", + "rmm": "0+unknown", + "size": "13.38 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.1", + "transformers4rec": "0.1.2", + "triton": "Not applicable" + }, + "21.12": { + "base_container": "nvcr.io/nvidia/tensorflow:21.11-tf2-py3", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "0+untagged.1.g0a00579", + "cudnn": "8.3.0.96", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.11-tf2", + "nvtabular": "0.8.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.12", + "rmm": "0+untagged.1.gccd9647", + "size": "13.05 GB", + "sm": "Not applicable", + "sparse_operation_kit": "1.1.0", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.0", + "transformers4rec": "0.1.3", + "triton": "Not applicable" + }, + "22.01": { + "base_container": "nvcr.io/nvidia/tensorflow:21.12-tf2-py3", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "0+untagged.1.ge05bd4b", + "cudnn": "8.3.1.22", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.3.2", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.12-tf2", + "nvtabular": "0.9.0+1.g31f9350", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.01", + "rmm": "0+untagged.1.gae27a57", + "size": "13.66 GB", + "sm": "Not applicable", + "sparse_operation_kit": "1.1.0", + "tensorrt": "8.2.1.8+cuda11.4.2.006", + "tf": "2.6.2", + "transformers4rec": "0.1.4", + "triton": "Not applicable" + }, + "22.02": { + "base_container": "nvcr.io/nvidia/tensorflow:22.01-tf2-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.0.020", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "22.01-tf2", + "nvtabular": "0.10.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.02", + "rmm": "21.12.00a+31.g0acbd51", + "size": "13.37 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.2.1+cuda11.4.2.006", + "tf": "2.7.0", + "transformers4rec": "0.1.4", + "triton": "Not applicable" + }, + "22.03": { + "base_container": "nvcr.io/nvidia/tensorflow:22.02-tf2-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "v0.1.1+3.gee1d59d", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "22.02-tf2", + "nvtabular": "0.11.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.03", + "rmm": "21.12.00a+31.g0acbd51", + "size": "12.68 GB", + "sm": "Not applicable", + "sparse_operation_kit": "1.1.2", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "2.7.0", + "transformers4rec": "0.1.6", + "triton": "Not applicable" + }, + "22.04": { + "base_container": "nvcr.io/nvidia/tensorflow:22.03-tf2-py3", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0a0+309.gdad51a548e", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "Not applicable", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "Not applicable", + "nvidia_tensorflow": "22.03-tf2", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.04", + "rmm": "22.2.0a0+37.gf2b1364", + "size": "13.34 GB", + "sm": "Not applicable", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "2.8.0+nv21.12", + "transformers4rec": "0.1.7", + "triton": "Not applicable" + } + }, + "nvcr.io/nvidia/merlin/merlin-training": { + "21.09": { + "base_container": "Not applicable", + "cublas": "11.5.2.43", + "cuda": "11.4.0.031", + "cudf": "21.08.02", + "cudnn": "8.2.2.26", + "cufft": "10.5.0.43", + "curand": "10.2.5.43", + "cusolver": "11.2.0.43", + "cusparse": "11.6.0.43", + "cutensor": "", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.2.0", + "hugectr2onnx": "3.2", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.07-tf2", + "nvtabular": "0.7.0", + "openmpi": "4.1.1rc1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.09", + "rmm": "0+unknown", + "size": "15.35 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.1.6+cuda11.3.1.005", + "tf": "2.5.0", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "21.11": { + "base_container": "Not applicable", + "cublas": "11.6.5.2", + "cuda": "11.4.3.001", + "cudf": "21.08.03", + "cudnn": "8.2.4.15", + "cufft": "10.5.2.100", + "curand": "10.2.5.120", + "cusolver": "11.2.0.120", + "cusparse": "11.6.0.120", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.2.1", + "hugectr2onnx": "3.2", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.10-tf2", + "nvtabular": "0.7.1", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.11", + "rmm": "0+unknown", + "size": "13.89 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.0", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "21.12": { + "base_container": "Not applicable", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "21.08.03", + "cudnn": "8.3.0.96", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.2.3", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.3.0", + "hugectr2onnx": "3.2", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.11-tf2", + "nvtabular": "0.8.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "21.12", + "rmm": "21.08.02", + "size": "15.19 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.0.3.4+cuda11.3.1.005", + "tf": "2.6.0", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "22.01": { + "base_container": "Not applicable", + "cublas": "11.7.3.1", + "cuda": "11.5.0.029", + "cudf": "0+untagged.1.ge05bd4b", + "cudnn": "8.3.1.22", + "cufft": "10.6.0.54", + "curand": "10.2.6.48", + "cusolver": "11.2.1.48", + "cusparse": "11.7.0.31", + "cutensor": "1.3.3.2", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.3.1", + "hugectr2onnx": "3.2", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "21.12-tf2", + "nvtabular": "0.9.0+1.g31f9350", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.01", + "rmm": "0+untagged.1.gae27a57", + "size": "15.18 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.1.8+cuda11.4.2.006", + "tf": "2.6.2", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "22.02": { + "base_container": "Not applicable", + "cublas": "11.8.1.74", + "cuda": "11.6.0.020", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.4.0", + "hugectr2onnx": "3.2", + "merlin.core": "Not applicable", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "22.01-tf2", + "nvtabular": "0.10.0", + "openmpi": "4.1.1", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.02", + "rmm": "21.12.00a+31.g0acbd51", + "size": "15.84 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.2.1+cuda11.4.2.006", + "tf": "2.7.0", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "22.03": { + "base_container": "Not applicable", + "cublas": "11.8.1.74", + "cuda": "11.6.0.021", + "cudf": "21.12.00a+293.g0930f712e6", + "cudnn": "8.3.2.44+cuda11.5", + "cufft": "10.7.0.55", + "curand": "10.2.9.55", + "cusolver": "11.3.2.55", + "cusparse": "11.7.1.55", + "cutensor": "1.4.0.6", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "3.4.0", + "hugectr2onnx": "3.2", + "merlin.core": "v0.1.1+3.gee1d59d", + "merlin.models": "Not applicable", + "merlin.systems": "Not applicable", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "", + "nvidia_tensorflow": "22.02-tf2", + "nvtabular": "0.11.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.3 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.03", + "rmm": "21.12.00a+31.g0acbd51", + "size": "14.32 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "2.7.0", + "transformers4rec": "Not applicable", + "triton": "Not applicable" + }, + "22.04": { + "base_container": "Not applicable", + "cublas": "11.8.1.74", + "cuda": "11.6.1.005", + "cudf": "22.2.0a0+309.gdad51a548e", + "cudnn": "8.3.3.40+cuda11.5", + "cufft": "10.7.1.112", + "curand": "10.2.9.55", + "cusolver": "11.3.3.112", + "cusparse": "11.7.2.112", + "cutensor": "1.5.0.1", + "dgx_system": "* DGX-1\n* DGX-2\n* DGX A100\n* DGX Station", + "gpu_model": "* `NVIDIA Ampere GPU Architecture `_\n* `Turing `_\n* `Volta `_\n* `Pascal `_", + "hugectr": "Not applicable", + "hugectr2onnx": "0.0.0", + "merlin.core": "0.2.0", + "merlin.models": "0.3.0", + "merlin.systems": "0.1.0", + "nvidia_driver": "NVIDIA Driver version 465.19.01\nor later is required. However,\nif you're running on Data Center\nGPUs (formerly Tesla) such as T4,\nyou can use any of the following\nNVIDIA Driver versions:\n\n* 418.40 (or later R418)\n* 440.33 (or later R440)\n* 450.51 (or later R450)\n* 460.27 (or later R460)\n\n**Note**: The CUDA Driver\nCompatibility Package does not\nsupport all drivers.", + "nvidia_pytorch": "Not applicable", + "nvidia_tensorflow": "22.03-tf2", + "nvtabular": "1.0.0", + "openmpi": "4.1.2rc4", + "os": "Ubuntu 20.04.4 LTS", + "python_major": "3", + "pytorch": "Not applicable", + "release": "22.04", + "rmm": "22.2.0a0+37.gf2b1364", + "size": "16.44 GB", + "sm": "60, 61, 70, 75, 80", + "sparse_operation_kit": "Not applicable", + "tensorrt": "8.2.3.0+cuda11.4.2.006", + "tf": "2.8.0+nv21.12", + "transformers4rec": "0.1.7", + "triton": "Not applicable" + } + } +} \ No newline at end of file diff --git a/docs/extractor.py b/docs/extractor.py new file mode 100644 index 000000000..5cb9397a2 --- /dev/null +++ b/docs/extractor.py @@ -0,0 +1,364 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2021, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Use a for-loop, to access +# multiple containers. The command-line argument +# is a release value, like "22.02". +# Between the release value and the container name, +# there is enough information to group the container +# information... +# +# { +# "merlin-training": { +# "22.02": { +# "cuda": "11.6" +# }, +# "22.01": { +# "cuda": "11.5" +# } +# } +# } +# +# After all the data is gathered, it should be possible +# to construct a multi-release table. +# "merlin-training" +# | | 22.02 | 22.01 | +# | ----- | ----- | ----- | +# | CUDA | 11.6 | 11.5 | + +import argparse +import contextlib +import json +import logging +import os +from collections import defaultdict +from datetime import date +from pathlib import Path + +import yaml +from mergedeep import merge + +import docker + +level = logging.DEBUG if os.environ.get("DEBUG") else logging.INFO +logging.basicConfig(level=level) +logger = logging.getLogger("extractor") + + +@contextlib.contextmanager +def managed_container(img): + client = docker.from_env() + container = None + try: + # runtime="nvidia", # the runtime is not installed on GH runners. + container = client.containers.run( + img, + command="bash", + detach=True, + ipc_mode="host", + tty=True, + ) + yield container + except docker.errors.ImageNotFound as nf: + yield nf + except Exception as e: # pylint: disable=broad-except + yield e + finally: + if container: + container.stop() + container.remove() + + +def get_yymm() -> str: + return date.today().strftime("%y.%m") + + +class SupportMatrixExtractor: + + contdata = {} + data: defaultdict(dict) + ERROR = "Not applicable" + container: docker.models.containers.Container + container_name: str + release: str + standard_snippets = ["dgx_system", "nvidia_driver", "gpu_model"] + + def __init__(self, name: str, release: str, datafile: str): + self.container_name = name + self.release = release + self.contdata = {} + self.data = {} + self.data = defaultdict(dict) + self.data[self.container_name][self.release] = self.contdata + self.datafile = datafile + + def use_container(self, container: docker.models.containers.Container): + self.container = container + + def get_from_envfile(self, path: str, lookup: str, key=None): + if key is None: + key = lookup + self.contdata[key] = self.ERROR + (err, output) = self.container.exec_run( + "bash -c 'source {0}; echo ${{{1}}}'".format(path, lookup) + ) + result = output.decode("utf-8") + if err != 1 and not result.isspace(): + self.contdata[key] = result.replace('"', "").strip() + else: + logger.info("Failed to get env var '%s' from file '%s'", lookup, path) + + def get_from_env(self, lookup: str, key=None): + if key is None: + key = lookup + self.contdata[key] = self.ERROR + (err, output) = self.container.exec_run( + "bash -c 'echo ${{{0}}}'".format(lookup) + ) + result = output.decode("utf-8") + if err != 1 and not result.isspace(): + self.contdata[key] = result.replace('"', "").strip() + else: + logger.info("Failed to get env var: '%s'", lookup) + + def get_from_pip(self, lookup: str, key=None): + """Retrieves the version of a Python package from Pip. This function avoids importing + the package which might not work on systems without a GPU. + + Returns `None` if the package isn't installed. + """ + if key is None: + key = lookup + self.contdata[key] = self.ERROR + (err, output) = self.container.exec_run( + "python -m pip show '{}'".format(lookup) + ) + if err != 0: + logger.info("Failed to get package version from pip: %s", lookup) + return + versions = [ + line.split()[-1] + for line in output.decode().split("\n") + if line.startswith("Version:") + ] + if len(versions) == 1: + self.contdata[key] = versions[0].strip() + else: + logger.info( + "Failed to extract version from pip output: %s", output.decode() + ) + + def get_from_image(self, lookup: str, key=None): + if key is None: + key = lookup + self.contdata[key] = self.ERROR + attrs = self.container.image.attrs + try: + self.contdata[key] = attrs[lookup] + except KeyError: + logger.info("Failed to get attr from image: '%s'", lookup) + if lookup == "Size": + self.contdata[key] = "{} GB".format( + round(attrs[lookup] / 1024 ** 3, 2) + ) # noqa + + def get_from_cmd(self, cmd: str, key: str): + self.contdata[key] = self.ERROR + (err, output) = self.container.exec_run("bash -c '{}'".format(cmd)) + if err != 1: + self.contdata[key] = output.decode("utf-8").strip() + # Let the hacks begin... + if key == "sm": + smlist = output.decode("utf-8").split() + self.contdata[key] = ", ".join(smlist) + else: + logger.info("Command '%s' failed: %s", cmd, output.decode()) + + def insert_snippet(self, key: str, snip: str): + self.contdata[key] = snip + + def to_json(self): + return json.dumps(self.data, sort_keys=True) + + def from_json(self): + if not os.path.exists(self.datafile): + return + + with open(self.datafile) as f: + _data = json.load(f) + if self.container_name not in _data: + _data[self.container_name] = {} + if self.release not in _data[self.container_name]: + _data[self.container_name][self.release] = {} + self.data = merge({}, _data, self.data) + self.data[self.container_name][self.release] = self.contdata + + def to_json_file(self): + with open(self.datafile, "w") as f: + json.dump(self.data, f, sort_keys=True, indent=2) + + +# pylint: disable=too-many-locals, too-many-statements +def main(args): + # Images information + ngc_base = "nvcr.io/nvidia/merlin/" + containers = [ + "merlin-training", + "merlin-tensorflow-training", + "merlin-pytorch-training", + "merlin-inference", + "merlin-tensorflow-inference", + "merlin-pytorch-inference", + ] + + scriptdir = Path(__file__).parent + + jsonfile = scriptdir / "data.json" + snippetsfile = scriptdir / "snippets.yaml" + version = args.version + + if args.file: + jsonfile = os.path.abspath(args.file) + if args.snippets: + snippetsfile = os.path.abspath(args.snippets) + if not version: + version = get_yymm() + + sniptext = {} + with open(snippetsfile) as f: + sniptext = yaml.safe_load(f) + for k in SupportMatrixExtractor.standard_snippets: + assert sniptext[k] + + # Iterate through the images and get information + for cont in containers: + img = ngc_base + cont + ":" + version + logger.info("Extracting information from: %s", img) + with managed_container(img) as container: + if isinstance(container, Exception): + logger.info("...image is not found.") + continue + + logger.info("...container is running.") + + xtr = SupportMatrixExtractor(ngc_base + cont, version, jsonfile) + xtr.use_container(container) + xtr.from_json() + + for k in xtr.standard_snippets: + xtr.insert_snippet(k, sniptext[k]) + xtr.insert_snippet("release", args.version) + + xtr.get_from_image("Size", "size") + xtr.get_from_envfile("/etc/os-release", "PRETTY_NAME", "os") + xtr.get_from_env("CUDA_VERSION", "cuda") + xtr.get_from_pip("rmm") + xtr.get_from_pip("cudf") + xtr.get_from_env("CUDNN_VERSION", "cudnn") + xtr.get_from_pip("nvtabular") + xtr.get_from_pip("transformers4rec") + xtr.get_from_pip("merlin.core") + xtr.get_from_pip("merlin.systems") + xtr.get_from_pip("merlin.models") + xtr.get_from_pip("hugectr2onnx") + xtr.get_from_pip("hugectr") + xtr.get_from_pip("sparse_operation_kit") + xtr.get_from_pip("tensorflow", "tf") + xtr.get_from_pip("torch", "pytorch") + xtr.get_from_env("CUBLAS_VERSION", "cublas") + xtr.get_from_env("CUFFT_VERSION", "cufft") + xtr.get_from_env("CURAND_VERSION", "curand") + xtr.get_from_env("CUSOLVER_VERSION", "cusolver") + xtr.get_from_env("CUSPARSE_VERSION", "cusparse") + xtr.get_from_env("CUTENSOR_VERSION", "cutensor") + xtr.get_from_env("NVIDIA_TENSORFLOW_VERSION", "nvidia_tensorflow") + xtr.get_from_env("NVIDIA_PYTORCH_VERSION", "nvidia_pytorch") + xtr.get_from_env("OPENMPI_VERSION", "openmpi") + xtr.get_from_env("TRT_VERSION", "tensorrt") + xtr.get_from_env("TRTOSS_VERSION", "base_container") + # xtr.get_from_cmd("cuobjdump /usr/local/hugectr/lib/libhuge_ctr_shared.so + # | grep arch | sed -e \'s/.*sm_//\' | sed -e \'H;${x;s/\\n/, /g;s/^, //;p};d\'", "sm") + # flake8: noqa + xtr.get_from_cmd( + "if [ ! -f /usr/local/hugectr/lib/libhuge_ctr_shared.so ]; then exit 1; fi; cuobjdump /usr/local/hugectr/lib/libhuge_ctr_shared.so | grep arch | sed -e 's/.*sm_//'", + "sm", + ) + xtr.get_from_cmd("cat /opt/tritonserver/TRITON_VERSION", "triton") + xtr.get_from_cmd( + 'python -c "import sys;print(sys.version_info[0]);"', "python_major" + ) + + # Some hacks for the base container image + if cont == "merlin-training": + xtr.insert_snippet("base_container", "Not applicable") + elif cont == "merlin-tensorflow-training": + tf2_img = xtr.contdata["nvidia_tensorflow"] + py_maj = xtr.contdata["python_major"] + xtr.insert_snippet( + "base_container", + "nvcr.io/nvidia/tensorflow:{}-py{}".format(tf2_img, py_maj), + ) + elif cont == "merlin-pytorch-training": + pt_img = xtr.contdata["nvidia_pytorch"] + py_maj = xtr.contdata["python_major"] + xtr.insert_snippet( + "base_container", + "nvcr.io/nvidia/pytorch:{}-py{}".format(pt_img, py_maj), + ) + else: + trtoss = xtr.contdata["base_container"] + xtr.insert_snippet("base_container", "Triton version {}".format(trtoss)) + + xtr.to_json_file() + + logger.info(xtr.contdata) + + +def parse_args(): + """ + Use the versions script setting Merlin version to explore + python extractor.py -v 22.03 + """ + parser = argparse.ArgumentParser(description=("Container Extraction Tool")) + # Containers version + parser.add_argument( + "-v", + "--version", + type=str, + help="Version in YY.MM format", + ) + + parser.add_argument( + "-f", + "--file", + type=str, + help="JSON data file", + ) + + parser.add_argument( + "-s", + "--snippets", + type=str, + help="YAML snippets file", + ) + + args = parser.parse_args() + return args + + +if __name__ == "__main__": + main(parse_args()) diff --git a/docs/fixtures/data.json b/docs/fixtures/data.json new file mode 100644 index 000000000..7e1909f4a --- /dev/null +++ b/docs/fixtures/data.json @@ -0,0 +1,10 @@ +{ + "first": { + "one": "1", + "two": "2" + }, + "second": { + "one": "1", + "three": "3" + } +} diff --git a/docs/fixtures/sample.json b/docs/fixtures/sample.json new file mode 100644 index 000000000..247d90d71 --- /dev/null +++ b/docs/fixtures/sample.json @@ -0,0 +1,22 @@ +{ + "merlin-training": { + "22.02": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + }, + "22.01": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + } + }, + "merlin-tensorflow-training": { + "22.02": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + }, + "22.01": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + } + } +} diff --git a/docs/fixtures/sample_after.json b/docs/fixtures/sample_after.json new file mode 100644 index 000000000..17fbac9e1 --- /dev/null +++ b/docs/fixtures/sample_after.json @@ -0,0 +1,27 @@ +{ + "merlin-training": { + "22.02": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + }, + "22.01": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + } + }, + "merlin-tensorflow-training": { + "22.02": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + }, + "22.01": { + "cublas": "11.8.1.74", + "cuda": "11.6.0.021" + } + }, + "x": { + "22.02": { + "pip": "22.0.4" + } + } +} diff --git a/docs/requirements-doc.txt b/docs/requirements-doc.txt index 9b65a8ccc..16a7014fa 100644 --- a/docs/requirements-doc.txt +++ b/docs/requirements-doc.txt @@ -8,13 +8,14 @@ sphinx_rtd_theme sphinx_markdown_tables recommonmark sphinx-multiversion@git+https://github.com/mikemckiernan/sphinx-multiversion.git@v0.3.0 -sphinxcontrib-copydirs@git+https://github.com/mikemckiernan/sphinxcontrib-copydirs.git@v0.3.1 +sphinxcontrib-copydirs@git+https://github.com/mikemckiernan/sphinxcontrib-copydirs.git@v0.3.3 sphinx-external-toc==0.2.4 myst-nb==0.13.2 linkify-it-py==1.0.3 # smx -mergedeep==1.3.4 +mergedeep<1.4 +docker<5.1 # packages necessary to run tests and push PRs # assumes requirements for nvtabular logic are already installed diff --git a/docs/smx2rst.py b/docs/smx2rst.py new file mode 100644 index 000000000..1190cb36e --- /dev/null +++ b/docs/smx2rst.py @@ -0,0 +1,317 @@ +#!/usr/bin/env python3 + +# Read the data.json file. +# Create an RST file for each container. +# (Each RST file can be literalincluded into a file with headings and body text.) +# +# ========== ============= ============= +# 22.03 22.02 +# ========== ============= ============= +# DGX +# ---------------------------------------- +# DGX System * DGX-1 * DGX-1 +# * DGX-2 * DGX-2 +# * DGX A100 * DGX A100 +# * DGX Station * DGX Station +# ========== ============= ============= +# +# Or, a list table +# +# + +import argparse +import json +import logging +import os +import re +import sys +import typing +from pathlib import Path + +import yaml +from mergedeep import merge + +level = logging.DEBUG if os.environ.get("DEBUG") else logging.INFO +logging.basicConfig(level=level) +logger = logging.getLogger("smx2rst") + + +class Smx2Rst: + + data_json_path: str + data = {} + table_config = {} + release_pattern = re.compile(r"(\d{2})\.(\d{2})") # YY.MM + + def __init__(self, json_file: str): + self.data_json_path = os.path.abspath(json_file) + if not os.path.exists(self.data_json_path) or not os.path.isfile( + self.data_json_path + ): + logger.info("File is not found or is not a file: %s", self.data_json_path) + sys.exit(1) + + def read_table_config(self, path: str): + yaml_conf = os.path.abspath(path) + logger.info("Opening YAML config file: %s", yaml_conf) + with open(yaml_conf) as f: + documents = yaml.safe_load_all(f) + for conf in documents: + self.table_config = merge({}, conf, self.table_config) + + def from_json(self): + """Read the data.json file that was created with extractor.py. + + The JSON file has a key for each container name and subordinate + keys for each release. Within each release dictionary, the JSON + file has a key and value pair for the information to show + in the support matrix table. + """ + logger.info("Opening JSON file: %s", self.data_json_path) + with open(self.data_json_path) as f: + self.data = json.load(f) + + def to_rst(self, path: str): + """Write the RST files that have the support matrix tables for + each container. + + The implementation is to iterate over the containers from + the JSON file and create one file for each container. + + Parameters + ---------- + path : str + The output path for the RST table snippets. + The directory is created if it does not exist. + """ + + outdir = Path(path) + if not outdir.exists(): + logger.info("Creating output directory: %s", str(outdir)) + outdir.mkdir(parents=True, exist_ok=True) + logger.info(" ...done.") + + for container in self.data.keys(): + years = [ + self.release_pattern.search(x).group(1) + for x in self.data[container].keys() + ] + years = sorted(set(years), reverse=True) + + fname = container.replace("/", "-") + outpath = outdir / (fname + ".rst") + logger.info("Creating RST table snippet: %s", str(outpath)) + with open(outpath, "w") as f: + for year in years: + table = self.table_as_str(container, year) + for line in table: + f.write(line) + logger.info(" ...done.") + + # Though I agree with pylint that this needs a refactor...not today. + # pylint: disable=too-many-locals, too-many-branches, too-many-statements + def table_as_str(self, container: str, rel_prefix: str) -> typing.List[str]: + """Return the support matrix table for the specified container + in RST simple table form. + """ + + # This is a two-pass implementation. The first pass iterates + # over the data and collects the maximum dimensions for the table: + # - number of columns, keeping in mind there is a stub column with row "headings" + # - for each column, the maximum string length, all rows are padded with spaces to + # this length + # - within each row, the maximum number of lines--specifically for bulleted lists + # + self.set_table_dims(container, rel_prefix) + to_ret = [] + + # Make the stub row headings. + fields = self.table_config[container] + colwidth = fields["maxwidth"] + to_ret.append("=" * colwidth + " ") + to_ret.append("Container Release".ljust(colwidth) + " ") + to_ret.append("=" * colwidth + " ") + + for k, v in fields.items(): + if k == "maxwidth": + continue + # Print the stub row heading. + bold_stub = "**{}**".format(k) + to_ret.append(bold_stub.ljust(colwidth) + " ") + + # If this row has multiple lines, add the blank-padded lines. + stub_line_count = k.count("\n") + for _ in range(v["maxlines"] - stub_line_count): + to_ret.append(" " * colwidth + " ") + + if "span" in v.keys() and v["span"] is True: + to_ret.append("-" * colwidth + "--") + + to_ret.append("=" * colwidth + " ") + # End stub row headings. + + # Print a column for each release. + year_data = { + k: v for k, v in self.data[container].items() if k.startswith(rel_prefix) + } + for idx, release in enumerate(sorted(year_data, reverse=True)): + data = year_data.get(release) + colwidth = data["maxwidth"] + relhead = "Release " + release + + # Print the release, this is not part of the fields dictionary. + to_ret[0] += "=" * colwidth + " " + to_ret[1] += relhead.ljust(colwidth) + " " + to_ret[2] += "=" * colwidth + " " + + line_no = 3 + for k, v in fields.items(): + if k == "maxwidth": + continue + + if "field" in v.keys(): + val = data[v["field"]] + for line in val.split("\n"): + to_ret[line_no] += line.ljust(colwidth) + if len(year_data) - 1 == idx: + to_ret[line_no] += "\n" + else: + to_ret[line_no] += " " + line_no += 1 + + for _ in range(v["maxlines"] - val.count("\n")): + to_ret[line_no] += " " * colwidth + if len(year_data) - 1 == idx: + to_ret[line_no] += "\n" + else: + to_ret[line_no] += " " + line_no += 1 + + if "span" in v.keys(): + to_ret[line_no] += " " * colwidth + line_no += 1 + to_ret[line_no] += "-" * colwidth + line_no += 1 + + # If this isn't the last column, add two spaces + # or dashes. + if len(year_data) - 1 != idx: + to_ret[line_no - 2] += " " + to_ret[line_no - 1] += "--" + + to_ret[line_no] += "=" * colwidth + " " + + for idx, line in enumerate(to_ret): + to_ret[idx] = " " + line + "\n" + + table_heading = rel_prefix + ".xx Container Images" + + # In reverse order + to_ret.insert(0, "\n") + to_ret.insert(0, " :align: left\n") + to_ret.insert(0, ".. table::\n") + to_ret.insert(0, "\n") + to_ret.insert(0, "~" * len(table_heading) + "\n") + to_ret.insert(0, table_heading + "\n") + to_ret.insert(0, "\n") + + # Final blank line + to_ret.append("\n") + + return to_ret + + # Right now, the foll code can indicate the number of rows. (But that's not + # super helpful because I do not know the max number of lines in the multi-line + # fields like NVIDIA Driver.) + # The lone useful information is the length of the longes stub heading. + # This isn't general, but is a general problem. I need to know the maximum + # number of lines in each row--across releases of the container--and the longest string + # in each column. + # + # The stub column is 26 chars wide for "Container Operating System" + # I didn't calculate it, but each row is one line. + # For starters, get the max column lengths. The key to max lines in a row is count("\n"). + # + # For each release (shown in single column), we need the widest string + # and a list of newline counts. + def set_table_dims(self, container: str, rel_prefix: str): + # The first column shows the stub headings, "Release" is not included in `fields`. + # The release value, like 22.03, is always a single line. + fields = self.table_config[container] + stubs = list(fields.keys()) + stub_maxwidth = len(max(["Release"] + stubs, key=len)) + + # Seems unlikely that the row stub "heading" has the most lines, but possible. + for field in fields.keys(): + if field == "maxwidth": + continue + fields[field]["maxlines"] = field.count("\n") + # components = { k: v for k, v in fields.items() if not "span" in v.keys() } + # Filter decorative span rows. + + releases = [x for x in self.data[container] if x.startswith(rel_prefix)] + # releases = list(self.data[container]) + for release in releases: + # Find the longest string that we'll put in a column for this release. + maxwidth = 0 + for k, v in fields.items(): + if k == "maxwidth" or "span" in v.keys(): + continue + val = self.data[container][release][v["field"]] + line_len = max(len(x) for x in val.split("\n")) + line_count = val.count("\n") + maxwidth = max(maxwidth, line_len) + v["maxlines"] = max(v["maxlines"], line_count) + + self.data[container][release]["maxwidth"] = maxwidth + fields["maxwidth"] = stub_maxwidth + len("**") + len("**") + + +def main(args): + file = args.file + config = args.config + outdir = args.dir + + if not file: + file = Path(__file__).parent / "data.json" + if not config: + config = Path(__file__).parent / "table_config.yaml" + if not outdir: + outdir = Path(__file__).parent / "source" / "generated" + + smx2rst = Smx2Rst(file) + smx2rst.read_table_config(config) + smx2rst.from_json() + smx2rst.to_rst(outdir) + + +def parse_args(): + """ + python smx2rst.py -f data.json + """ + parser = argparse.ArgumentParser(description=("Merlin Support Matrix Tool")) + + parser.add_argument( + "-f", + "--file", + type=str, + help="JSON data file", + ) + + parser.add_argument( + "-c", + "--config", + type=str, + help="YAML configuration file", + ) + + parser.add_argument( + "-d", "--dir", type=str, help="Output directory for RST table snippets" + ) + + args = parser.parse_args() + return args + + +if __name__ == "__main__": + main(parse_args()) diff --git a/docs/snippets.yaml b/docs/snippets.yaml new file mode 100644 index 000000000..53ccfccfb --- /dev/null +++ b/docs/snippets.yaml @@ -0,0 +1,29 @@ +dgx_system: |- + * DGX-1 + * DGX-2 + * DGX A100 + * DGX Station + +nvidia_driver: |- + NVIDIA Driver version 465.19.01 + or later is required. However, + if you're running on Data Center + GPUs (formerly Tesla) such as T4, + you can use any of the following + NVIDIA Driver versions: + + * 418.40 (or later R418) + * 440.33 (or later R440) + * 450.51 (or later R450) + * 460.27 (or later R460) + + **Note**: The CUDA Driver + Compatibility Package does not + support all drivers. + +gpu_model: |- + * `NVIDIA Ampere GPU Architecture `_ + * `Turing `_ + * `Volta `_ + * `Pascal `_ + diff --git a/docs/source/conf.py b/docs/source/conf.py index 7412cb04d..919d9f2cf 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,6 +1,7 @@ # Configuration file for the Sphinx documentation builder. import os import subprocess +import sys from natsort import natsorted @@ -11,7 +12,7 @@ # -- Project information ----------------------------------------------------- project = "Merlin" -copyright = "2022, NVIDIA" +copyright = "2022, NVIDIA" # pylint: disable=redefined-builtin author = "NVIDIA" # -- General configuration --------------------------------------------------- @@ -61,9 +62,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = [ - "generated", -] +exclude_patterns = [] # -- Options for HTML output ------------------------------------------------- @@ -121,3 +120,9 @@ copydirs_file_rename = { "README.md": "index.md", } + +# Generate the support matrix tables. +proc = subprocess.run(["python", "docs/smx2rst.py"], cwd=repodir, check=True) +if proc.returncode != 0: + print("Failed to generate support matrix table snippets.", file=sys.stderr) + sys.exit(1) diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-inference.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-inference.rst deleted file mode 100644 index f65e10ada..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-inference.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 Release 22.02 Release 22.01 Release 21.12 Release 21.11 Release 21.09 - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - **DGX** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 - - * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **Base Container** Triton version 22.03 Triton version 22.02 Triton version 22.01 Triton version 21.12 Triton version 21.10 Triton version 21.10 Triton version 21.07 - - **CUDA** 11.6.1.005 11.6.0.021 11.6.0.020 11.5.0.029 11.5.0.029 11.4.3.001 11.4.0.031 - - **RMM** 0+unknown 0+unknown 21.12.00 21.10.00a+42.gae27a57 21.08.02 21.08.02 0+unknown - - **cuDF** 22.02.00 21.12.02 21.12.02 21.10.00a+345.ge05bd4bf3c.dirty 21.08.03 21.08.03 21.08.02 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 8.3.2.44+cuda11.5 8.3.1.22 8.3.0.96 8.2.4.15 8.2.2.26 - - **Merlin Core** v0.2.0 v0.1.1+12.g53b1ffc Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Models** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Systems** v0.1.0 0+untagged.9.gccd0e15 Not applicable Not applicable Not applicable Not applicable Not applicable - - **NVTabular** 1.0.0 0.11.0+20.gafa0e43 0.10.0 0.9.0+1.g31f9350 0.8.0 0.7.1 0.7.0 - - **Transformers4Rec** 0.1.7 0.1.6+4.ga153d6d 0.1.4 0.1.4 0.1.3 0.1.2 0.1.1 - - **HugeCTR** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **SM** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **Triton Inference Server** 2.20.0 2.19.0 2.18.0 2.17.0 2.16.0 2.15.0 2.12.0 - - **Size** 9.45 GB 9.19 GB 20.62 GB 25.93 GB 27.26 GB 24.61 GB 28.72 GB - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-inference.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-inference.rst deleted file mode 100644 index a333ff5b0..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-inference.rst +++ /dev/null @@ -1,94 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 - ============================== ================================================================================= ================================================================================= - **DGX** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 - - * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS - - **Base Container** Triton version 22.03 Triton version 22.02 - - **CUDA** 11.6.1.005 11.6.0.021 - - **RMM** 22.02.00 21.12.00 - - **cuDF** 22.02.00 21.12.02 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 - - **Merlin Core** v0.2.0 v0.1.1+3.gee1d59d - - **Merlin Models** Not applicable Not applicable - - **Merlin Systems** v0.1.0 Not applicable - - **NVTabular** 1.0.0 0.11.0 - - **Transformers4Rec** 0.1.7 0.1.6 - - **HugeCTR** Not applicable Not applicable - - **SM** Not applicable Not applicable - - **PyTorch** Not applicable Not applicable - - **Triton Inference Server** 2.20.0 2.19.0 - - **Size** 9.82 GB 9.72 GB - - ============================== ================================================================================= ================================================================================= - diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-training.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-training.rst deleted file mode 100644 index 45df498b0..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-pytorch-training.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 Release 22.02 Release 22.01 Release 21.12 Release 21.11 Release 21.09 - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - **DGX** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 - - * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **Base Container** nvcr.io/nvidia/pytorch:22.03-py3 nvcr.io/nvidia/pytorch:22.02-py3 nvcr.io/nvidia/pytorch:22.01-py3 nvcr.io/nvidia/pytorch:21.12-py3 nvcr.io/nvidia/pytorch:21.11-py3 nvcr.io/nvidia/pytorch:21.10-py3 nvcr.io/nvidia/pytorch:21.07-py3 - - **CUDA** 11.6.1.005 11.6.0.021 11.6.0.020 11.5.0.029 11.5.0.029 11.4.3.001 11.4.0.031 - - **RMM** 22.02.00a+37.gf2b1364 21.12.00a+31.g0acbd51 21.12.00a+31.g0acbd51 0+untagged.1.gae27a57 0+untagged.1.gccd9647 0+unknown 0+unknown - - **cuDF** 22.02.00a+309.gdad51a548e 21.12.00a+293.g0930f712e6 21.12.00a+293.g0930f712e6 0+untagged.1.ge05bd4b 0+untagged.1.g0a00579 21.08.03 21.08.03 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 8.3.2.44+cuda11.5 8.3.1.22 8.3.0.96 8.2.4.15 8.2.2.26 - - **Merlin Core** v0.2.0 v0.1.1+3.gee1d59d Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Models** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Systems** v0.1.0 Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **NVTabular** 1.0.0 0.11.0 0.10.0 0.9.0+1.g31f9350 0.8.0 0.7.1 0.7.0+1.g2aa56e5 - - **Transformers4Rec** 0.1.7 0.1.6 0.1.4 0.1.4 0.1.3 0.1.2 0.1.1 - - **HugeCTR** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **SM** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **PyTorch** 1.12.0a0+2c916ef 1.11.0a0+17540c5 1.11.0a0+bfe5ad2 1.11.0a0+b6df043 1.11.0a0+b6df043 1.10.0a0+0aef44c 1.9.1+cu102 - - **Size** 14.34 GB 14.18 GB 15.02 GB 15.2 GB 14.8 GB 14.31 GB 18.78 GB - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-inference.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-inference.rst deleted file mode 100644 index cd717a9b1..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-inference.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 - ============================== ================================================================================= ================================================================================= - **DGX** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 - - * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS - - **Base Container** Triton version 22.03 Triton version 22.02 - - **CUDA** 11.6.1.005 11.6.0.021 - - **RMM** 22.02.00 21.12.00 - - **cuDF** 22.02.00 21.12.02 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 - - **Merlin Core** v0.2.0 v0.1.1+3.gee1d59d - - **Merlin Models** Not applicable Not applicable - - **Merlin Systems** v0.1.0 Not applicable - - **NVTabular** 1.0.0 0.11.0 - - **Transformers4Rec** 0.1.7 0.1.6 - - **HugeCTR** Not applicable Not applicable - - **SM** Not applicable Not applicable - - **Triton Inference Server** 2.20.0 2.19.0 - - **Size** 9.43 GB 9.2 GB - - ============================== ================================================================================= ================================================================================= - diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-training.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-training.rst deleted file mode 100644 index f8a772df2..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-tensorflow-training.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 Release 22.02 Release 22.01 Release 21.12 Release 21.11 Release 21.09 - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - **DGX** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 - - * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **Base Container** nvcr.io/nvidia/tensorflow:22.03-tf2-py3 nvcr.io/nvidia/tensorflow:22.02-tf2-py3 nvcr.io/nvidia/tensorflow:22.01-tf2-py3 nvcr.io/nvidia/tensorflow:21.12-tf2-py3 nvcr.io/nvidia/tensorflow:21.11-tf2-py3 nvcr.io/nvidia/tensorflow:21.10-tf2-py3 nvcr.io/nvidia/tensorflow:21.07-tf2-py3 - - **CUDA** 11.6.1.005 11.6.0.021 11.6.0.020 11.5.0.029 11.5.0.029 11.4.3.001 11.4.0.031 - - **RMM** 22.02.00a+37.gf2b1364 21.12.00a+31.g0acbd51 21.12.00a+31.g0acbd51 0+untagged.1.gae27a57 0+untagged.1.gccd9647 0+unknown 0+unknown - - **cuDF** 22.02.00a+309.gdad51a548e 21.12.00a+293.g0930f712e6 21.12.00a+293.g0930f712e6 0+untagged.1.ge05bd4b 0+untagged.1.g0a00579 21.08.03 21.08.02 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 8.3.2.44+cuda11.5 8.3.1.22 8.3.0.96 8.2.4.15 8.2.2.26 - - **Merlin Core** v0.2.0 v0.1.1+3.gee1d59d Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Models** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Systems** v0.1.0 Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **NVTabular** 1.0.0 0.11.0 0.10.0 0.9.0+1.g31f9350 0.8.0 0.7.1 0.7.0 - - **Transformers4Rec** 0.1.7 0.1.6 0.1.4 0.1.4 0.1.3 0.1.2 0.1.1 - - **HugeCTR** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **SM** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **TensorFlow** 2.8.0 2.7.0 2.7.0 2.6.2 2.6.0 2.6.1 2.5.0 - - **Size** 13.34 GB 12.68 GB 13.37 GB 13.66 GB 13.05 GB 13.38 GB 13.85 GB - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - diff --git a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-training.rst b/docs/source/generated/nvcr.io-nvidia-merlin-merlin-training.rst deleted file mode 100644 index af9914dc0..000000000 --- a/docs/source/generated/nvcr.io-nvidia-merlin-merlin-training.rst +++ /dev/null @@ -1,90 +0,0 @@ -.. table:: - :align: left - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - Container Release Release 22.04 Release 22.03 Release 22.02 Release 22.01 Release 21.12 Release 21.11 Release 21.09 - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - **DGX** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **DGX System** * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 * DGX-1 - - * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 * DGX-2 - - * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 * DGX A100 - - * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station * DGX Station - - **Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **NVIDIA Certified Systems** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **NVIDIA Driver** NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 NVIDIA Driver version 465.19.01 - - or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, or later is required. However, - - if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center if you're running on Data Center - - GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, GPUs (formerly Tesla) such as T4, - - you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following you can use any of the following - - NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: NVIDIA Driver versions: - - - - * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) * 418.40 (or later R418) - - * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) * 440.33 (or later R440) - - * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) * 450.51 (or later R450) - - * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) * 460.27 (or later R460) - - - - **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver **Note**: The CUDA Driver - - Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not Compatibility Package does not - - support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. support all drivers. - - **GPU Model** * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ * `NVIDIA Ampere GPU Architecture `_ - - * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ * `Turing `_ - - * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ * `Volta `_ - - * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ * `Pascal `_ - - **Base Container Image** - ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - **Container Operating System** Ubuntu 20.04.4 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS Ubuntu 20.04.3 LTS - - **Base Container** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **CUDA** 11.6.1.005 11.6.0.021 11.6.0.020 11.5.0.029 11.5.0.029 11.4.3.001 11.4.0.031 - - **RMM** 22.02.00a+37.gf2b1364 21.12.00a+31.g0acbd51 21.12.00a+31.g0acbd51 0+untagged.1.gae27a57 21.08.02 0+unknown 0+unknown - - **cuDF** 22.02.00a+309.gdad51a548e 21.12.00a+293.g0930f712e6 21.12.00a+293.g0930f712e6 0+untagged.1.ge05bd4b 21.08.03 21.08.03 21.08.02 - - **cuDNN** 8.3.3.40+cuda11.5 8.3.2.44+cuda11.5 8.3.2.44+cuda11.5 8.3.1.22 8.3.0.96 8.2.4.15 8.2.2.26 - - **Merlin Core** v0.2.0 v0.1.1+3.gee1d59d Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Models** Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **Merlin Systems** v0.1.0 Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **NVTabular** 1.0.0 0.11.0 0.10.0 0.9.0+1.g31f9350 0.8.0 0.7.1 0.7.0 - - **Transformers4Rec** 0.1.7 Not applicable Not applicable Not applicable Not applicable Not applicable Not applicable - - **HugeCTR** 3.5.0 3.4.0 3.4.0 3.3.1 3.3.0 3.2.1 3.2.0 - - **SM** 60, 61, 70, 75, 80 60, 61, 70, 75, 80 60, 61, 70, 75, 80 60, 61, 70, 75, 80 60, 61, 70, 75, 80 60, 61, 70, 75, 80 60, 61, 70, 75, 80 - - **Size** 16.44 GB 14.32 GB 15.84 GB 15.18 GB 15.19 GB 13.89 GB 15.35 GB - - ============================== ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= ================================================================================= - diff --git a/docs/source/support_matrix/index.rst b/docs/source/support_matrix/index.rst index bd5b2d89d..613728fbc 100644 --- a/docs/source/support_matrix/index.rst +++ b/docs/source/support_matrix/index.rst @@ -3,3 +3,12 @@ Merlin Support Matrix The following pages provide the software and model versions that Merlin supports for each container. +.. toctree:: + + support_matrix_merlin_training + support_matrix_merlin_tensorflow_training + support_matrix_merlin_pytorch_training + support_matrix_merlin_inference + support_matrix_merlin_tensorflow_inference + support_matrix_merlin_pytorch_inference + diff --git a/docs/source/toc.yaml b/docs/source/toc.yaml index bdd4348d2..bbd513c5d 100644 --- a/docs/source/toc.yaml +++ b/docs/source/toc.yaml @@ -49,11 +49,4 @@ subtrees: - file: examples/scaling-criteo/04-Triton-Inference-with-TF.ipynb title: Serving the TensorFlow Model with Triton - file: containers.rst - - file: support_matrix/index.rst - entries: - - file: support_matrix/support_matrix_merlin_training.rst - - file: support_matrix/support_matrix_merlin_tensorflow_training.rst - - file: support_matrix/support_matrix_merlin_pytorch_training.rst - - file: support_matrix/support_matrix_merlin_inference.rst - - file: support_matrix/support_matrix_merlin_tensorflow_inference.rst - - file: support_matrix/support_matrix_merlin_pytorch_inference.rst + - file: support_matrix/index.rst \ No newline at end of file diff --git a/docs/table_config.yaml b/docs/table_config.yaml new file mode 100644 index 000000000..17f555842 --- /dev/null +++ b/docs/table_config.yaml @@ -0,0 +1,283 @@ +# Inference containers use a Triton base container. (TRTOSS_VERSION) 22.02 +# Training containers... +# MR: Not applicable +# TF: nvcr.io/nvidia/tensorflow:22.02-tf2-py3 (NVIDIA_TENSORFLOW_VERSION) 22.02-tf2, PYVER=3.8 +# PT: nvcr.io/nvidia/pytorch:21.12-py3 (NVIDIA_PYTORCH_VERSION) 22.02 +"nvcr.io/nvidia/merlin/merlin-inference": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "Triton Inference Server": + "field": "triton" + "Size": + "field": "size" +--- +"nvcr.io/nvidia/merlin/merlin-pytorch-inference": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "PyTorch": + "field": "pytorch" + "Triton Inference Server": + "field": "triton" + "Size": + "field": "size" +--- +"nvcr.io/nvidia/merlin/merlin-pytorch-training": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "PyTorch": + "field": "pytorch" + "Size": + "field": "size" +--- +"nvcr.io/nvidia/merlin/merlin-tensorflow-inference": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "TensorFlow": + "field": "tf" + "Triton Inference Server": + "field": "triton" + "Size": + "field": "size" +--- +"nvcr.io/nvidia/merlin/merlin-tensorflow-training": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "TensorFlow": + "field": "tf" + "Size": + "field": "size" +--- +"nvcr.io/nvidia/merlin/merlin-training": + "DGX": + "span": True + "DGX System": + "field": "dgx_system" + "Operating System": + "field": "os" + "NVIDIA Certified Systems": + "span": True + "NVIDIA Driver": + "field": "nvidia_driver" + "GPU Model": + "field": "gpu_model" + "Base Container Image": + "span": True + "Container Operating System": + "field": "os" + "Base Container": + "field": "base_container" + "CUDA": + "field": "cuda" + "RMM": + "field": "rmm" + "cuDF": + "field": "cudf" + "cuDNN": + "field": "cudnn" + "Merlin Core": + "field": "merlin.core" + "Merlin Models": + "field": "merlin.models" + "Merlin Systems": + "field": "merlin.systems" + "NVTabular": + "field": "nvtabular" + "Transformers4Rec": + "field": "transformers4rec" + "HugeCTR": + "field": "hugectr" + "SM": + "field": "sm" + "Size": + "field": "size" + diff --git a/docs/test_extractor.py b/docs/test_extractor.py new file mode 100644 index 000000000..cb632ba90 --- /dev/null +++ b/docs/test_extractor.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python + +import json +import shutil +import tempfile +from pathlib import Path + +from extractor import SupportMatrixExtractor, managed_container + +import docker + +IMG = "python:3.8-buster@sha256:ccc66c06817c2e5b7ecd40db1c4305dea3cd9e48ec29151a593e0dbd76af365e" + +DATAJSON = Path(__file__).parent / "fixtures" / "data.json" +SAMPLEJSON = Path(__file__).parent / "fixtures" / "sample.json" +SAMPLEAFTERJSON = Path(__file__).parent / "fixtures" / "sample_after.json" + + +def test_get_from_envfile(): + ETC_OS_RELEASE = "/etc/os-release" + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_envfile(ETC_OS_RELEASE, "PRETTY_NAME") + assert ( + xtr.data["x"]["22.02"].get("PRETTY_NAME") == "Debian GNU/Linux 10 (buster)" + ) + + xtr.get_from_envfile(ETC_OS_RELEASE, "PRETTY_NAME", "os") + assert xtr.data["x"]["22.02"].get("os") == "Debian GNU/Linux 10 (buster)" + + xtr.get_from_envfile(ETC_OS_RELEASE, "BAZ") + assert xtr.data["x"]["22.02"].get("BAZ") == SupportMatrixExtractor.ERROR + + +def test_get_from_pip(): + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_pip("pip") + assert xtr.data["x"]["22.02"].get("pip") == "22.0.4" + + xtr.get_from_pip("spam") + assert xtr.data["x"]["22.02"].get("spam") == SupportMatrixExtractor.ERROR + + +def test_get_from_env(): + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_env("SHELL") + assert xtr.data["x"]["22.02"].get("SHELL") != SupportMatrixExtractor.ERROR + + xtr.get_from_env("SHELL", "shell") + assert "shell" in xtr.data["x"]["22.02"].keys() + assert xtr.data["x"]["22.02"].get("shell") != SupportMatrixExtractor.ERROR + + xtr.get_from_env("BAZ") + assert "BAZ" in xtr.data["x"]["22.02"].keys() + assert xtr.data["x"]["22.02"].get("BAZ") == SupportMatrixExtractor.ERROR + + xtr.get_from_env("BAZ", "bar") + assert "bar" in xtr.data["x"]["22.02"].keys() + assert xtr.data["x"]["22.02"].get("bar") == SupportMatrixExtractor.ERROR + + +def test_get_from_image(): + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_image("Size", "size") + assert xtr.data["x"]["22.02"].get("size") != SupportMatrixExtractor.ERROR + + xtr.get_from_image("blah") + assert xtr.data["x"]["22.02"].get("blah") == SupportMatrixExtractor.ERROR + + +def test_get_from_cmd(): + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_cmd("cat /proc/1/cmdline", "cmdline") + assert xtr.data["x"]["22.02"].get("cmdline") != SupportMatrixExtractor.ERROR + + xtr.get_from_cmd("cat /proc/0/x", "cmderr") + assert xtr.data["x"]["22.02"].get("cmderr") == SupportMatrixExtractor.ERROR + + +def test_insert_snippet(): + with tempfile.TemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.insert_snippet("release", "99.99") + assert "99.99" in xtr.data["x"]["22.02"].get("release") + + +def test_to_json(): + with tempfile.NamedTemporaryFile() as f, managed_container(IMG) as c: + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_pip("pip") + assert xtr.to_json() == r'{"x": {"22.02": {"pip": "22.0.4"}}}' + + +def test_from_json(): + with tempfile.NamedTemporaryFile() as f, managed_container(IMG) as c: + shutil.copyfile(DATAJSON, f.name) + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.from_json() + print(f"{xtr.data}") + assert "first" in xtr.data.keys() + assert "one" in xtr.data["first"] + + xtr.get_from_env("SHELL", "first") + assert "first" in xtr.data.keys() + assert "one" in xtr.data["first"].keys() + assert "x" in xtr.data.keys() + assert "22.02" in xtr.data["x"] + + +def test_to_json_file(): + with tempfile.NamedTemporaryFile() as f, managed_container(IMG) as c: + shutil.copyfile(SAMPLEJSON, f.name) + xtr = SupportMatrixExtractor("x", "22.02", f.name) + xtr.use_container(c) + xtr.get_from_pip("pip") + xtr.from_json() + xtr.to_json_file() + a, b = "", "" + with open(SAMPLEAFTERJSON) as fa, open(f.name) as fb: + a = json.load(fa) + b = json.load(fb) + assert a == b + + +def test_managed_container(): + with managed_container("foo-bar:baz") as nf: + assert isinstance(nf, docker.errors.ImageNotFound) + assert nf.status_code == 404 diff --git a/examples/Building-and-deploying-multi-stage-RecSys/01-Building-Recommender-Systems-with-Merlin.ipynb b/examples/Building-and-deploying-multi-stage-RecSys/01-Building-Recommender-Systems-with-Merlin.ipynb index db0ea062c..e0d689a07 100644 --- a/examples/Building-and-deploying-multi-stage-RecSys/01-Building-Recommender-Systems-with-Merlin.ipynb +++ b/examples/Building-and-deploying-multi-stage-RecSys/01-Building-Recommender-Systems-with-Merlin.ipynb @@ -65,7 +65,7 @@ "metadata": {}, "source": [ "In these series of notebooks, we are going to showcase how we can deploy a four-stage recommender systems using Merlin Systems library easily on [Triton Inference Server](https://github.com/triton-inference-server/server). Let's go over the concepts in the figure briefly. \n", - "- **Retrieval:** This is the step to narrow down millions of items into thounds of candidates. We are going to train a Two-Tower item retrieval model to retrive the relevant top-K candidate items.\n", + "- **Retrieval:** This is the step to narrow down millions of items into thousands of candidates. We are going to train a Two-Tower item retrieval model to retrieve the relevant top-K candidate items.\n", "- **Filtering:** This step is to exclude the already interacted or undesirable items from the candidate items set or to apply business logic rules. Although this is an important step, for this example we skip this step.\n", "- **Scoring:** This is also known as ranking. Here the retrieved and filtered candidate items are being scored. We are going to train a ranking model to be able to use at our scoring step. \n", "- **Ordering:** At this stage, we can order the final set of items that we want to recommend to the user. Here, we’re able to align the output of the model with business needs, constraints, or criteria.\n", @@ -90,7 +90,7 @@ "id": "58d8bd1f-fa29-4d4b-a320-c76538f2302f", "metadata": {}, "source": [ - "In additon to NVIDIA Merlin libraries and `Triton` library, we are using two external libraries in these series of examples:\n", + "In addition to NVIDIA Merlin libraries and the Triton Inference Server client library, we use two external libraries in these series of examples:\n", "\n", "- [Feast](https://docs.feast.dev/): an end-to-end open source feature store library for machine learning\n", "- [Faiss](https://github.com/facebookresearch/faiss): a library for efficient similarity search and clustering of dense vectors\n", @@ -1675,9 +1675,9 @@ "metadata": {}, "source": [ "### Next Steps\n", - "We trained and exported our ranking and retrieval models and NVTabular workflows. In the next step, we will learn how to deploy our trained models into [Triton Inference Server (TIS)](https://github.com/triton-inference-server/server) with Merlin Sytems library.\n", + "We trained and exported our ranking and retrieval models and NVTabular workflows. In the next step, we will learn how to deploy our trained models into [Triton Inference Server (TIS)](https://github.com/triton-inference-server/server) with Merlin Systems library.\n", "\n", - "For the next step, move on to the `02-Deploying-multi-stage-Recsys-with-Merlin-Systems.ipynb` notebook to deploy our saved models as an ensemble to TIS and obtain prediction results for a qiven request." + "For the next step, move on to the `02-Deploying-multi-stage-Recsys-with-Merlin-Systems.ipynb` notebook to deploy our saved models as an ensemble to TIS and obtain prediction results for a given request." ] } ], diff --git a/examples/getting-started-movielens/03-Training-with-TF.ipynb b/examples/getting-started-movielens/03-Training-with-TF.ipynb index 91f583021..6ed3605fd 100644 --- a/examples/getting-started-movielens/03-Training-with-TF.ipynb +++ b/examples/getting-started-movielens/03-Training-with-TF.ipynb @@ -552,26 +552,23 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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/vvvv2YdHx8fjRs3Tu+9914VRVV54uLiNHHiROXk5DiuGW9vby1evFgPP/ywo15hYaH27dunhIQElo4EAA9AggEAUOukp6c7rViRnJys3NxcNW7cWF27dnX0dIiKinJ0rX7vvff061//2qn7v91ul81m07PPPqtnn322UuZ98ARLly7VmDFjrlvPZrOpbt262rt3b42bQ8Ad6enp6tixo86fP+80d0Vp/vnPf143GVFdHT9+XJMmTdKaNWtks9l05ddQHx8fjRw5Ui+++GKxpSNDQ0PVu3dv9ezZU5GRkSwdCQDVFAkGAECtd/HiRSUnJyspKcnxOHbsmHx8fNSpUydFRETohx9+0IYNG0r8C72Pj49atGihxYsXKyYmxoIjsE5+fr6GDh2qf//735J+7t1RUhf/Ina7XREREdq0aVONmkugvIwxiomJUXx8/DV7f3h7e0v6eYhAr1699OWXX8rHx6eqwqwQJfVauJq/v79ycnIUFBSkXr16KSYmRvfcc49uu+22UnsXAQCqDxIMAACU4PDhw0pMTHQkHA4cOKDTp0+XWt/b21sFBQUaPXq03nzzTYWGhlZhtNY7c+aMvvzyS61fv17//Oc/dfr0afn6+io3N7dYXS8vL82dO1czZ860INLq5Y033tCsWbNU0texovNXp04d9ezZU0OGDNHQoUM9bjjAiRMnNGnSJK1evbpYr4WSrFixQr/61a8cSRUAgOcgwQAAwHWcP39ewcHB1/1hJP38F3o/Pz+99NJLevzxx2vlX+kLCgqUlJSktWvXauXKlUpNTXX8tb2od4PdbldKSopjXovaaPfu3eratavjr/k2m01eXl4qKChQy5YtNWzYMA0cOFDR0dEeO/wmLi5OkyZN0sWLF687P4f0c2+gt956S1OnTq2C6AAAFY0EAwDAEh9//LHVIbhs9+7d+tOf/lTm191yyy2aMmWKWrRoUQlReY7Tp09r+/btSklJ0Z49exw/NJs2bao5c+bIbrdbHGHVy8vL01NPPaX09HRJP/+wbt++vbp27ao77rhDYWFhFkfonnPnzundd9/V9u3by/Q6Ly8vhYeHa9asWZUUWfXSokULRUREWB0GAFQYEgwAAEswnhpAbRcbG6u4uDirwwCACuNZswMBAGqUFStWaMSIEVaHcV0DBw7UF198IbvdrsuXLzvK/f391axZM918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XLgw/uZv/qbdX0gjIjZs2BDDhw+PpUuXxsKFC2Pr1q3x0ksvxdatW2PEiBFRW1sbEREXX3xxpJSipqYmIiLmzJkTc+bMifXr18eSJUvihRdeaLcM4Kabboq///u/j3/4h3+ILVu2xK9+9as4+eSTo6amJv7zP//zG2foTGPHjo1+/fpFXV1dhx1z4MCBERHR3NwcmzdvjgjXG4AClQCAg9qUKVPSlClTvtF3pk6dmiIiPfroo23G169fn8rLy1N5eXmb8SuvvDJFRFq0aFGb8Q0bNqTy8vI0bNiwNuM1NTUpItITTzzRLmtEpE2bNrWODR48OI0cObJdxiFDhqQXX3xxvzN8U0cddVQqLi7+yjmjR49Offv2TStXrvxax1y9enWKiFRTU7PPObt27UoRkSIiNTQ0pJQK93pHRFqyZMk3/h4AhcEdDABQgJ555pmIiBg/fnyb8SOPPDKGDBnSbv6yZcuiqKgoJk2a1GZ84MCBcdppp8WqVaviww8/bPe94cOHt/k8aNCgiIhoaGhoHZswYUKsXLkyrrnmmqirq2u9TX/t2rVx7rnnZs7QkX7/X/A7yoYNGyIiorS0NA477LCIcL0BKEwKBgAoMI2NjbF9+/bo1q1b9OrVq93+ww8/vN38bdu2RUtLS1RUVLRZ85/L5eLNN9+MiIh333233bEqKirafC4rK4uIiJaWltaxBQsWxMMPPxzvvfdeVFdXR58+fWLChAnx2GOPdUiGg92e516MGDEiSktLXW8ACpaCAQAKTHl5efTu3Ts+++yz2LFjR7v9W7dubTe/srIySkpKoqmpKVJKe93GjBmzX3lyuVzMmjUrnnvuufjkk09i2bJlkVKKyZMnx/33339AMuRLS0tLLFiwICIibrzxxohwvQEoXAoGAChAF1xwQUT8bqnEHps3b461a9e2mz958uRobm6OV199td2+e++9N4455phobm7eryyVlZVRX18fEV8sEzj//PNb347w1FNPHZAM+TJ37tx47bXX4pJLLompU6e2jrveABQiBQMAFKAf/vCHUVVVFXPmzIkVK1bEjh074p133omZM2fuddnE3XffHSeccELMnj07nn766di2bVts3bo1HnjggZg3b17cd999UVJSst95rrvuunj77bejsbExNm7cGPPnz4+UUowdO/aAZfg6sr5FoqWlJTZu3BiPP/54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f8nBM8880zp+2GGHtY7fd999kcvlYufOnfHqq6+2zikpKWmzP5fLxdFHHx2vv/56VFdXR+/evaNHjx4xZsyYePXVVzvt/J1pT766urpoampqHd+0aVPcfPPNcdxxx0VZWVn0798/Jk+eHGvWrGmds2zZsjYPkXz//fdj+vTpUVlZGf369YtJkybFunXr2pyvsbEx7rzzzjj55JOjR48eUVVVFRdeeGEsX748du/e3Wbu18kAAB0iAQCHrCVLlqRv+sf5hg0b0uDBg9OAAQPSE088kbZt25bWrl2bJk+enHK5XHrwwQfbzO/Zs2f67ne/2+44w4YNS/369Ws3vq/5ewwdOjT17NkzjRgxIq1cuTLt2LEjvf766+nb3/52KisrSy+99FKnnn/MmDGpqqoq1dbW7nPO71u9enWKiFRTU7PPOZ9++mmKiBQRqaGhIaWUUkNDQzr22GPTgAED0lNPPZW2b9+efvGLX6TRo0enbt26pZUrV7Y5Rk1NTet59lyXFStWpO7du6fhw4e3mXv11VenioqK9Oyzz6Zdu3aljz76KN12220pItKLL77YOu+bZvhD9uf3GwBdhzsYAKCLmTt3bvz3f/93/OhHP4pJkyZFnz59YsiQIfGzn/0sjjjiiLj55pvj448/7tQMO3fujIULF8aIESOiZ8+eceaZZ8a//du/xeeffx633HJLp567paUlUkod+kDGvR1r7ty58dvf/jbuv//++JM/+ZPo1atXnHbaabF48eJIKcUPfvCDvR7r6quvbr0u5513XkycODFef/312Lx5c+uc559/Pk477bQ4//zzo3v37jFgwID4u7/7uxgyZEiHZACA/aFgAIAu5rHHHouIiIkTJ7YZLy8vj+rq6vj000/jP/7jPzo1Q8+ePeOMM85oM3b66afHkUceGW+99VZs2LCh08790ksvxdatW2PEiBEddsw9eUtLS1uXbSxbtiyKiopi0qRJbeYOHDgwTjvttFi1alV8+OGH7Y41fPjwNp8HDRoUERENDQ2tYxMmTIiVK1fGNddcE3V1da3LItauXRvnnntu67z9zQAA+0PBAABdSGNjY2zbti26desWvXv3brd/wIABERHx0UcfdWqOysrKvY4ffvjhERGxcePGTj1/R3vllVciImLEiBFRWlraep1bWlqioqKizTMWcrlcvPnmmxER8e6777Y7VkVFRZvPZWVlEfHFnRd7LFiwIB5++OF47733orq6Ovr06RMTJkxoLY8iIlMGANgfCgYA6ELKy8ujoqIiPvvss9i+fXu7/XuWRgwcOLB1rKioKD7//PN2cz/55JO9niOXy/3BHFu2bNnrsoI9xcKeoqGzzt+RWlpaYsGCBRERceONN0bEF9e5srIySkpKoqmpqXVJxpe3MWPG7Nc5c7lczJo1K5577rn45JNPYtmyZZFSismTJ8f9999/QDIAwJcpGACgi7nkkksiIuKpp55qM97Y2BjPP/98dO/ePcaPH986fsQRR8T69evbzP3oo4/if/7nf/Z6/B49erQpBL71rW/FT37ykzZzPvvss3j99dfbjP3Xf/1XNDQ0xNChQ+OII47o1PN3pLlz58Zrr70Wl1xySUydOrV1fPLkydHc3NzmzRh73HvvvXHMMcdEc3Pzfp2zsrIy6uvrI+KLZRnnn39+69sofv+N2E1wAAADLklEQVT/a2dmAIAvUzAAQBdz9913x+DBg2POnDnx5JNPxvbt2+PXv/51XH755bFhw4b48Y9/3LpUIiJi3Lhx0dDQEP/4j/8YO3bsiHXr1sUtt9zS5i6D3/ed73wnfv3rX8cHH3wQtbW18d5778WoUaPazKmoqIi/+Iu/iNra2ti5c2e88cYbMXPmzCgrK4sf//jHbeZ29PnHjh0b/fr1i7q6uv26fi0tLbFx48Z4/PHHo7q6OubPnx+zZ8+ORYsWtbl74u67744TTjghZs+eHU8//XRs27Yttm7dGg888EDMmzcv7rvvvkyv0Lzuuuvi7bffjsbGxti4cWPMnz8/UkoxduzYA5YBANo4sC+tAAA60v6+NnDz5s1pzpw5afDgwam0tDRVVFSk8ePHp+eff77d3E8++SRdffXV6Ygjjkjdu3dP55xzTnr99dfTsGHDWl/N+Gd/9met8+vr69OoUaNSz54906BBg9KCBQvaHG/o0KHpqKOOSu+8804aP3586t27d+revXsaPXp0euWVVzr9/KNGjUp9+/b9Wq9o7NmzZ+s59my5XC5VVFSk008/PV1//fVp1apV+/z+li1b0q233pqOP/74VFpamvr375/GjRuXVqxY0Tqntra23TnuuOOOlFJqNz5x4sSUUkpr1qxJ1157bTrllFNSjx49UlVVVTr77LPTgw8+mFpaWr5xhq/LayoB+Cq5lDrwHU0AwAG1dOnSmD59eoe+crGznXHGGbF582ZvLzgEHYq/3wA4cCyRAAAAADJTMAAAAACZKRgAgAPivvvui1wuF2+99VasX78+crlc/OVf/mW+YwEAHcRjgwGAA+K2226L2267Ld8xAIBO4g4GAAAAIDMFAwAAAJCZggEAAADITMEAAAAAZKZgAAAAADJTMAAAAACZKRgAAACAzBQMAAAAQGYKBgAAACAzBQMAAACQmYIBAAAAyEzBAAAAAGSmYAAAAAAyK8l3AAAgu1wul+8IAEAXp2AAgEPYyJEjY8mSJfmOAQAQuZRSyncIAAAA4NDmGQwAAABAZgoGAAAAIDMFAwAAAJBZSUQ8ku8QAAAAwKHt/wGcnVpK2anG7QAAAABJRU5ErkJggg==", - "text/plain": [ - "" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# You need to install the dependencies\n", "tf.keras.utils.plot_model(model)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The plot is similar to the following figure:\n", + "\n", + "![Keras model](./imgs/gs-keras-model-plot.png)" + ] + }, { "cell_type": "markdown", "metadata": {}, diff --git a/examples/getting-started-movielens/imgs/gs-keras-model-plot.png b/examples/getting-started-movielens/imgs/gs-keras-model-plot.png new file mode 100644 index 000000000..3728fc155 Binary files /dev/null and b/examples/getting-started-movielens/imgs/gs-keras-model-plot.png differ diff --git a/examples/scaling-criteo/03-Training-with-TF.ipynb b/examples/scaling-criteo/03-Training-with-TF.ipynb index 1fb23bdaa..75f2e6f5a 100644 --- a/examples/scaling-criteo/03-Training-with-TF.ipynb +++ b/examples/scaling-criteo/03-Training-with-TF.ipynb @@ -431,26 +431,23 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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bs/v379fzz33nObPnx/+QQNxFq+cFBQUqH///qqsrOz2tcrKSqWkpKikpCT8AwfiJF4Z+eijjyRJI0eO7Pa10aNHS5LefvvtsPcHxFNfctIT3vuAF8Sr7llvAq+K57WB14HhVYnuoei5kOwSnRHWmyDZxTsjrDeBFyX6WgIku3hlhPUm8LJY54R5BpJdX2ueeQO8KNbneiDZRVvz9PXwqmhrnnXh8LJo65513vCqaGuedduwGevpYCs+7w/owOf6AR347D6Az+cDesN5HjbivA1bsM4MAJIf68VgK9aFwVas/YKNWN+FWIjJTV3feustSdK0adNisTvX/f73v1dKSorz2Lp1qy677DINHTpUw4cP10UXXaRNmzY52y9cuNDZdty4cVq9erU+97nPKSsrSwMHDtS5556rFStWONs/8MADzvadJwyvvvqq8/yIESO67f/gwYNasWKFs01ffkGrra1NS5cu1fnnn6/s7GxlZmaqpKREP//5z9Xe3i6p48XUzn8PKSkpeuCBB5zv7/z83LlznX03Njbqxhtv1IQJE5Senq4TTjhBX/nKV/Thhx8e8++4qqpKl156qYYPH+48t2vXrqjHlwziVfeB5mXcuHHdvjZ27FhJUnV1dcx/LjkhJ33ltWtDpMgIGYmFROdk+fLlkqT/+q//cmX/5ISc9FWiMvLJJ59oxYoVuvjii5Wdna1f//rXrvwcMkJG+iqeGdm2bZtuueUWPfPMM8rKynL950lkhIzERryvJc8//7xOOukkDRo0SEOGDNGsWbP04osvuvbzyAk56at4ZeT999+XJA0bNky33HKLcnJylJ6ertzcXN14441qampy5eeSETLSV4met//qV7/S+PHj9dnPftaV/ZMRMhIL8crJqFGjtHDhQq1du1Y/+MEP1NjYqKamJv3kJz/Ra6+9pnvuuUf5+fkx/7nkhJz0VbwyEqiTwCKSzhobGyVJW7dujfnPJSNkJBZinRPe+6DuvSBedc96k+D9kxPv8Nq1IVJkhIzEQqJzQs9FTpJdojLCehMy4hXxzAjrTciIV8X7WsJ6E3LiNfHKCOtNgvdPRrwlVjlhnkHde0Vfap55AzXvVX091zMPoO69Jtqap68P3j817x2xnvuyLpya94Jo65513sH7p+69I9qaZ9128P6pefQVtU1tJxvWXwfvnywg3sgCWfAK1lKT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qvuCggJJ6vHksH37dklSfn6+q8cgkROJnETK69eGSJERMhKNeOekra1N8+bN09ixY/Xcc8/F7INrw0VOyEmkkuFaEnix/5VXXnH9Z5ERMhKpeGTk5Zdf1r59+3TOOecE/T1feeWVkqS7777bea6mpsa145DIiERGopEM15LRo0dLik/dkRNyEql4ZWTChAmSpOHDh3f7WiU9YUIAACAASURBVKDmGhsbXT0GiYxIZCRSibqOVFdX629/+5vmz58f159LRshINOKVk1dffVVSx0K9rj73uc9Jkv7yl7+4egwSOZHISaTieS3JysrSQw89pC1btqilpUU7duzQL3/5S+dDI0455RTXj4GMkJFo9DUnvPcRe9S9++JV96w3cQ85cZfXrw2RIiNkJBrxzkmic0VOyEmkkuFawnqTviEj7opHRlhv4i4y4r5kuJaw3qRvyIm74pUR1pu4h4y4z433CZln9A11765oap55g7uoefe5ca5nHtA31L27oq15+nr3UPPuitV5nnXhsUPNuy/aumedt3uoe3f15VzPum13UPOQqG2J2k401l+7hywgGmSBLCQL1lLHHlmwA+sY+oYcJA/O87FHfScnztt9Q10nDuvM3EVtJy/WkvUNtZ04rBdzD3WdXFgXFjvUdmKx9ss91HZisb7LHX6q65jc1PW6665TWlqaXnrppZDb3X777UpNTVVlZWUsfmxC7N69W8aYbs8HijdQzJKUmpqqlpaWbtvu3bu3x32npKTE6Cg7XiS9//77dc0116i6ulrt7e0yxuiRRx6RpG5juPzyyzVq1Cg99thjam5u1k9/+lN94xvf0LBhw5xtMjIyNHToUKWlpam1tVXGmB4f5557bszGkcziVfeBv881a9Z0+1rguUAzkyzICTmR/HVtiBQZISMB8c7Jddddp+bmZi1btkxpaWnO83l5eVq1alWf9h1r5IScSMlxLcnIyJAkNTU1xXzffUFGyIgUn4zccMMNPf79Pv/885Kk+++/33kuLy8vqnG4gYyQkYBkuJY0NDRICq67ZEBOyIkUv4zMnDlTkrRjx45uXwvU3KhRo6Lat1vICBmREncdefTRR/XZz35WRUVFMdmfG8gIGQmIV04Cb36HcuDAgaj27RZyQk6k5JiTvP3225Kkr3zlKzHfd1+QETIS0Nec8N5HB+reW+JV96w3CUZOvMNP14ZIkREyEhDvnHgpV+SEnEjJcS1hvUnfkBF3xSMjrDfpjox4SzJcS1hv0jfkxF3xygjrTYKREW9x431C5hl9Q927K5qaZ97QHTXvLW6c65kH9A11765oa56+Phg17x2xOs+zLpya95Jo65513sGoe+9wo6dn3XbfUPOIFLVNbbuB9dfByAK8hCyQBTexlroDWUBXrGPoG3KQPDjPd6C+7cd5u2+o68RhnVl31LY/sJasb6jtxGG9WDDq2l6sC6O2bcHar2DUtv1Y39U3fqrrmNzUNT8/X//v//0//etf/9IzzzzT4zZVVVV68skndemll6qgoCAWPzYhDh8+rNWrVwc9t379ejU0NGj69OkaPXq08/zo0aO1ffv2oG137typurq6Hvc9cODAoKKfOnWqnnrqqYiOLy0tTWVlZVqxYoWys7N144036oQTTnAC8umnn/b4fRkZGZo/f74+/vhj/fSnP9VvfvMb3XTTTd22+8pXvqK2tjatWLGi29cefPBBjR8/Xm1tbREds1fFq+7PPvtsFRUV6aWXXtLhw4ed548cOaLf/va3ysnJ0YUXXhjVvt1CTsiJ5K9rQ6TICBkJiGdO7r33XpWVlekPf/iD82ZqMiMn5ESKX0ZuvfVWXXHFFT1+7S9/+Ysk6bTTTotq324hI2REot8KhYyQkYB45WTx4sUqLS3t9rwxRsuWLZPU8YJjMiEn5ESKX0b+7d/+TWPHjtWrr74a9PqWJL388suSpC996UtR7dstZISMSInptz755BP9+te/1g033NDnfbmJjJCRgHjl5IwzzpAkvf76692+9o9//EOSdOaZZ0a1b7eQE3IixS8ju3btUmpqqrMgO+CTTz7R4sWL9bWvfU35+flR7dstZISMBPQlJ7z3cRR17y3xqnvWmwQjJ97hp2tDpMgIGQmIZ068lityQk6k+GWE9SbByIh30G8dGxkhIwHxygnrTYKRE++IV0ZYbxKMjHhLtDlhnhGMuvcOP61rp+ap+YBo6555QDDq3juirXn6+mDUvHfEor9hXTg17zXR1j3rvINR994Rbc2zbjsYNY9EorapbTew/joYWYCXkAWy4BavrZkjC2Qh1ljHEIwc2Ifz/FHUtx04bwejrpFI1Da1HQ7WkgWjtu3AerFg1LWdWBdGbduEtV/BqG07sL4rGHUdnZjc1FWS7rrrLt155526/vrrdeedd6q6ulotLS3avn27lixZonPPPVfTpk3TkiVL+vRzzjvvPA0fPlyrVq2K0ZFHZsiQIfrBD36glStX6uDBg/rXv/6lK664Qunp6fr5z38etO0FF1yghoYGPfbYYzpw4IA2bdqkm266KejuxZ2dcsopqq6uVn19vVauXKnNmzdr1qxZER9jv379dM4552jnzp166KGHtGvXLn366ad644039MQTTxzz++bPn6/MzEzdddddmj17tvLy8rpts2DBAk2ePFlXXXWV/vKXv2jfvn1qamrSk08+qfvuu08LFy5UWlpaxMfsVfGo+9TUVC1ZskRNTU361re+pZ07d2r37t264YYbtHHjRj399NMaMGBA0PeQk96Rk/iI17UhUmSkd2QkfuKRk2effVY//OEP9e677yorK0spKSlBj02bNnX7HnLSO3ISH/G6lrz44ou67777tHXrVjU3N2vr1q2644479MILL6i0tFRXX3110PZkpHdkJD7ot3pGRshIZ/HKyfvvv68bbrhBNTU1Onz4sKqqqnTllVdqzZo1+u53v+u8SRFATnpHTuIjHhnJyMjQ4sWLtXv3bn3ta1/Txo0btXfvXj3//PNasGCBzjjjDN14441B30NGekdG4iPe/dYzzzyjwYMH68tf/nLI7chI78hI/MQjJ/Pnz9eUKVO0aNEiPfroo/r444+1e/duLVmyRD/+8Y81duxY3XrrrUHfQ056R07iI17XEmOMvvWtb6mmpkbNzc1677339PnPf16jRo3SL3/5y27bk5HekZH4iSYnvPcRjLr3nnjUPetNgpETb4nXtSFSZKR3ZCR+4pETeq5g5MRb4nUtYb3JUWTEW+i3ekZGyEhn8coJ602OIifeEo+MsN4kGBnxnmjfJ2SecRR17y38jjk177eal6Kve+YBR1H33hJNzdPXB6PmvaWv/Q3rwql5L4qm7lnnHYy695Zoz/Ws2z6Kmvc3art31Lb3sP46GFlAJMhC78iC97CWOhhZ8C/WMRxFDuzCeT4Y9W0PzttHUdf+Rm33jtpODqwlO4ratgPrxYJR13ZiXRi1bRPWfgWjtu3B+q6jqOsomS6WLl1qeng6bO+995658sorTU5Ojunfv7/JysoyZ555pvn5z39umpubu23/8ssvG0k9Pp5++ulu28+aNcsMGzbMvPPOO70ey6BBg7rt86GH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rrnmmnz9619v8xneraXHOvnkk/Pggw/m+uuvz/Tp07P//vunUCjkxz/+cb72ta+lWCw2Od8PUlFRsdPIfWsi7C09l+Y8F22loaEh8+fPT5Kcd955rZq/pUp977nX9uy9Nnfu3EydOjUrV67MRRddlPvuu69Z4fVhw4bluOOOa/HxAAAAAAAAAAAAAAAAANg7VJR6AAAAAAAAAAAAAAAAAAAAPthHP/rRD1x/4IEHZv78+XnzzTezevXqzJgxI926dWvVsU488cQkydKlSxstX79+fWpqappsP2XKlNTV1eXhhx9usu7KK6/M0KFDU1dX16pZ+vbtm1WrViVJKisrM378+FRXV6dQKGTJkiXtMsN7NfdY9fX1efjhhzN48OBccMEFGTBgwI6Q5ttvv73Tx+7Vq1ejkObw4cNzyy237Pj8Qx/6UF599dVG+6xduzYvvfRSm55L0vznoi3MnTs3jzzySCZPnpxTTjmlVfO3VEe499xre/5eO/LII/PHP/4xW7duzV133ZUjjjjiAwO3Q4cO3a3jAQAAAAAAAAAAAAAAANCxiboCAAAAAAAAAAAAAAAAAHRwo0aNarJs0KBBueKKK7J+/fq8/PLLOffcc9O7d+/dPtZll12Wfv36Zc6cObnnnntSW1ubp556KjNmzEhVVVWT7S+//PIcdNBBmTlzZu6+++5s2rQpGzZsyM0335xLL700V199dbp27drqeWbNmpUnnngiW7Zsybp16zJv3rwUi8WMHTu23WZ4t+Yeq0uXLjn22GOzdu3aXHXVVVm/fn3efvvtPPDAA/nZz36208c+4ogjsnr16rz88stZvnx5nn/++RxzzDE71n/uc5/LmjVrcsMNN6S2tjbPPfdcvvrVr2bgwIFtei7bNee5SJKxY8emf//+WbFiRavmamhoyLp167Jo0aKMGzcu8+bNy8yZM3Pbbbc1CnB29nvPvbbre621KioqctJJJ2XlypV55513cuutt+YjH/lIk+0OO+ywPXI8AAAAAAAAAAAAAAAAADqmQrFYLJZ6CAAAAAAAAAAAAAAAAAAA3l99fX0qKyvTu3fvzJo1K+edd16GDh26y/0WLlyYadOmpaVvJ129enUuvPDC3H///dm2bVs+/vGP53vf+16uu+663HfffUmSM888M7feemuSZMOGDfnRj36U6urqvPzyy+nbt28OP/zw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AAAAAAAAKCuirgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAWRF1BQAAAAAAAAAAAAAAAACAErj99ttTKBRSKBTSo0ePUo/Trqqqqnac+/aPioqK7LfffjnssMNy7rnnZuXKlaUeEwAAAAAAAAAAAAAAAADoxERdAQAAAAAAAAAAAAAAAACgBE499dQUi8WMGzeu1KO0u9ra2vz9739PkkycODHFYjHbtm3LqlWrcumll2bVqlX55Cc/mTPOOCNvvfVWiacFAAAAAAAAAAAAAAAAADojUVcAAAAAAAAAAAAAAAAAAKDkunTpkkGDBmXixIm5//77861vfSu/+tWvMn369BSLxVKPBwAAAAAAAAAAAAAAAAB0MqKuAAAAAAAAAAAAAAAAAABAh3PFFVfk05/+dBYvXpzbb7+91OMAAAAAAAAAAAAAAAAAAJ2MqCsAAAAAAAAAAAAAAAAAANDhFAqFzJ49O0ly4403lngaAAAAAAAAAAAAAAAAAKCzEXUFAAAAAAAAAAAAAAAAAIB2sGrVqkyaNCl9+vTJPvvsk2OOOSYPPfTQ+27/xhtv5IILLsiHP/zhdOvWLQMGDMiUKVPyj3/8Y8c21dXVKRQKOz5eeOGFTJs2LX379k3//v0zYcKEPPfcc40ed8uWLbnkkksyYsSI9OrVK/369cvJJ5+cxYsXp76+vsUztKWjjz46SbJixYps27atRXN19msDAAAAAAAAAAAAAAAAAOweUVcAAAAAAAAAAAAAAAAAAGhjzz77bMaMGZNHH300v/vd7/L666/nxhtvzA9+8IMmYdEkee211zJ69OgsXLgwN954YzZs2JBly5Zlw4YNGTNmTJYvX54kmTRpUorFYiZOnJgkmTNnTubMmZNXX301CxYsyP3335/p06c3euzZs2fnJz/5SX7605/m3//+d55++umMGDEiEydOzIMPPtjiGbYbO3Zs+vfvnxUrVuyx6zZ48OAkSV1dXdavX7/XXhsAAAAAAAAAAAAAAAAAoOMRdQUAAAAAAAAAAAAAAAAAgDZ20UUXZePGjbn++uszfvz4VFVV5dBDD80vf/nLvPbaa022nzt3bl588cVce+21+fznP5+qqqqMHDkyt99+e4rFYs4///ydHuess87KmDFjss8+++S4447LSSedlL/97W87gqhJct9992XkyJEZP358evbs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AAAAYAR27tyZJPnZz3425Ph3v/vdYXHPJNm2bVsaGhqyZMmSIcdPP/30zJ8/P7t27cqePXuG/d2CBQuGfP/e976XJPn3v/89eOyiiy7KSy+9lOuuuy5dXV3p7+9Pkrz77rv58Y9//I03jKZnn3023d3daW9vH7V7/i+i29zcnNNOOy2J9w0AAAAAAAAAAAAAAAAAHJ+oKwAAAAAAAAAAAAAAAAAAfE09PT05fPhwTjrppLS2tg47P2vWrGHXf/rppxkYGMi0adNSFMWQz+uvv54kee+994bda9q0aUO+t7S0JEkGBgYGj9133335y1/+kg8//DCLFi3KKaeckosuuih/+9vfRmXDie6FF15IkrS3t6e5udn7BgAAAAAAAAAAAAAAAAC+lKgrAAAAAAAAAAAAAAAAAAB8TZMmTcrUqVPz+eef58iRI8POd3d3D7t++vTpaWpqSm9vb8qyPObnJz/5yYj2FEWRq666Kn//+9/zySefZNu2bSnLMsuXL8+99947JhuqMjAwkPvuuy9Jsm7duiTeNwAAAAAAAAAAAAAAAADw5URdAQAAAAAAAAAAAAAAAABgBC6++OIkyc6dO4ccP3ToUN59991h1y9fvjx9fX158cUXh52788478/3vfz99fX0j2jJ9+vTs3r07SdLc3JzFixdn27ZtKYoiTzzxxJhsqMqmTZvyyiuv5Oc//3muuOKKwePeNwAAAAAAAAAAAAAAAABwPKKuAAAAAAAAAAAAAAAAAAAwArfffntmzJiRjRs35umnn86RI0fy9ttvZ+3atWltbR12/R133JEzzzwz11xzTZ566ql8+umn6e7uzp///Ofcdtttueeee9LU1DTiPddff33++c9/pqenJwcOHMhdd92VsiyzcOHCMdvwVSxcuDAzZ85MV1fXiP5+YGAgBw4cyPbt27No0aLcddddueaaa/LII4+kKIrB67xvAAAAAAAAAAAAAAAAAOB4RF0BAAAAAAAAAAAAAAAAAGAEzjzzzLz88stZsGBBVqxYkVmzZuUXv/hFNmzYkHPOOSc9PT0piiLXXnttkmTWrFl55ZVXsmzZsqxfvz5tbW2ZN29e/vrXv2b79u3p6OhIknR1daUoimzfvj1JMnny5Nx8881JkqIocueddyZJzjvvvCxZsiRJ8txzz2XevHm58sorM2PGjJx99tnZuXNn7r//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", - "text/plain": [ - "" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# You need to install the dependencies\n", "tf.keras.utils.plot_model(model)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The plot is similar to the following figure:\n", + "\n", + "![Model plot](./imgs/keras-model-plot.png)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -529,7 +526,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.8" + "version": "3.9.2" } }, "nbformat": 4, diff --git a/examples/scaling-criteo/imgs/keras-model-plot.png b/examples/scaling-criteo/imgs/keras-model-plot.png new file mode 100644 index 000000000..e3f9678c3 Binary files /dev/null and b/examples/scaling-criteo/imgs/keras-model-plot.png differ diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 000000000..8fc578354 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,12 @@ +[flake8] +max-line-length = 100 +exclude = build + +[flake8_nb] +max-line-length = 160 +exclude = build +ignore = E402 + +[codespell] +skip = examples/scaling-criteo/03-Training-with-TF.ipynb,examples/getting-started-movielens/03-Training-with-TF.ipynb + diff --git a/tests/unit/test_version.py b/tests/unit/test_version.py index f953d059c..6b2a86858 100644 --- a/tests/unit/test_version.py +++ b/tests/unit/test_version.py @@ -1,2 +1,2 @@ def test_version(): - assert True \ No newline at end of file + assert True