{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Nvidia GPU INT-8 quantization on any transformers model (encoder based)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For some context and explanations, please check our documentation here: [https://els-rd.github.io/transformer-deploy/quantization/quantization_intro/](https://els-rd.github.io/transformer-deploy/quantization/quantization_intro/)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Project setup\n", "\n", "### Dependencies installation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your machine should have Nvidia CUDA 11.X, TensorRT 8.2.1 and cuBLAS installed. It's said to be tricky to install, in my experience, just follow Nvidia download page instructions **and nothing else**, it should work out of the box. Nvidia Docker image could be a good choice too." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "id": "MOsHUjgdIrIW" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Looking in indexes: https://pypi.org/simple, https://pypi.ngc.nvidia.com\r\n", "Collecting datasets\r\n", " Downloading datasets-1.18.4-py3-none-any.whl (312 kB)\r\n", "\u001b[K |████████████████████████████████| 312 kB 12.2 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting sklearn\r\n", " Downloading sklearn-0.0.tar.gz (1.1 kB)\r\n", "Collecting dill\r\n", " Downloading dill-0.3.4-py2.py3-none-any.whl (86 kB)\r\n", "\u001b[K |████████████████████████████████| 86 kB 70.0 MB/s eta 0:00:01\r\n", "\u001b[?25hRequirement already satisfied: requests>=2.19.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from datasets) (2.27.1)\r\n", "Requirement already satisfied: numpy>=1.17 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from datasets) (1.21.5)\r\n", "Requirement already satisfied: packaging in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from datasets) (21.3)\r\n", "Collecting pyarrow!=4.0.0,>=3.0.0\r\n", " Downloading pyarrow-7.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.7 MB)\r\n", "\u001b[K |████████████████████████████████| 26.7 MB 20.6 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting xxhash\r\n", " Downloading xxhash-3.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (211 kB)\r\n", "\u001b[K |████████████████████████████████| 211 kB 59.3 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting fsspec[http]>=2021.05.0\r\n", " Downloading fsspec-2022.2.0-py3-none-any.whl (134 kB)\r\n", "\u001b[K |████████████████████████████████| 134 kB 73.4 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting responses<0.19\r\n", " Downloading responses-0.18.0-py3-none-any.whl (38 kB)\r\n", "Collecting pandas\r\n", " Downloading pandas-1.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.7 MB)\r\n", "\u001b[K |████████████████████████████████| 11.7 MB 90.8 MB/s eta 0:00:01\r\n", "\u001b[?25hRequirement already satisfied: huggingface-hub<1.0.0,>=0.1.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from datasets) (0.4.0)\r\n", "Collecting aiohttp\r\n", " Downloading aiohttp-3.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.2 MB)\r\n", "\u001b[K |████████████████████████████████| 1.2 MB 100.2 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting multiprocess\r\n", " Downloading multiprocess-0.70.12.2-py39-none-any.whl (128 kB)\r\n", "\u001b[K |████████████████████████████████| 128 kB 78.2 MB/s eta 0:00:01\r\n", "\u001b[?25hRequirement already satisfied: tqdm>=4.62.1 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from datasets) (4.62.3)\r\n", "Requirement already satisfied: pyyaml in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from huggingface-hub<1.0.0,>=0.1.0->datasets) (6.0)\r\n", "Requirement already satisfied: typing-extensions>=3.7.4.3 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from huggingface-hub<1.0.0,>=0.1.0->datasets) (4.0.1)\r\n", "Requirement already satisfied: filelock in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from huggingface-hub<1.0.0,>=0.1.0->datasets) (3.4.2)\r\n", "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from packaging->datasets) (3.0.7)\r\n", "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (1.26.8)\r\n", "Requirement already satisfied: certifi>=2017.4.17 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (2021.10.8)\r\n", "Requirement already satisfied: idna<4,>=2.5 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (3.3)\r\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from requests>=2.19.0->datasets) (2.0.11)\r\n", "Requirement already satisfied: scikit-learn in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from sklearn) (1.0.2)\r\n", "Requirement already satisfied: attrs>=17.3.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from aiohttp->datasets) (21.4.0)\r\n", "Collecting multidict<7.0,>=4.5\r\n", " Downloading multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (114 kB)\r\n", "\u001b[K |████████████████████████████████| 114 kB 96.7 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting aiosignal>=1.1.2\r\n", " Downloading aiosignal-1.2.0-py3-none-any.whl (8.2 kB)\r\n", "Collecting frozenlist>=1.1.1\r\n", " Downloading frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (156 kB)\r\n", "\u001b[K |████████████████████████████████| 156 kB 86.6 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting yarl<2.0,>=1.0\r\n", " Downloading yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (304 kB)\r\n", "\u001b[K |████████████████████████████████| 304 kB 95.1 MB/s eta 0:00:01\r\n", "\u001b[?25hCollecting async-timeout<5.0,>=4.0.0a3\r\n", " Downloading async_timeout-4.0.2-py3-none-any.whl (5.8 kB)\r\n", "Requirement already satisfied: python-dateutil>=2.8.1 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from pandas->datasets) (2.8.2)\r\n", "Collecting pytz>=2020.1\r\n", " Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)\r\n", "\u001b[K |████████████████████████████████| 503 kB 68.0 MB/s eta 0:00:01\r\n", "\u001b[?25hRequirement already satisfied: six>=1.5 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\r\n", "Requirement already satisfied: joblib>=0.11 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from scikit-learn->sklearn) (1.1.0)\r\n", "Requirement already satisfied: scipy>=1.1.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from scikit-learn->sklearn) (1.8.0)\r\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages (from scikit-learn->sklearn) (3.1.0)\r\n", "Building wheels for collected packages: sklearn\r\n", " Building wheel for sklearn (setup.py) ... \u001b[?25ldone\r\n", "\u001b[?25h Created wheel for sklearn: filename=sklearn-0.0-py2.py3-none-any.whl size=1309 sha256=3ac0638e4032964c7ba9d014645ce13935d501fa40fff5bf77431ac4cffa5e14\r\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-m57vxdol/wheels/e4/7b/98/b6466d71b8d738a0c547008b9eb39bf8676d1ff6ca4b22af1c\r\n", "Successfully built sklearn\r\n", "Installing collected packages: multidict, frozenlist, yarl, async-timeout, aiosignal, pytz, fsspec, dill, aiohttp, xxhash, responses, pyarrow, pandas, multiprocess, sklearn, datasets\r\n", "Successfully installed aiohttp-3.8.1 aiosignal-1.2.0 async-timeout-4.0.2 datasets-1.18.4 dill-0.3.4 frozenlist-1.3.0 fsspec-2022.2.0 multidict-6.0.2 multiprocess-0.70.12.2 pandas-1.4.1 pyarrow-7.0.0 pytz-2021.3 responses-0.18.0 sklearn-0.0 xxhash-3.0.0 yarl-1.7.2\r\n", "\u001b[33mWARNING: You are using pip version 21.1.2; however, version 22.0.4 is available.\r\n", "You should consider upgrading via the '/home/geantvert/.local/share/virtualenvs/fast_transformer/bin/python -m pip install --upgrade pip' command.\u001b[0m\r\n" ] } ], "source": [ "#! pip3 install git+ssh://git@github.com/ELS-RD/transformer-deploy\n", "#! pip3 install datasets sklearn\n", "#! pip3 install git+ssh://git@github.com/NVIDIA/TensorRT#egg=pytorch-quantization\\&subdirectory=tools/pytorch-quantization/" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check the GPU is enabled and usable." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "2OzrD4f-3ydk", "outputId": "54cc2ea6-6969-4e01-f9f9-78c5fc91ff85" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wed Mar 9 19:14:33 2022 \r\n", "+-----------------------------------------------------------------------------+\r\n", "| NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 |\r\n", "|-------------------------------+----------------------+----------------------+\r\n", "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\r\n", "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\r\n", "| | | MIG M. |\r\n", "|===============================+======================+======================|\r\n", "| 0 NVIDIA GeForce ... On | 00000000:03:00.0 On | N/A |\r\n", "| 48% 46C P8 41W / 350W | 366MiB / 24576MiB | 0% Default |\r\n", "| | | N/A |\r\n", "+-------------------------------+----------------------+----------------------+\r\n", " \r\n", "+-----------------------------------------------------------------------------+\r\n", "| Processes: |\r\n", "| GPU GI CI PID Type Process name GPU Memory |\r\n", "| ID ID Usage |\r\n", "|=============================================================================|\r\n", "| 0 N/A N/A 1895 G /usr/lib/xorg/Xorg 182MiB |\r\n", "| 0 N/A N/A 7706 G /usr/bin/gnome-shell 44MiB |\r\n", "| 0 N/A N/A 8916 G ...on/Bin/AgentConnectix.bin 4MiB |\r\n", "| 0 N/A N/A 10507 G ...884829189831830011,131072 53MiB |\r\n", "| 0 N/A N/A 1025897 G ...AAAAAAAAA= --shared-files 39MiB |\r\n", "| 0 N/A N/A 3867171 G ...947156.log --shared-files 37MiB |\r\n", "+-----------------------------------------------------------------------------+\r\n" ] } ], "source": [ "! nvidia-smi" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000, "referenced_widgets": [ "ac14ba24dcf3404db9fd303dbb24d7a5", "4e91efae49b64f038fd3fbfcfd2be510", "17b83e0d0fb947d7bf20319ff930e8fc", "1da1d80871f545bbb21bf5a84d2120a0", "c593f2e45e244637821cc5721788bf2c", "cbbb20b5d01a4450bfb8dfbf8048d64f", "854cfd13416543fba8221093b903658b", "7ec6da801d0d45c4bb80eeab5518e124", "8585eab4b3fe4992bd7e7c4596e2483b", "990482eebca2424bb5ecbd114007e02c", "c92a19dfa84142af91522bc22f21fca6", "78601982b0e04b80adaa502db2ef685a", "167874df55014291be95cd390b1e60d3", "d6426fea2eda41dd9a31cb3f35b0877e", "163146c2f23440bcbf782116a35b5684", "0dab554959dc44b3b313ee8ae91ca88d", "f651eecbb6d44c24820cf6fe5ab92e7b", "a51b461c062f4636bfa4b48823d0709b", "cced5f1cccc2400a8fbfd7a6eaedc666", "cf9597523c024514b9b3e66bc77e3fa8", "f01fdef82047471e8c1b780cae5379cc", "e1f08cf954ae4aea818c90d893486c77" ] }, "id": "KPMoLPBn_1vN", "outputId": "58dca4e7-fc5c-4fd1-a8d4-755aa1e956cb" }, "outputs": [], "source": [ "import logging\n", "import os\n", "from collections import OrderedDict\n", "from typing import Dict, List\n", "from typing import OrderedDict as OD\n", "from typing import Union\n", "\n", "import datasets\n", "import numpy as np\n", "import tensorrt as trt\n", "import torch\n", "import transformers\n", "from datasets import load_dataset, load_metric\n", "from tensorrt.tensorrt import IExecutionContext, Logger, Runtime\n", "\n", "from transformers import (\n", " AutoModelForSequenceClassification,\n", " AutoTokenizer,\n", " IntervalStrategy,\n", " PreTrainedModel,\n", " PreTrainedTokenizer,\n", " Trainer,\n", " TrainingArguments,\n", ")\n", "\n", "from transformer_deploy.backends.ort_utils import (\n", " cpu_quantization,\n", " create_model_for_provider,\n", " optimize_onnx,\n", ")\n", "from transformer_deploy.backends.pytorch_utils import convert_to_onnx\n", "from transformer_deploy.backends.trt_utils import build_engine, get_binding_idxs, infer_tensorrt\n", "from transformer_deploy.benchmarks.utils import print_timings, track_infer_time\n", "from transformer_deploy.QDQModels.calibration_utils import QATCalibrate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Set logging to `error` level to ease readability of this `notebook` on Github." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "log_level = logging.ERROR\n", "logging.getLogger().setLevel(log_level)\n", "datasets.utils.logging.set_verbosity(log_level)\n", "transformers.utils.logging.set_verbosity(log_level)\n", "transformers.utils.logging.enable_default_handler()\n", "transformers.utils.logging.enable_explicit_format()\n", "trt_logger: Logger = trt.Logger(trt.Logger.ERROR)\n", "transformers.logging.set_verbosity_error()" ] }, { "cell_type": "markdown", "metadata": { "id": "rEJBSTyZIrIb" }, "source": [ "### Preprocess data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This part is inspired from an [official Notebooks from Hugging Face](https://github.com/huggingface/notebooks/blob/master/examples/text_classification.ipynb).\n", "\n", "There is nothing special to do. Define the task:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "id": "zVvslsfMIrIh" }, "outputs": [], "source": [ "model_name = \"roberta-base\"\n", "task = \"mnli\"\n", "num_labels = 3\n", "batch_size = 32\n", "max_seq_len = 256\n", "validation_key = \"validation_matched\"\n", "timings: Dict[str, List[float]] = dict()\n", "runtime: Runtime = trt.Runtime(trt_logger)\n", "profile_index = 0" ] }, { "cell_type": "markdown", "metadata": { "id": "W7QYTpxXIrIl" }, "source": [ "Preprocess data (task specific):" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "id": "IreSlFmlIrIm" }, "outputs": [], "source": [ "def preprocess_function(examples):\n", " return tokenizer(\n", " examples[\"premise\"], examples[\"hypothesis\"], truncation=True, padding=\"max_length\", max_length=max_seq_len\n", " )\n", "\n", "\n", "def compute_metrics(eval_pred):\n", " predictions, labels = eval_pred\n", " if task != \"stsb\":\n", " predictions = np.argmax(predictions, axis=1)\n", " else:\n", " predictions = predictions[:, 0]\n", " return metric.compute(predictions=predictions, references=labels)\n", "\n", "\n", "def convert_tensor(data: OD[str, List[List[int]]], output: str) -> OD[str, Union[np.ndarray, torch.Tensor]]:\n", " input: OD[str, Union[np.ndarray, torch.Tensor]] = OrderedDict()\n", " for k in [\"input_ids\", \"attention_mask\", \"token_type_ids\"]:\n", " if k in data:\n", " v = data[k]\n", " if output == \"torch\":\n", " value = torch.tensor(v, dtype=torch.long, device=\"cuda\")\n", " elif output == \"np\":\n", " value = np.asarray(v, dtype=np.int32)\n", " else:\n", " raise Exception(f\"unknown output type: {output}\")\n", " input[k] = value\n", " return input\n", "\n", "\n", "def measure_accuracy(infer, tensor_type: str) -> float:\n", " outputs = list()\n", " for start_index in range(0, len(encoded_dataset[validation_key]), batch_size):\n", " end_index = start_index + batch_size\n", " data = encoded_dataset[validation_key][start_index:end_index]\n", " inputs: OD[str, np.ndarray] = convert_tensor(data=data, output=tensor_type)\n", " output = infer(inputs)[0]\n", " if tensor_type == \"torch\":\n", " output = output.detach().cpu().numpy()\n", " output = np.argmax(output, axis=1).astype(int).tolist()\n", " outputs.extend(output)\n", " return np.mean(np.array(outputs) == np.array(validation_labels))\n", "\n", "\n", "def get_trainer(model: PreTrainedModel) -> Trainer:\n", " trainer = Trainer(\n", " model,\n", " args,\n", " train_dataset=encoded_dataset[\"train\"],\n", " eval_dataset=encoded_dataset[validation_key],\n", " tokenizer=tokenizer,\n", " compute_metrics=compute_metrics,\n", " )\n", " transformers.logging.set_verbosity_error()\n", " return trainer" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": "Downloading: 0%| | 0.00/7.78k [00:00> Using amp half precision backend\n", "/home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages/transformers/optimization.py:306: FutureWarning: This implementation of AdamW is deprecated and will be removed in a future version. Use the PyTorch implementation torch.optim.AdamW instead, or set `no_deprecation_warning=True` to disable this warning\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'loss': 0.6865, 'learning_rate': 9.1875814863103e-06, 'epoch': 0.08}\n", "{'eval_loss': 0.4732713997364044, 'eval_accuracy': 0.8161996943453897, 'eval_runtime': 18.5941, 'eval_samples_per_second': 527.856, 'eval_steps_per_second': 8.282, 'epoch': 0.08}\n", "{'loss': 0.4992, 'learning_rate': 8.372718383311604e-06, 'epoch': 0.16}\n", "{'eval_loss': 0.42749494314193726, 'eval_accuracy': 0.8335201222618441, 'eval_runtime': 18.4454, 'eval_samples_per_second': 532.112, 'eval_steps_per_second': 8.349, 'epoch': 0.16}\n", "{'loss': 0.4684, 'learning_rate': 7.557855280312908e-06, 'epoch': 0.24}\n", "{'eval_loss': 0.41849666833877563, 'eval_accuracy': 0.8358634742740703, 'eval_runtime': 18.4936, 'eval_samples_per_second': 530.726, 'eval_steps_per_second': 8.327, 'epoch': 0.24}\n", "{'loss': 0.4457, 'learning_rate': 6.743807040417211e-06, 'epoch': 0.33}\n", "{'eval_loss': 0.3834249973297119, 'eval_accuracy': 0.8508405501782985, 'eval_runtime': 18.4657, 'eval_samples_per_second': 531.527, 'eval_steps_per_second': 8.34, 'epoch': 0.33}\n", "{'loss': 0.4302, 'learning_rate': 5.9289439374185145e-06, 'epoch': 0.41}\n", "{'eval_loss': 0.3902352452278137, 'eval_accuracy': 0.8499235863474274, 'eval_runtime': 18.5403, 'eval_samples_per_second': 529.388, 'eval_steps_per_second': 8.306, 'epoch': 0.41}\n", "{'loss': 0.4227, 'learning_rate': 5.114080834419818e-06, 'epoch': 0.49}\n", "{'eval_loss': 0.38703474402427673, 'eval_accuracy': 0.8512480896586857, 'eval_runtime': 18.5155, 'eval_samples_per_second': 530.097, 'eval_steps_per_second': 8.317, 'epoch': 0.49}\n", "{'loss': 0.4165, 'learning_rate': 4.30003259452412e-06, 'epoch': 0.57}\n", "{'eval_loss': 0.36435264348983765, 'eval_accuracy': 0.8603158430973, 'eval_runtime': 18.5529, 'eval_samples_per_second': 529.029, 'eval_steps_per_second': 8.301, 'epoch': 0.57}\n", "{'loss': 0.4132, 'learning_rate': 3.4851694915254244e-06, 'epoch': 0.65}\n", "{'eval_loss': 0.35739392042160034, 'eval_accuracy': 0.8606214977075904, 'eval_runtime': 18.5392, 'eval_samples_per_second': 529.418, 'eval_steps_per_second': 8.307, 'epoch': 0.65}\n", "{'loss': 0.4015, 'learning_rate': 2.670306388526728e-06, 'epoch': 0.73}\n", "{'eval_loss': 0.36193060874938965, 'eval_accuracy': 0.8631686194600102, 'eval_runtime': 18.5487, 'eval_samples_per_second': 529.149, 'eval_steps_per_second': 8.302, 'epoch': 0.73}\n", "{'loss': 0.3948, 'learning_rate': 1.8554432855280313e-06, 'epoch': 0.81}\n", "{'eval_loss': 0.3555583655834198, 'eval_accuracy': 0.8639836984207845, 'eval_runtime': 18.5639, 'eval_samples_per_second': 528.713, 'eval_steps_per_second': 8.296, 'epoch': 0.81}\n", "{'loss': 0.3967, 'learning_rate': 1.0413950456323338e-06, 'epoch': 0.9}\n", "{'eval_loss': 0.35024452209472656, 'eval_accuracy': 0.866225165562914, 'eval_runtime': 18.5496, 'eval_samples_per_second': 529.121, 'eval_steps_per_second': 8.302, 'epoch': 0.9}\n", "{'loss': 0.3979, 'learning_rate': 2.2734680573663624e-07, 'epoch': 0.98}\n", "{'eval_loss': 0.34961390495300293, 'eval_accuracy': 0.8664289353031075, 'eval_runtime': 18.5647, 'eval_samples_per_second': 528.693, 'eval_steps_per_second': 8.295, 'epoch': 0.98}\n", "{'train_runtime': 2621.6937, 'train_samples_per_second': 149.789, 'train_steps_per_second': 4.681, 'train_loss': 0.4466879855855969, 'epoch': 1.0}\n", "{'eval_loss': 0.34961390495300293, 'eval_accuracy': 0.8664289353031075, 'eval_runtime': 18.571, 'eval_samples_per_second': 528.511, 'eval_steps_per_second': 8.292, 'epoch': 1.0}\n", "{'eval_loss': 0.34961390495300293, 'eval_accuracy': 0.8664289353031075, 'eval_runtime': 18.571, 'eval_samples_per_second': 528.511, 'eval_steps_per_second': 8.292, 'epoch': 1.0}\n" ] } ], "source": [ "model_fp16: PreTrainedModel = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=num_labels)\n", "trainer = get_trainer(model_fp16)\n", "transformers.logging.set_verbosity_error()\n", "trainer.train()\n", "print(trainer.evaluate())\n", "\n", "model_fp16.save_pretrained(\"model_trained_fp16\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Add quantization support to any model\n", "\n", "The idea is to take the source code of a specific model and add automatically `QDQ` nodes. QDQ nodes will be placed before and after an operation that we want to quantize, that’s inside these nodes that the information to perform the mapping between high precision and low precision number is stored.\n", "\n", "If you want to know more, check our documentation on: [https://els-rd.github.io/transformer-deploy/quantization/quantization_ast/](https://els-rd.github.io/transformer-deploy/quantization/quantization_ast/)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:04:30,756 >> Using amp half precision backend\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "percentile: 99.9\n", "{'eval_loss': 0.4834432005882263, 'eval_accuracy': 0.8129393785022924, 'eval_runtime': 46.3749, 'eval_samples_per_second': 211.645, 'eval_steps_per_second': 3.321}\n", "{'eval_loss': 0.4834432005882263, 'eval_accuracy': 0.8129393785022924, 'eval_runtime': 46.3749, 'eval_samples_per_second': 211.645, 'eval_steps_per_second': 3.321}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:08:47,875 >> Using amp half precision backend\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "percentile: 99.99\n", "{'eval_loss': 0.3795105814933777, 'eval_accuracy': 0.8555272542027509, 'eval_runtime': 46.4677, 'eval_samples_per_second': 211.222, 'eval_steps_per_second': 3.314}\n", "{'eval_loss': 0.3795105814933777, 'eval_accuracy': 0.8555272542027509, 'eval_runtime': 46.4677, 'eval_samples_per_second': 211.222, 'eval_steps_per_second': 3.314}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:13:04,907 >> Using amp half precision backend\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "percentile: 99.999\n", "{'eval_loss': 0.38251793384552, 'eval_accuracy': 0.8548140601120734, 'eval_runtime': 46.4646, 'eval_samples_per_second': 211.236, 'eval_steps_per_second': 3.314}\n", "{'eval_loss': 0.38251793384552, 'eval_accuracy': 0.8548140601120734, 'eval_runtime': 46.4646, 'eval_samples_per_second': 211.236, 'eval_steps_per_second': 3.314}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:17:16,064 >> Using amp half precision backend\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "percentile: 99.9999\n", "{'eval_loss': 0.9809716939926147, 'eval_accuracy': 0.5092205807437595, 'eval_runtime': 46.4947, 'eval_samples_per_second': 211.099, 'eval_steps_per_second': 3.312}\n", "{'eval_loss': 0.9809716939926147, 'eval_accuracy': 0.5092205807437595, 'eval_runtime': 46.4947, 'eval_samples_per_second': 211.099, 'eval_steps_per_second': 3.312}\n" ] } ], "source": [ "for percentile in [99.9, 99.99, 99.999, 99.9999]:\n", " with QATCalibrate(method=\"histogram\", percentile=percentile) as qat:\n", " model_q: PreTrainedModel = AutoModelForSequenceClassification.from_pretrained(\n", " \"model_trained_fp16\", num_labels=num_labels\n", " )\n", " model_q = model_q.cuda()\n", " qat.setup_model_qat(model_q) # prepare quantizer to any model\n", "\n", " with torch.no_grad():\n", " for start_index in range(0, 128, batch_size):\n", " end_index = start_index + batch_size\n", " data = encoded_dataset[\"train\"][start_index:end_index]\n", " input_torch = {\n", " k: torch.tensor(v, dtype=torch.long, device=\"cuda\")\n", " for k, v in data.items()\n", " if k in [\"input_ids\", \"attention_mask\", \"token_type_ids\"]\n", " }\n", " model_q(**input_torch)\n", " trainer = get_trainer(model_q)\n", " print(f\"percentile: {percentile}\")\n", " print(trainer.evaluate())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, the chosen percentile value has a high impact on the final accuracy.\n", "\n", "For the rest of the notebook, we apply the `99.999` percentile." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:21:33,073 >> Using amp half precision backend\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'eval_loss': 0.38251793384552, 'eval_accuracy': 0.8548140601120734, 'eval_runtime': 46.4748, 'eval_samples_per_second': 211.19, 'eval_steps_per_second': 3.314}\n", "{'eval_loss': 0.38251793384552, 'eval_accuracy': 0.8548140601120734, 'eval_runtime': 46.4748, 'eval_samples_per_second': 211.19, 'eval_steps_per_second': 3.314}\n" ] } ], "source": [ "with QATCalibrate(method=\"histogram\", percentile=99.999) as qat:\n", " model_q: PreTrainedModel = AutoModelForSequenceClassification.from_pretrained(\n", " \"model_trained_fp16\", num_labels=num_labels\n", " )\n", " model_q = model_q.cuda()\n", " qat.setup_model_qat(model_q) # prepare quantizer to any model\n", "\n", " with torch.no_grad():\n", " for start_index in range(0, 128, batch_size):\n", " end_index = start_index + batch_size\n", " data = encoded_dataset[\"train\"][start_index:end_index]\n", " input_torch = {\n", " k: torch.tensor(v, dtype=torch.long, device=\"cuda\")\n", " for k, v in data.items()\n", " if k in [\"input_ids\", \"attention_mask\", \"token_type_ids\"]\n", " }\n", " model_q(**input_torch)\n", "trainer = get_trainer(model_q)\n", "print(trainer.evaluate())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Per layer quantization analysis\n", "\n", "Below we will run a sensitivity analysis, by enabling quantization of one layer at a time and measuring the accuracy. That way we will be able to detect if the quantization of a specific layer has a larger cost on accuracy than other layers." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "layer.0\n", "{'eval_loss': 0.34956735372543335, 'eval_accuracy': 0.86571574121243, 'eval_runtime': 20.7064, 'eval_samples_per_second': 474.009, 'eval_steps_per_second': 7.437}\n", "----\n", "layer.1\n", "{'eval_loss': 0.3523275852203369, 'eval_accuracy': 0.8649006622516556, 'eval_runtime': 25.4843, 'eval_samples_per_second': 385.14, 'eval_steps_per_second': 6.043}\n", "----\n", "layer.2\n", "{'eval_loss': 0.356509268283844, 'eval_accuracy': 0.8622516556291391, 'eval_runtime': 20.7496, 'eval_samples_per_second': 473.021, 'eval_steps_per_second': 7.422}\n", "----\n", "layer.3\n", "{'eval_loss': 0.36036217212677, 'eval_accuracy': 0.8617422312786551, 'eval_runtime': 20.7815, 'eval_samples_per_second': 472.296, 'eval_steps_per_second': 7.41}\n", "----\n", "layer.4\n", "{'eval_loss': 0.35000357031822205, 'eval_accuracy': 0.8643912379011717, 'eval_runtime': 20.7921, 'eval_samples_per_second': 472.053, 'eval_steps_per_second': 7.407}\n", "----\n", "layer.5\n", "{'eval_loss': 0.354992538690567, 'eval_accuracy': 0.8644931227712684, 'eval_runtime': 20.7938, 'eval_samples_per_second': 472.016, 'eval_steps_per_second': 7.406}\n", "----\n", "layer.6\n", "{'eval_loss': 0.35205718874931335, 'eval_accuracy': 0.8645950076413652, 'eval_runtime': 20.7918, 'eval_samples_per_second': 472.061, 'eval_steps_per_second': 7.407}\n", "----\n", "layer.7\n", "{'eval_loss': 0.35065746307373047, 'eval_accuracy': 0.8655119714722364, 'eval_runtime': 20.8011, 'eval_samples_per_second': 471.849, 'eval_steps_per_second': 7.403}\n", "----\n", "layer.8\n", "{'eval_loss': 0.3491470217704773, 'eval_accuracy': 0.8659195109526235, 'eval_runtime': 20.8112, 'eval_samples_per_second': 471.621, 'eval_steps_per_second': 7.4}\n", "----\n", "layer.9\n", "{'eval_loss': 0.3492998480796814, 'eval_accuracy': 0.8659195109526235, 'eval_runtime': 20.8695, 'eval_samples_per_second': 470.303, 'eval_steps_per_second': 7.379}\n", "----\n", "layer.10\n", "{'eval_loss': 0.3501480221748352, 'eval_accuracy': 0.866225165562914, 'eval_runtime': 20.8698, 'eval_samples_per_second': 470.296, 'eval_steps_per_second': 7.379}\n", "----\n", "layer.11\n", "{'eval_loss': 0.3497083783149719, 'eval_accuracy': 0.866225165562914, 'eval_runtime': 20.9345, 'eval_samples_per_second': 468.843, 'eval_steps_per_second': 7.356}\n", "----\n" ] } ], "source": [ "from pytorch_quantization import nn as quant_nn\n", "\n", "for i in range(12):\n", " layer_name = f\"layer.{i}\"\n", " print(layer_name)\n", " for name, module in model_q.named_modules():\n", " if isinstance(module, quant_nn.TensorQuantizer):\n", " if layer_name in name:\n", " module.enable_quant()\n", " else:\n", " module.disable_quant()\n", " trainer.evaluate()\n", " print(\"----\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It seems that quantization of layers 2 to 6 has the largest accuracy impact.\n", "\n", "\n", "#### Operator quantization analysis\n", "\n", "\n", "Below we will run a sensitivity analysis, by enabling quantization of one operator type at a time and measuring the accuracy. That way we will be able to detect if a specific operator has a larger cost on accuracy. On Roberta we only quantize `matmul` and `LayerNorm`, so we test both candidates." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "matmul\n", "{'eval_loss': 0.3494793176651001, 'eval_accuracy': 0.8654100866021396, 'eval_runtime': 26.892, 'eval_samples_per_second': 364.978, 'eval_steps_per_second': 5.727}\n", "----\n", "layernorm\n", "{'eval_loss': 0.3585323095321655, 'eval_accuracy': 0.8587875700458482, 'eval_runtime': 24.0982, 'eval_samples_per_second': 407.293, 'eval_steps_per_second': 6.391}\n", "----\n" ] } ], "source": [ "for op in [\"matmul\", \"layernorm\"]:\n", " for name, module in model_q.named_modules():\n", " if isinstance(module, quant_nn.TensorQuantizer):\n", " if op in name:\n", " module.enable_quant()\n", " else:\n", " module.disable_quant()\n", " print(op)\n", " trainer.evaluate()\n", " print(\"----\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It appears that `LayerNorm` quantization has a significant accuracy cost.\n", "\n", "Our goal is to disable quantization for as few operations as possible while preserving accuracy as much as possible. Therefore we will try to only disable quantization for `LayerNorm` on Layers 2 to 6." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "disable roberta.encoder.layer.2.output.layernorm_quantizer_0\n", "disable roberta.encoder.layer.2.output.layernorm_quantizer_1\n", "disable roberta.encoder.layer.3.output.layernorm_quantizer_0\n", "disable roberta.encoder.layer.3.output.layernorm_quantizer_1\n", "disable roberta.encoder.layer.4.output.layernorm_quantizer_0\n", "disable roberta.encoder.layer.4.output.layernorm_quantizer_1\n", "disable roberta.encoder.layer.6.output.layernorm_quantizer_0\n", "disable roberta.encoder.layer.6.output.layernorm_quantizer_1\n", "{'eval_loss': 0.3617263436317444, 'eval_accuracy': 0.8614365766683647, 'eval_runtime': 46.0379, 'eval_samples_per_second': 213.194, 'eval_steps_per_second': 3.345}\n" ] }, { "data": { "text/plain": "{'eval_loss': 0.3617263436317444,\n 'eval_accuracy': 0.8614365766683647,\n 'eval_runtime': 46.0379,\n 'eval_samples_per_second': 213.194,\n 'eval_steps_per_second': 3.345}" }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disable_layer_names = [\"layer.2\", \"layer.3\", \"layer.4\", \"layer.6\"]\n", "\n", "for name, module in model_q.named_modules():\n", " if isinstance(module, quant_nn.TensorQuantizer):\n", " if any([f\"{l}.output.layernorm\" in name for l in disable_layer_names]):\n", " print(f\"disable {name}\")\n", " module.disable_quant()\n", " else:\n", " module.enable_quant()\n", "trainer.evaluate()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "By just disabling quantization for a single operator on a few layers, we keep most of the performance boost (quantization) but retrieve more than 1 point of accuracy. It's also possible to perform an analysis per quantizer to get a smaller granularity but it's a bit slow to run.\n", "\n", "If we stop here, it's called a Post Training Quantization (PTQ). Below, we will try to retrieve even more accuracy." ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Quantization Aware Training (QAT)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We retrain the model with 1/10 or 1/100 of the original learning rate. Our goal is to retrieve most of the original accuracy." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" }, "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO|trainer.py:457] 2022-03-09 20:28:11,049 >> Using amp half precision backend\n", "/home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages/transformers/optimization.py:306: FutureWarning: This implementation of AdamW is deprecated and will be removed in a future version. Use the PyTorch implementation torch.optim.AdamW instead, or set `no_deprecation_warning=True` to disable this warning\n", " warnings.warn(\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'loss': 0.3628, 'learning_rate': 9.1867666232073e-08, 'epoch': 0.08}\n", "{'eval_loss': 0.37072187662124634, 'eval_accuracy': 0.8610290371879776, 'eval_runtime': 46.0646, 'eval_samples_per_second': 213.071, 'eval_steps_per_second': 3.343, 'epoch': 0.08}\n", "{'loss': 0.3159, 'learning_rate': 8.371903520208604e-08, 'epoch': 0.16}\n", "{'eval_loss': 0.3802173137664795, 'eval_accuracy': 0.8589913397860418, 'eval_runtime': 46.1087, 'eval_samples_per_second': 212.866, 'eval_steps_per_second': 3.34, 'epoch': 0.16}\n", "{'loss': 0.3038, 'learning_rate': 7.557855280312907e-08, 'epoch': 0.24}\n", "{'eval_loss': 0.38381442427635193, 'eval_accuracy': 0.8597045338767193, 'eval_runtime': 46.1153, 'eval_samples_per_second': 212.836, 'eval_steps_per_second': 3.339, 'epoch': 0.24}\n", "{'loss': 0.2981, 'learning_rate': 6.74299217731421e-08, 'epoch': 0.33}\n", "{'eval_loss': 0.39187753200531006, 'eval_accuracy': 0.8617422312786551, 'eval_runtime': 46.0955, 'eval_samples_per_second': 212.927, 'eval_steps_per_second': 3.341, 'epoch': 0.33}\n", "{'loss': 0.2979, 'learning_rate': 5.9289439374185136e-08, 'epoch': 0.41}\n", "{'eval_loss': 0.39416825771331787, 'eval_accuracy': 0.8601120733571065, 'eval_runtime': 46.1939, 'eval_samples_per_second': 212.474, 'eval_steps_per_second': 3.334, 'epoch': 0.41}\n", "{'loss': 0.3041, 'learning_rate': 5.114080834419817e-08, 'epoch': 0.49}\n", "{'eval_loss': 0.39381393790245056, 'eval_accuracy': 0.8609271523178808, 'eval_runtime': 46.1092, 'eval_samples_per_second': 212.864, 'eval_steps_per_second': 3.34, 'epoch': 0.49}\n", "{'loss': 0.3122, 'learning_rate': 4.3008474576271185e-08, 'epoch': 0.57}\n", "{'eval_loss': 0.39094462990760803, 'eval_accuracy': 0.8600101884870097, 'eval_runtime': 46.1377, 'eval_samples_per_second': 212.733, 'eval_steps_per_second': 3.338, 'epoch': 0.57}\n", "{'loss': 0.3297, 'learning_rate': 3.485984354628422e-08, 'epoch': 0.65}\n", "{'eval_loss': 0.3906724452972412, 'eval_accuracy': 0.8616403464085584, 'eval_runtime': 46.2006, 'eval_samples_per_second': 212.443, 'eval_steps_per_second': 3.333, 'epoch': 0.65}\n", "{'loss': 0.338, 'learning_rate': 2.671121251629726e-08, 'epoch': 0.73}\n", "{'eval_loss': 0.38998448848724365, 'eval_accuracy': 0.8624554253693326, 'eval_runtime': 46.1088, 'eval_samples_per_second': 212.866, 'eval_steps_per_second': 3.34, 'epoch': 0.73}\n", "{'loss': 0.3557, 'learning_rate': 1.8570730117340286e-08, 'epoch': 0.81}\n", "{'eval_loss': 0.39177224040031433, 'eval_accuracy': 0.8593988792664289, 'eval_runtime': 49.4531, 'eval_samples_per_second': 198.471, 'eval_steps_per_second': 3.114, 'epoch': 0.81}\n", "{'loss': 0.385, 'learning_rate': 1.0430247718383311e-08, 'epoch': 0.9}\n", "{'eval_loss': 0.38946154713630676, 'eval_accuracy': 0.8593988792664289, 'eval_runtime': 51.1685, 'eval_samples_per_second': 191.817, 'eval_steps_per_second': 3.01, 'epoch': 0.9}\n", "{'loss': 0.4133, 'learning_rate': 2.2816166883963493e-09, 'epoch': 0.98}\n", "{'eval_loss': 0.3868817687034607, 'eval_accuracy': 0.8611309220580744, 'eval_runtime': 46.8425, 'eval_samples_per_second': 209.532, 'eval_steps_per_second': 3.288, 'epoch': 0.98}\n", "{'train_runtime': 5020.8729, 'train_samples_per_second': 78.214, 'train_steps_per_second': 2.444, 'train_loss': 0.33702789975580366, 'epoch': 1.0}\n", "{'eval_loss': 0.38998448848724365, 'eval_accuracy': 0.8624554253693326, 'eval_runtime': 47.1812, 'eval_samples_per_second': 208.028, 'eval_steps_per_second': 3.264, 'epoch': 1.0}\n", "{'eval_loss': 0.38998448848724365, 'eval_accuracy': 0.8624554253693326, 'eval_runtime': 47.1812, 'eval_samples_per_second': 208.028, 'eval_steps_per_second': 3.264, 'epoch': 1.0}\n" ] } ], "source": [ "args.learning_rate = 1e-7\n", "trainer = get_trainer(model_q)\n", "trainer.train()\n", "print(trainer.evaluate())\n", "model_q.save_pretrained(\"model-qat\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Export a `QDQ Pytorch` model to `ONNX`\n", "\n", "We need to enable fake quantization mode from Pytorch." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages/pytorch_quantization/nn/modules/tensor_quantizer.py:285: TracerWarning: Converting a tensor to a Python number might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " inputs, amax.item() / bound, 0,\n", "/home/geantvert/.local/share/virtualenvs/fast_transformer/lib/python3.9/site-packages/pytorch_quantization/nn/modules/tensor_quantizer.py:291: TracerWarning: Converting a tensor to a Python boolean might cause the trace to be incorrect. We can't record the data flow of Python values, so this value will be treated as a constant in the future. This means that the trace might not generalize to other inputs!\n", " quant_dim = list(amax.shape).index(list(amax_sequeeze.shape)[0])\n" ] } ], "source": [ "data = encoded_dataset[\"train\"][1:3]\n", "input_torch = convert_tensor(data, output=\"torch\")\n", "convert_to_onnx(\n", " model_pytorch=model_q,\n", " output_path=\"model_qat.onnx\",\n", " inputs_pytorch=input_torch,\n", " quantization=True,\n", " var_output_seq=False,\n", ")" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "del model_q\n", "QATCalibrate.restore()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "### Benchmark" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Convert `ONNX` graph to `TensorRT` engine" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "engine = build_engine(\n", " runtime=runtime,\n", " onnx_file_path=\"model_qat.onnx\",\n", " logger=trt_logger,\n", " min_shape=(1, max_seq_len),\n", " optimal_shape=(batch_size, max_seq_len),\n", " max_shape=(batch_size, max_seq_len),\n", " workspace_size=10000 * 1024 * 1024,\n", " fp16=True,\n", " int8=True,\n", ")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" }, "scrolled": true }, "outputs": [], "source": [ "# same as above, but from the terminal\n", "# !/usr/src/tensorrt/bin/trtexec --onnx=model_qat.onnx --shapes=input_ids:32x256,attention_mask:32x256 --best --workspace=10000 --saveEngine=\"test.plan\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Prepare input and output buffer" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "context: IExecutionContext = engine.create_execution_context()\n", "context.set_optimization_profile_async(\n", " profile_index=profile_index, stream_handle=torch.cuda.current_stream().cuda_stream\n", ")\n", "input_binding_idxs, output_binding_idxs = get_binding_idxs(engine, profile_index) # type: List[int], List[int]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "data = encoded_dataset[\"train\"][0:batch_size]\n", "input_torch: OD[str, torch.Tensor] = convert_tensor(data=data, output=\"torch\")\n", "input_np: OD[str, np.ndarray] = convert_tensor(data=data, output=\"np\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Inference on `TensorRT`\n", "\n", "We first check that inference is working correctly:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[tensor([[ 1.2287, 1.3706, -2.4623],\n", " [ 2.4742, -0.7816, -1.8427],\n", " [ 2.4837, -0.3966, -2.2666],\n", " [ 2.9077, -0.3062, -2.9778],\n", " [ 2.3437, 0.0488, -2.6377],\n", " [ 3.7914, -1.1918, -3.1387],\n", " [-3.6134, 2.7432, 0.8490],\n", " [ 3.6679, -1.5787, -2.6408],\n", " [ 1.0155, -1.2787, 0.4250],\n", " [-3.4514, -0.4434, 4.2748],\n", " [ 3.5201, -1.1297, -2.8988],\n", " [-3.0225, -0.4062, 3.8606],\n", " [-2.7311, 3.5470, -0.4632],\n", " [-2.0741, 1.6613, 0.5798],\n", " [-0.4047, -0.8650, 1.6144],\n", " [ 2.8432, -1.3301, -1.8994],\n", " [ 3.7722, -0.9103, -3.3070],\n", " [-2.4204, -2.1432, 4.6537],\n", " [-3.1179, -1.3207, 4.6400],\n", " [-1.8794, 4.1075, -1.8630],\n", " [ 3.7726, -1.2056, -3.0701],\n", " [ 1.8645, 1.9744, -3.8743],\n", " [-3.1448, -1.2497, 4.5782],\n", " [ 3.5385, -0.2421, -3.6629],\n", " [ 3.7501, -1.6469, -2.7108],\n", " [-0.6568, 0.9046, -0.0228],\n", " [-3.2998, 0.0867, 3.3673],\n", " [-2.1030, 4.0461, -1.6705],\n", " [-3.7080, 0.4164, 3.4332],\n", " [ 3.6850, -0.9984, -3.0304],\n", " [ 3.4525, -0.5405, -3.2981],\n", " [ 3.6128, -0.9298, -3.0746]], device='cuda:0')]\n" ] } ], "source": [ "tensorrt_output = infer_tensorrt(\n", " context=context,\n", " host_inputs=input_torch,\n", " input_binding_idxs=input_binding_idxs,\n", " output_binding_idxs=output_binding_idxs,\n", ")\n", "print(tensorrt_output)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Measure of the accuracy:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": "0.8618441161487519" }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "infer_trt = lambda inputs: infer_tensorrt(\n", " context=context,\n", " host_inputs=inputs,\n", " input_binding_idxs=input_binding_idxs,\n", " output_binding_idxs=output_binding_idxs,\n", ")\n", "\n", "measure_accuracy(infer=infer_trt, tensor_type=\"torch\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Latency measures:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[TensorRT (INT-8)] mean=18.04ms, sd=2.02ms, min=16.67ms, max=28.88ms, median=17.27ms, 95p=20.04ms, 99p=28.86ms\n" ] } ], "source": [ "time_buffer = list()\n", "for _ in range(100):\n", " with track_infer_time(time_buffer):\n", " _ = infer_tensorrt(\n", " context=context,\n", " host_inputs=input_torch,\n", " input_binding_idxs=input_binding_idxs,\n", " output_binding_idxs=output_binding_idxs,\n", " )\n", "\n", "print_timings(name=\"TensorRT (INT-8)\", timings=time_buffer)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "del engine, context" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pytorch baseline\n", "\n", "Time to get some numbers to compare with.\n", "\n", "### GPU execution\n", "\n", "We will measure vanilla Pytorch inference on both FP32 and FP16 precision on GPU, it will be our baseline:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Pytorch (FP32)] mean=82.28ms, sd=7.72ms, min=75.77ms, max=120.13ms, median=79.73ms, 95p=97.02ms, 99p=110.68ms\n" ] } ], "source": [ "baseline_model = AutoModelForSequenceClassification.from_pretrained(\"model_trained_fp16\", num_labels=num_labels)\n", "baseline_model = baseline_model.cuda()\n", "baseline_model = baseline_model.eval()\n", "\n", "data = encoded_dataset[\"train\"][0:batch_size]\n", "input_torch: OD[str, torch.Tensor] = convert_tensor(data=data, output=\"torch\")\n", "\n", "with torch.inference_mode():\n", " for _ in range(30):\n", " _ = baseline_model(**input_torch)\n", " torch.cuda.synchronize()\n", " time_buffer = list()\n", " for _ in range(100):\n", " with track_infer_time(time_buffer):\n", " _ = baseline_model(**input_torch)\n", " torch.cuda.synchronize()\n", "print_timings(name=\"Pytorch (FP32)\", timings=time_buffer)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Pytorch (FP16)] mean=58.73ms, sd=1.88ms, min=55.56ms, max=69.69ms, median=58.03ms, 95p=62.28ms, 99p=64.42ms\n" ] } ], "source": [ "with torch.inference_mode():\n", " with torch.cuda.amp.autocast():\n", " for _ in range(30):\n", " _ = baseline_model(**input_torch)\n", " torch.cuda.synchronize()\n", " time_buffer = []\n", " for _ in range(100):\n", " with track_infer_time(time_buffer):\n", " _ = baseline_model(**input_torch)\n", " torch.cuda.synchronize()\n", "print_timings(name=\"Pytorch (FP16)\", timings=time_buffer)\n", "del baseline_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### CPU execution" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Pytorch (FP32) - CPU] mean=5141.10ms, sd=654.18ms, min=4095.59ms, max=6229.84ms, median=5347.27ms, 95p=5958.43ms, 99p=6175.56ms\n" ] } ], "source": [ "baseline_model = AutoModelForSequenceClassification.from_pretrained(\"model_trained_fp16\", num_labels=num_labels)\n", "baseline_model = baseline_model.eval()\n", "data = encoded_dataset[\"train\"][0:batch_size]\n", "input_torch: OD[str, torch.Tensor] = convert_tensor(data=data, output=\"torch\")\n", "input_torch_cpu = {k: v.to(\"cpu\") for k, v in input_torch.items()}\n", "\n", "torch.set_num_threads(os.cpu_count())\n", "\n", "with torch.inference_mode():\n", " for _ in range(3):\n", " _ = baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", " time_buffer = list()\n", " for _ in range(10):\n", " with track_infer_time(time_buffer):\n", " _ = baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", "print_timings(name=\"Pytorch (FP32) - CPU\", timings=time_buffer)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Pytorch (FP16) - CPU] mean=4422.39ms, sd=170.45ms, min=4250.10ms, max=4744.97ms, median=4337.85ms, 95p=4727.72ms, 99p=4741.52ms\n" ] } ], "source": [ "with torch.inference_mode():\n", " with torch.cuda.amp.autocast():\n", " for _ in range(3):\n", " _ = baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", " time_buffer = []\n", " for _ in range(10):\n", " with track_infer_time(time_buffer):\n", " _ = baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", "print_timings(name=\"Pytorch (FP16) - CPU\", timings=time_buffer)\n", "del baseline_model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below, we will perform dynamic quantization on CPU." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Pytorch (INT-8) - CPU] mean=3818.99ms, sd=137.98ms, min=3616.11ms, max=4049.00ms, median=3807.33ms, 95p=4024.45ms, 99p=4044.09ms\n" ] } ], "source": [ "quantized_baseline_model = AutoModelForSequenceClassification.from_pretrained(\n", " \"model_trained_fp16\", num_labels=num_labels\n", ")\n", "quantized_baseline_model = quantized_baseline_model.eval()\n", "quantized_baseline_model = torch.quantization.quantize_dynamic(\n", " quantized_baseline_model, {torch.nn.Linear}, dtype=torch.qint8\n", ")\n", "\n", "with torch.inference_mode():\n", " for _ in range(3):\n", " _ = quantized_baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", " time_buffer = list()\n", " for _ in range(10):\n", " with track_infer_time(time_buffer):\n", " _ = quantized_baseline_model(**input_torch_cpu)\n", " torch.cuda.synchronize()\n", "print_timings(name=\"Pytorch (INT-8) - CPU\", timings=time_buffer)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## TensorRT baseline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below we export our finetuned model, the purpose is to only check the performance on mixed precision (FP16, no quantization)." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": true }, "outputs": [], "source": [ "baseline_model = AutoModelForSequenceClassification.from_pretrained(\"model_trained_fp16\", num_labels=num_labels)\n", "baseline_model = baseline_model.cuda()\n", "convert_to_onnx(\n", " baseline_model, output_path=\"baseline.onnx\", inputs_pytorch=input_torch, quantization=False, var_output_seq=False\n", ")\n", "del baseline_model" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[TensorRT (FP16)] mean=32.36ms, sd=1.47ms, min=29.92ms, max=38.08ms, median=32.47ms, 95p=34.38ms, 99p=36.50ms\n" ] } ], "source": [ "engine = build_engine(\n", " runtime=runtime,\n", " onnx_file_path=\"baseline.onnx\",\n", " logger=trt_logger,\n", " min_shape=(batch_size, max_seq_len),\n", " optimal_shape=(batch_size, max_seq_len),\n", " max_shape=(batch_size, max_seq_len),\n", " workspace_size=10000 * 1024 * 1024,\n", " fp16=True,\n", " int8=False,\n", ")\n", "input_torch: OD[str, np.ndarray] = convert_tensor(data=data, output=\"torch\")\n", "context: IExecutionContext = engine.create_execution_context()\n", "context.set_optimization_profile_async(\n", " profile_index=profile_index, stream_handle=torch.cuda.current_stream().cuda_stream\n", ")\n", "input_binding_idxs, output_binding_idxs = get_binding_idxs(engine, profile_index) # type: List[int], List[int]\n", "for _ in range(30):\n", " _ = infer_tensorrt(\n", " context=context,\n", " host_inputs=input_torch,\n", " input_binding_idxs=input_binding_idxs,\n", " output_binding_idxs=output_binding_idxs,\n", " )\n", "time_buffer = list()\n", "for _ in range(100):\n", " with track_infer_time(time_buffer):\n", " _ = infer_tensorrt(\n", " context=context,\n", " host_inputs=input_torch,\n", " input_binding_idxs=input_binding_idxs,\n", " output_binding_idxs=output_binding_idxs,\n", " )\n", "\n", "print_timings(name=\"TensorRT (FP16)\", timings=time_buffer)\n", "del engine, context" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ONNX Runtime baseline\n", "\n", "ONNX Runtime is the go to inference solution from Microsoft.\n", "\n", "The recent 1.10 version of ONNX Runtime (with TensorRT support) is still a bit buggy on transformer models, that is why we use the 1.9.0 version in the measures below.\n", "\n", "As before, CPU quantization is dynamic.\n", "Function `\n", "` will set ONNX Runtime to use all cores available and enable any possible optimizations." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "failed in shape inference \n" ] } ], "source": [ "optimize_onnx(\n", " onnx_path=\"baseline.onnx\",\n", " onnx_optim_model_path=\"baseline-optimized.onnx\",\n", " fp16=True,\n", " use_cuda=True,\n", " num_attention_heads=12,\n", " hidden_size=768,\n", " architecture=\"bert\",\n", ")" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ignore MatMul due to non constant B: /[MatMul_108]\n", "Ignore MatMul due to non constant B: /[MatMul_113]\n", "Ignore MatMul due to non constant B: /[MatMul_210]\n", "Ignore MatMul due to non constant B: /[MatMul_215]\n", "Ignore MatMul due to non constant B: /[MatMul_312]\n", "Ignore MatMul due to non constant B: /[MatMul_317]\n", "Ignore MatMul due to non constant B: /[MatMul_414]\n", "Ignore MatMul due to non constant B: /[MatMul_419]\n", "Ignore MatMul due to non constant B: /[MatMul_516]\n", "Ignore MatMul due to non constant B: /[MatMul_521]\n", "Ignore MatMul due to non constant B: /[MatMul_618]\n", "Ignore MatMul due to non constant B: /[MatMul_623]\n", "Ignore MatMul due to non constant B: /[MatMul_720]\n", "Ignore MatMul due to non constant B: /[MatMul_725]\n", "Ignore MatMul due to non constant B: /[MatMul_822]\n", "Ignore MatMul due to non constant B: /[MatMul_827]\n", "Ignore MatMul due to non constant B: /[MatMul_924]\n", "Ignore MatMul due to non constant B: /[MatMul_929]\n", "Ignore MatMul due to non constant B: /[MatMul_1026]\n", "Ignore MatMul due to non constant B: /[MatMul_1031]\n", "Ignore MatMul due to non constant B: /[MatMul_1128]\n", "Ignore MatMul due to non constant B: /[MatMul_1133]\n", "Ignore MatMul due to non constant B: /[MatMul_1230]\n", "Ignore MatMul due to non constant B: /[MatMul_1235]\n" ] } ], "source": [ "cpu_quantization(input_model_path=\"baseline.onnx\", output_model_path=\"baseline-quantized.onnx\")" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "labels = [item[\"label\"] for item in encoded_dataset[validation_key]]\n", "data = encoded_dataset[validation_key][0:batch_size]\n", "inputs_onnx: OD[str, np.ndarray] = convert_tensor(data=data, output=\"np\")\n", "\n", "model = create_model_for_provider(path=\"baseline-optimized.onnx\", provider_to_use=\"CUDAExecutionProvider\")\n", "output = model.run(None, inputs_onnx)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ONNX Runtime GPU (FP32)] mean=82.50ms, sd=11.53ms, min=74.12ms, max=118.73ms, median=77.62ms, 95p=112.51ms, 99p=117.81ms\n", "[ONNX Runtime GPU (FP16)] mean=36.23ms, sd=4.01ms, min=33.47ms, max=55.75ms, median=35.35ms, 95p=46.89ms, 99p=53.95ms\n", "[ONNX Runtime CPU (FP32)] mean=4608.31ms, sd=468.16ms, min=3954.09ms, max=5226.20ms, median=4531.47ms, 95p=5189.71ms, 99p=5218.90ms\n", "[ONNX Runtime CPU (FP16)] mean=3987.95ms, sd=223.00ms, min=3755.70ms, max=4548.57ms, median=3907.74ms, 95p=4375.23ms, 99p=4513.90ms\n", "[ONNX Runtime CPU (INT-8)] mean=3506.39ms, sd=125.07ms, min=3425.41ms, max=3872.95ms, median=3463.65ms, 95p=3713.08ms, 99p=3840.98ms\n" ] } ], "source": [ "data = encoded_dataset[\"train\"][0:batch_size]\n", "inputs_onnx: OD[str, np.ndarray] = convert_tensor(data=data, output=\"np\")\n", "\n", "for provider, model_path, benchmark_name, warmup, nb_inference in [\n", " (\"CUDAExecutionProvider\", \"baseline.onnx\", \"ONNX Runtime GPU (FP32)\", 10, 100),\n", " (\"CUDAExecutionProvider\", \"baseline-optimized.onnx\", \"ONNX Runtime GPU (FP16)\", 10, 100),\n", " (\"CPUExecutionProvider\", \"baseline.onnx\", \"ONNX Runtime CPU (FP32)\", 3, 10),\n", " (\"CPUExecutionProvider\", \"baseline-optimized.onnx\", \"ONNX Runtime CPU (FP16)\", 3, 10),\n", " (\"CPUExecutionProvider\", \"baseline-quantized.onnx\", \"ONNX Runtime CPU (INT-8)\", 3, 10),\n", "]:\n", " model = create_model_for_provider(path=model_path, provider_to_use=provider)\n", " for _ in range(warmup):\n", " _ = model.run(None, inputs_onnx)\n", " time_buffer = []\n", " for _ in range(nb_inference):\n", " with track_infer_time(time_buffer):\n", " _ = model.run(None, inputs_onnx)\n", " print_timings(name=benchmark_name, timings=time_buffer)\n", " del model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Measure of the accuracy with ONNX Runtime engine and CUDA provider:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": "0.8665308201732043" }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = create_model_for_provider(path=\"baseline.onnx\", provider_to_use=\"CUDAExecutionProvider\")\n", "infer_ort = lambda tokens: model.run(None, tokens)\n", "measure_accuracy(infer=infer_ort, tensor_type=\"np\")" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": "0.8663270504330107" }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = create_model_for_provider(path=\"baseline-optimized.onnx\", provider_to_use=\"CUDAExecutionProvider\")\n", "infer_ort = lambda tokens: model.run(None, tokens)\n", "measure_accuracy(infer=infer_ort, tensor_type=\"np\")" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": "0.8604177279673968" }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = create_model_for_provider(path=\"baseline-quantized.onnx\", provider_to_use=\"CPUExecutionProvider\")\n", "infer_ort = lambda tokens: model.run(None, tokens)\n", "measure_accuracy(infer=infer_ort, tensor_type=\"np\")" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [], "source": [ "del model" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [ "whPRbBNbIrIl", "n9qywopnIrJH", "7k8ge1L1IrJk" ], "name": "Copie de Text Classification on GLUE", "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "0022faf286b44e858e638ccd5ded38b0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "023900ca566446eab5905b25b16a3de7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "08286a6371584b4186014ecb5d5f164d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_2d3a08166846438db79b0f89314fe76a", "placeholder": "​", "style": "IPY_MODEL_d1ecc3d380fc4758b03190b23686a2f1", "value": " 481/481 [00:00<00:00, 10.9kB/s]" } }, "092db03992f24951b494fbb81da5b9d6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_994cf2338c7c4899952e25723445693c", "IPY_MODEL_6aa2f5d46f1f454198d8e69517549ff1", "IPY_MODEL_72b8f11065254e5ca488cd346b5add54" ], "layout": "IPY_MODEL_023900ca566446eab5905b25b16a3de7" } }, "0dab554959dc44b3b313ee8ae91ca88d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e1f08cf954ae4aea818c90d893486c77", "placeholder": "​", "style": "IPY_MODEL_f01fdef82047471e8c1b780cae5379cc", "value": " 420M/420M [00:13<00:00, 33.6MB/s]" } }, "10678736bd534c63aebda414da01b4db": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "14648b8262944f5faac134a7c0184e47": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "154200a8bc0b44fe8d0419fd56c6539d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "15aae23369674f82888ed9fbd99739f2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "163146c2f23440bcbf782116a35b5684": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_cf9597523c024514b9b3e66bc77e3fa8", "max": 440473133, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_cced5f1cccc2400a8fbfd7a6eaedc666", "value": 440473133 } }, "167874df55014291be95cd390b1e60d3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "17b83e0d0fb947d7bf20319ff930e8fc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_854cfd13416543fba8221093b903658b", "placeholder": "​", "style": "IPY_MODEL_cbbb20b5d01a4450bfb8dfbf8048d64f", "value": "Downloading: 100%" } }, "17bd5357081d41c6b0161d63bd00820a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "196ffc99ad5a40109d9b1cfe12032b62": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "1bea379404df429b9852b62a938661ae": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a4c444f06c0847c09a44917084d3908d", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_300f01e3547648f3983a83d3d3118c54", "value": 1 } }, "1da1d80871f545bbb21bf5a84d2120a0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_8585eab4b3fe4992bd7e7c4596e2483b", "max": 570, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_7ec6da801d0d45c4bb80eeab5518e124", "value": 570 } }, "21ef195fa88f49c4a2c057f8028177a2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "26bc2038bed74279813ab5af09a2724c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0022faf286b44e858e638ccd5ded38b0", "max": 456318, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_7ff32d18c9f0473893a6a6b2941c54b0", "value": 456318 } }, "28b7346a9b8c4b198dd9dbea1be013b6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "2d3a08166846438db79b0f89314fe76a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "2eac6b4817e14d7fae396e6458b940fa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_927ad6ade85a402594074fa90ab558c2", "placeholder": "​", "style": "IPY_MODEL_cae29b9c6d45412fab70977fcd0f3234", "value": "Downloading: 100%" } }, "300f01e3547648f3983a83d3d3118c54": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "30646fa2c0dc494e9dbcbd4dc598410e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "360d6eb0e41543dba6d457912e32a77d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "37cda4cae81a4d94aa831fb40b5c3b26": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_56fd7584b0844590936519ec3851922e", "placeholder": "​", "style": "IPY_MODEL_5b1ad9f5d02c4b298a02ce6041692057", "value": " 4/4 [00:00<00:00, 5.97ba/s]" } }, "3bfff454943b4b04a12ec29bbe28e0aa": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_cedca6e55b84443e82f3d01471d61048", "IPY_MODEL_a7d355f456eb4d3995dd91c5917a72c1", "IPY_MODEL_b264b220d9c444bd9da46a7e6c8fd5ed" ], "layout": "IPY_MODEL_154200a8bc0b44fe8d0419fd56c6539d" } }, "3e7fbd1c0e534cb8abca18d1edfc9277": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "4320b12de9d14c459cc88319e2d7622a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "4552ee8ca6bd4a0b956651cc23f4ff3c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4b13c3b3435f4689b29d48e0a35bebd6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4e91efae49b64f038fd3fbfcfd2be510": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "4fae966b76844c869cdea1e53891e26f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "54c0ad5ab737433190c4a824be128a48": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "561b1ede331a40c1a2bff9422e8eea0e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "56fd7584b0844590936519ec3851922e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "59418bbeb20547e5b5e1a5728262c757": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5b1ad9f5d02c4b298a02ce6041692057": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "5e2185bd6e4f4a10b89ac606868a43bd": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_2eac6b4817e14d7fae396e6458b940fa", "IPY_MODEL_af16284f77594397a69ad0e322b5e736", "IPY_MODEL_a20579a9e7364fb485d79bdc4feb54dc" ], "layout": "IPY_MODEL_f44d2beebfe44186b0ac8016e89e4b49" } }, "5f032f56105f463a8680aa2482d0b162": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "65017db07d7f4e798ede741cc92488f0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_86cc326e574a4fada7224e6f0c209e9a", "IPY_MODEL_af5b646f89024c139c695a1f058fb772", "IPY_MODEL_37cda4cae81a4d94aa831fb40b5c3b26" ], "layout": "IPY_MODEL_6fa74604c68543a38392fa0e1587f707" } }, "68c4c867096d41a78740fdee30edcadb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "6aa2f5d46f1f454198d8e69517549ff1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7b483d17d1d14fdd922600f0c906fc2f", "max": 1355863, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_4320b12de9d14c459cc88319e2d7622a", "value": 1355863 } }, "6d48e5ce9a854a3bb0506d774665f428": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_fbdb7c7250d846b2880005a9012c484b", "placeholder": "​", "style": "IPY_MODEL_17bd5357081d41c6b0161d63bd00820a", "value": " 478M/478M [00:15<00:00, 34.7MB/s]" } }, "6e54ce781ca54ad283911fa4774e3361": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "6e604307427a466cab51d50d363ee86d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6fa74604c68543a38392fa0e1587f707": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "728a9dcc79824e1eb2bfa49d915a8f08": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d314c0bb87e04893b96de0e18766d3ab", "placeholder": "​", "style": "IPY_MODEL_fa35b3acd9ce4cb098fcd69bb405db00", "value": "Downloading: 100%" } }, "72b8f11065254e5ca488cd346b5add54": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_10678736bd534c63aebda414da01b4db", "placeholder": "​", "style": "IPY_MODEL_14648b8262944f5faac134a7c0184e47", "value": " 1.29M/1.29M [00:00<00:00, 2.22MB/s]" } }, "7701ec898fd443f1b35b187aea3651e9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "78601982b0e04b80adaa502db2ef685a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_d6426fea2eda41dd9a31cb3f35b0877e", "IPY_MODEL_163146c2f23440bcbf782116a35b5684", "IPY_MODEL_0dab554959dc44b3b313ee8ae91ca88d" ], "layout": "IPY_MODEL_167874df55014291be95cd390b1e60d3" } }, "788badadfd834f61926a39a43ef1d517": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "7a75099f99054645bf3fc1b778dac7e6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7b483d17d1d14fdd922600f0c906fc2f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7bb3b69a2f814e60b0cec253c759a16b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d731cfb34124448bbd8baab3d27b75db", "placeholder": "​", "style": "IPY_MODEL_cbb3e9bf5d07406d9768a98a6f0b5b64", "value": "100%" } }, "7c875ecd9cb54405a6c45969bcb4b4c6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "7d520bdde27742abb42803843721d101": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "7ec6da801d0d45c4bb80eeab5518e124": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "7ff32d18c9f0473893a6a6b2941c54b0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "8399339998564d21ba5db6f0514c02c6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "854cfd13416543fba8221093b903658b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "8585eab4b3fe4992bd7e7c4596e2483b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "86cc326e574a4fada7224e6f0c209e9a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_561b1ede331a40c1a2bff9422e8eea0e", "placeholder": "​", "style": "IPY_MODEL_28b7346a9b8c4b198dd9dbea1be013b6", "value": "100%" } }, "87d85ac2d3104f68b99db880b1089638": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_728a9dcc79824e1eb2bfa49d915a8f08", "IPY_MODEL_c815bfd265f4480298c39c76b9eaf770", "IPY_MODEL_6d48e5ce9a854a3bb0506d774665f428" ], "layout": "IPY_MODEL_6e604307427a466cab51d50d363ee86d" } }, "8a11c8fed672470b8335dc575a4a220e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_93dbcc6d23a743bab0da8af6ee5e2825", "max": 481, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_f8a0053903c64e75ac25eab5b24d5871", "value": 481 } }, "8defdddee0e64a20b101e6c50bd7c60b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_7bb3b69a2f814e60b0cec253c759a16b", "IPY_MODEL_d25cca081db3469b80163d6707f5a37d", "IPY_MODEL_f8abc3e44ae3428885aafbea2b37384c" ], "layout": "IPY_MODEL_f485d2b19ffa4585a1da20986f28af29" } }, "927ad6ade85a402594074fa90ab558c2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "93dbcc6d23a743bab0da8af6ee5e2825": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "969b6fdac1d6418d89a683db1e6ec6b2": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "990482eebca2424bb5ecbd114007e02c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "994cf2338c7c4899952e25723445693c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d9a0852554284d36b6b121f579b06b41", "placeholder": "​", "style": "IPY_MODEL_c7bd52ef524c4d279dfcaa3aebe4a2c5", "value": "Downloading: 100%" } }, "99e94791043b4499b06601f7524f9b14": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d5c8ff9e3bd849059fa7b30eab5fc940", "placeholder": "​", "style": "IPY_MODEL_196ffc99ad5a40109d9b1cfe12032b62", "value": "Downloading: 100%" } }, "9bc6e14b912249e3b7d02f31bcc74667": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_969b6fdac1d6418d89a683db1e6ec6b2", "placeholder": "​", "style": "IPY_MODEL_6e54ce781ca54ad283911fa4774e3361", "value": " 446k/446k [00:00<00:00, 650kB/s]" } }, "a02624219ee84f50b1a3032eaa030a39": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "a0a2918e9772475cac51124b3b83fcaf": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a20579a9e7364fb485d79bdc4feb54dc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4b13c3b3435f4689b29d48e0a35bebd6", "placeholder": "​", "style": "IPY_MODEL_d5d015711ae04d2f801577fc50af6c15", "value": " 878k/878k [00:00<00:00, 1.33MB/s]" } }, "a3e2c73d393d4e58a371f3da3dd80e6d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a4c444f06c0847c09a44917084d3908d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a51b461c062f4636bfa4b48823d0709b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a61d366d91c34697a55f62b754e1f3a5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a9b98fd93fcd4fc4a2b2aa88c82835d0", "placeholder": "​", "style": "IPY_MODEL_b8722dc10d4447fe9630cbf169260cc8", "value": "100%" } }, "a7d355f456eb4d3995dd91c5917a72c1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5f032f56105f463a8680aa2482d0b162", "max": 2, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_a02624219ee84f50b1a3032eaa030a39", "value": 2 } }, "a9b98fd93fcd4fc4a2b2aa88c82835d0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ac14ba24dcf3404db9fd303dbb24d7a5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_17b83e0d0fb947d7bf20319ff930e8fc", "IPY_MODEL_1da1d80871f545bbb21bf5a84d2120a0", "IPY_MODEL_c593f2e45e244637821cc5721788bf2c" ], "layout": "IPY_MODEL_4e91efae49b64f038fd3fbfcfd2be510" } }, "aecf7f063234416abf3f24766481cb89": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "af16284f77594397a69ad0e322b5e736": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7a75099f99054645bf3fc1b778dac7e6", "max": 898823, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_30646fa2c0dc494e9dbcbd4dc598410e", "value": 898823 } }, "af5b646f89024c139c695a1f058fb772": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_21ef195fa88f49c4a2c057f8028177a2", "max": 4, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_aecf7f063234416abf3f24766481cb89", "value": 4 } }, "b264b220d9c444bd9da46a7e6c8fd5ed": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_8399339998564d21ba5db6f0514c02c6", "placeholder": "​", "style": "IPY_MODEL_7701ec898fd443f1b35b187aea3651e9", "value": " 2/2 [00:00<00:00, 6.46ba/s]" } }, "b4d3f284fc4c4061b58d43a738f9bc78": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7d520bdde27742abb42803843721d101", "placeholder": "​", "style": "IPY_MODEL_68c4c867096d41a78740fdee30edcadb", "value": "Downloading: 100%" } }, "b6be028de2ae4ff691538eedb33793af": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_b4d3f284fc4c4061b58d43a738f9bc78", "IPY_MODEL_8a11c8fed672470b8335dc575a4a220e", "IPY_MODEL_08286a6371584b4186014ecb5d5f164d" ], "layout": "IPY_MODEL_a3e2c73d393d4e58a371f3da3dd80e6d" } }, "b8722dc10d4447fe9630cbf169260cc8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "bbe3a471efb04ea8b5aabc4be819d585": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_a61d366d91c34697a55f62b754e1f3a5", "IPY_MODEL_1bea379404df429b9852b62a938661ae", "IPY_MODEL_c801e1727de44b67aa7cb1c3d970e1fe" ], "layout": "IPY_MODEL_59418bbeb20547e5b5e1a5728262c757" } }, "be4affe852b348de8fe1362582b08da9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_99e94791043b4499b06601f7524f9b14", "IPY_MODEL_26bc2038bed74279813ab5af09a2724c", "IPY_MODEL_9bc6e14b912249e3b7d02f31bcc74667" ], "layout": "IPY_MODEL_c6c100b71f26405fb960598feb5eee03" } }, "c593f2e45e244637821cc5721788bf2c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c92a19dfa84142af91522bc22f21fca6", "placeholder": "​", "style": "IPY_MODEL_990482eebca2424bb5ecbd114007e02c", "value": " 570/570 [00:00<00:00, 13.1kB/s]" } }, "c6c100b71f26405fb960598feb5eee03": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c7bd52ef524c4d279dfcaa3aebe4a2c5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "c801e1727de44b67aa7cb1c3d970e1fe": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_4552ee8ca6bd4a0b956651cc23f4ff3c", "placeholder": "​", "style": "IPY_MODEL_7c875ecd9cb54405a6c45969bcb4b4c6", "value": " 1/1 [00:00<00:00, 7.22ba/s]" } }, "c815bfd265f4480298c39c76b9eaf770": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_15aae23369674f82888ed9fbd99739f2", "max": 501200538, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_3e7fbd1c0e534cb8abca18d1edfc9277", "value": 501200538 } }, "c92a19dfa84142af91522bc22f21fca6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "cae29b9c6d45412fab70977fcd0f3234": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "cbb3e9bf5d07406d9768a98a6f0b5b64": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "cbbb20b5d01a4450bfb8dfbf8048d64f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "cced5f1cccc2400a8fbfd7a6eaedc666": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "cedca6e55b84443e82f3d01471d61048": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a0a2918e9772475cac51124b3b83fcaf", "placeholder": "​", "style": "IPY_MODEL_4fae966b76844c869cdea1e53891e26f", "value": "100%" } }, "cf9597523c024514b9b3e66bc77e3fa8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d1ecc3d380fc4758b03190b23686a2f1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d25cca081db3469b80163d6707f5a37d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_360d6eb0e41543dba6d457912e32a77d", "max": 3, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_788badadfd834f61926a39a43ef1d517", "value": 3 } }, "d314c0bb87e04893b96de0e18766d3ab": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d5c8ff9e3bd849059fa7b30eab5fc940": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d5d015711ae04d2f801577fc50af6c15": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d6426fea2eda41dd9a31cb3f35b0877e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_a51b461c062f4636bfa4b48823d0709b", "placeholder": "​", "style": "IPY_MODEL_f651eecbb6d44c24820cf6fe5ab92e7b", "value": "Downloading: 100%" } }, "d731cfb34124448bbd8baab3d27b75db": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d9a0852554284d36b6b121f579b06b41": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e1f08cf954ae4aea818c90d893486c77": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f01fdef82047471e8c1b780cae5379cc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "f237ed04039945e9aa224d1b9d04e1b5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "f44d2beebfe44186b0ac8016e89e4b49": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f485d2b19ffa4585a1da20986f28af29": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f651eecbb6d44c24820cf6fe5ab92e7b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "f8a0053903c64e75ac25eab5b24d5871": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "f8abc3e44ae3428885aafbea2b37384c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_54c0ad5ab737433190c4a824be128a48", "placeholder": "​", "style": "IPY_MODEL_f237ed04039945e9aa224d1b9d04e1b5", "value": " 3/3 [00:00<00:00, 52.79it/s]" } }, "fa35b3acd9ce4cb098fcd69bb405db00": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "fbdb7c7250d846b2880005a9012c484b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } } } } }, "nbformat": 4, "nbformat_minor": 1 }