{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "flsf21MK3KTd" }, "source": [ "\n", "# Probabilistic gradient pruning\n", "

\n", "\"torchquantum\n", "

\n", "\n", "Tutorial Author: Zirui Li, Hanrui Wang\n" ] }, { "cell_type": "markdown", "source": [ "bugs:\n", " - Directly run all. In the first epoch, the process will get stuck in the inference phase.\n", " - modify `torchquantum/plugins/qiskit_processor.py:228 parallel=True` to `parallel=False` to fix the bug.\n" ], "metadata": { "id": "7ZB2E7IfzHGQ" } }, { "cell_type": "markdown", "source": [ "## Outline\n", " - Introduction to probabilistic gradient pruning.\n", " - Train a model with gradient pruning." ], "metadata": { "id": "mWygf3uG6rOj" } }, { "cell_type": "markdown", "source": [ "## Introduction to probabilistic gradient pruning\n", "\n", "By carefully investigating the on-chip training process, we observe that small gradients tend to have large relative variations\n", "or even wrong directions under quantum noises. Also, not all gradient computations are necessary for the\n", "training process, especially for small-magnitude gradients. \n", "\n", "The observations provide great opportunities for us to boost the robustness and efficiency of QNN on-chip learning. Inspired by that, we\n", "propose a **probabilistic gradient pruning** method to predict and only\n", "compute gradients of high reliability. Hence we can reduce noise impact and also save the required number of circuit runs on real\n", "quantum machines.\n", "\n", "### Accumulation Window and Pruning Window\n", "\n", "We separate all the training epochs into a repeat of an accumulation window followed by a pruning window. There are three important hyper-parameters in our probabilistic gradient pruning method:\n", " - accumulation window width 𝑤𝑎,\n", " - pruning ratio 𝑟,\n", " - pruning window width 𝑤𝑝 .\n", "\n", "In the accumulation window, we collect the information of gradients in each training step. In each step of the pruning window, we probabilistically exempt the calculations of some gradients based on the information collected from the accumulation window and pruning ratio.\n", "\n", "
\n", "\"conv-full-layer\"\n", "
\n", "\n", "The accumulation window width\n", "and pruning window width decide the reliability of the gradient\n", "trend evaluation and our confidence in it, respectively. The pruning\n", "ratio can be tuned to balance the gradient variances caused by noise\n", "perturbation and pruning. Thus, the percentage of the time saved\n", "by our probabilistic gradient pruning method is $𝑟\\frac{𝑤𝑝}{𝑤𝑎+𝑤𝑝}× 100%$.\n", "In\n", "our experiments, we find that the setting (𝑤𝑎=1, 𝑤𝑝=2∼3, 𝑟=0.3∼0.5)\n", "usually works well in all cases" ], "metadata": { "id": "_RVTE9myO0m-" } }, { "cell_type": "markdown", "metadata": { "id": "-42mdL8CG5Vi" }, "source": [ "##Train a model with probabilistic gradient pruning" ] }, { "cell_type": "markdown", "metadata": { "id": "pfwd2SNaOA4z" }, "source": [ "###Installation" ] }, { "cell_type": "markdown", "metadata": { "id": "9ELpIlt-3HG8" }, "source": [ "" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "azb47tvSiaBp", "outputId": "6bd1a28f-1028-4ffe-a7f2-3f4990b375a9" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting qiskit==0.32.1\n", " Downloading qiskit-0.32.1.tar.gz (13 kB)\n", "Collecting qiskit-terra==0.18.3\n", " Downloading qiskit_terra-0.18.3-cp37-cp37m-manylinux2010_x86_64.whl (6.1 MB)\n", "\u001b[K |████████████████████████████████| 6.1 MB 5.0 MB/s \n", "\u001b[?25hCollecting qiskit-aer==0.9.1\n", " Downloading qiskit_aer-0.9.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (17.9 MB)\n", "\u001b[K |████████████████████████████████| 17.9 MB 506 kB/s \n", "\u001b[?25hCollecting qiskit-ibmq-provider==0.18.1\n", " Downloading qiskit_ibmq_provider-0.18.1-py3-none-any.whl (237 kB)\n", "\u001b[K |████████████████████████████████| 237 kB 54.7 MB/s \n", "\u001b[?25hCollecting qiskit-ignis==0.6.0\n", " Downloading qiskit_ignis-0.6.0-py3-none-any.whl (207 kB)\n", "\u001b[K |████████████████████████████████| 207 kB 65.9 MB/s \n", "\u001b[?25hCollecting qiskit-aqua==0.9.5\n", " Downloading qiskit_aqua-0.9.5-py3-none-any.whl (2.1 MB)\n", "\u001b[K |████████████████████████████████| 2.1 MB 39.6 MB/s \n", "\u001b[?25hRequirement already satisfied: scipy>=1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aer==0.9.1->qiskit==0.32.1) (1.4.1)\n", "Requirement already satisfied: numpy>=1.16.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-aer==0.9.1->qiskit==0.32.1) (1.21.5)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (1.3.5)\n", "Collecting quandl\n", " Downloading Quandl-3.7.0-py2.py3-none-any.whl (26 kB)\n", "Collecting retworkx>=0.8.0\n", " Downloading retworkx-0.11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.6 MB)\n", "\u001b[K |████████████████████████████████| 1.6 MB 36.5 MB/s \n", "\u001b[?25hRequirement already satisfied: psutil>=5 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (5.4.8)\n", "Requirement already satisfied: h5py<3.3.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (3.1.0)\n", "Collecting dlx<=1.0.4\n", " Downloading dlx-1.0.4.tar.gz (5.5 kB)\n", "Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (1.0.2)\n", "Requirement already satisfied: setuptools>=40.1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (57.4.0)\n", "Collecting yfinance>=0.1.62\n", " Downloading yfinance-0.1.70-py2.py3-none-any.whl (26 kB)\n", "Requirement already satisfied: fastdtw<=0.3.4 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (0.3.4)\n", "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit==0.32.1) (1.7.1)\n", "Collecting docplex>=2.21.207\n", " Downloading docplex-2.23.222.tar.gz (610 kB)\n", "\u001b[K |████████████████████████████████| 610 kB 54.4 MB/s \n", "\u001b[?25hRequirement already satisfied: python-dateutil>=2.8.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2.8.2)\n", "Collecting requests-ntlm>=1.1.0\n", " Downloading requests_ntlm-1.1.0-py2.py3-none-any.whl (5.7 kB)\n", "Requirement already satisfied: requests>=2.19 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2.23.0)\n", "Requirement already satisfied: urllib3>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (1.24.3)\n", "Collecting websocket-client>=1.0.1\n", " Downloading websocket_client-1.3.1-py3-none-any.whl (54 kB)\n", "\u001b[K |████████████████████████████████| 54 kB 3.5 MB/s \n", "\u001b[?25hRequirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit==0.32.1) (4.3.3)\n", "Collecting ply>=3.10\n", " Downloading ply-3.11-py2.py3-none-any.whl (49 kB)\n", "\u001b[K |████████████████████████████████| 49 kB 7.8 MB/s \n", "\u001b[?25hCollecting tweedledum<2.0,>=1.1\n", " Downloading tweedledum-1.1.1-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (943 kB)\n", "\u001b[K |████████████████████████████████| 943 kB 48.7 MB/s \n", "\u001b[?25hRequirement already satisfied: dill>=0.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit==0.32.1) (0.3.4)\n", "Collecting python-constraint>=1.4\n", " Downloading python-constraint-1.4.0.tar.bz2 (18 kB)\n", "Collecting symengine>0.7\n", " Downloading symengine-0.9.2-cp37-cp37m-manylinux2010_x86_64.whl (37.5 MB)\n", "\u001b[K |████████████████████████████████| 37.5 MB 1.2 MB/s \n", "\u001b[?25hCollecting fastjsonschema>=2.10\n", " Downloading fastjsonschema-2.15.3-py3-none-any.whl (22 kB)\n", "Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from docplex>=2.21.207->qiskit-aqua==0.9.5->qiskit==0.32.1) (1.15.0)\n", "Requirement already satisfied: cached-property in /usr/local/lib/python3.7/dist-packages (from h5py<3.3.0->qiskit-aqua==0.9.5->qiskit==0.32.1) (1.5.2)\n", "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (4.11.3)\n", "Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (21.4.0)\n", "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (0.18.1)\n", "Requirement already satisfied: importlib-resources>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (5.4.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (3.10.0.2)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.7/dist-packages (from importlib-resources>=1.4.0->jsonschema>=2.6->qiskit-terra==0.18.3->qiskit==0.32.1) (3.7.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2021.10.8)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (3.0.4)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2.10)\n", "Collecting ntlm-auth>=1.0.2\n", " Downloading ntlm_auth-1.5.0-py2.py3-none-any.whl (29 kB)\n", "Collecting cryptography>=1.3\n", " Downloading cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl (3.6 MB)\n", "\u001b[K |████████████████████████████████| 3.6 MB 53.1 MB/s \n", "\u001b[?25hRequirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (1.15.0)\n", "Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2.21)\n", "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit-aqua==0.9.5->qiskit==0.32.1) (1.1.0)\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit-aqua==0.9.5->qiskit==0.32.1) (3.1.0)\n", "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.7/dist-packages (from sympy>=1.3->qiskit-aqua==0.9.5->qiskit==0.32.1) (1.2.1)\n", "Collecting lxml>=4.5.1\n", " Downloading lxml-4.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (6.4 MB)\n", "\u001b[K |████████████████████████████████| 6.4 MB 52.2 MB/s \n", "\u001b[?25hRequirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance>=0.1.62->qiskit-aqua==0.9.5->qiskit==0.32.1) (0.0.10)\n", "Collecting requests>=2.19\n", " Downloading requests-2.27.1-py2.py3-none-any.whl (63 kB)\n", "\u001b[K |████████████████████████████████| 63 kB 2.1 MB/s \n", "\u001b[?25hRequirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas->qiskit-aqua==0.9.5->qiskit==0.32.1) (2018.9)\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit==0.32.1) (2.0.12)\n", "Collecting inflection>=0.3.1\n", " Downloading inflection-0.5.1-py2.py3-none-any.whl (9.5 kB)\n", "Requirement already satisfied: more-itertools in /usr/local/lib/python3.7/dist-packages (from quandl->qiskit-aqua==0.9.5->qiskit==0.32.1) (8.12.0)\n", "Building wheels for collected packages: qiskit, dlx, docplex, python-constraint\n", " Building wheel for qiskit (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for qiskit: filename=qiskit-0.32.1-py3-none-any.whl size=11777 sha256=0da44b2b1281b0ae4c6e2615fcd1db002c7b2a0f27dfff24fc5292884896d11f\n", " Stored in directory: /root/.cache/pip/wheels/0f/62/0a/c53eda1ead41c137c47c9730bc2771a8367b1ce00fb64e8cc6\n", " Building wheel for dlx (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for dlx: filename=dlx-1.0.4-py3-none-any.whl size=5718 sha256=f4189a2cdf623b2017d93227cacb73900731558a0f4c543a681229a95f7a2dda\n", " Stored in directory: /root/.cache/pip/wheels/78/55/c8/dc61e772445a566b7608a476d151e9dcaf4e092b01b0c4bc3c\n", " Building wheel for docplex (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for docplex: filename=docplex-2.23.222-py3-none-any.whl size=662847 sha256=06dfed71b2318068e88b361dbfd3d66d11303eb17ed9f9c8988e0d606f30fcfe\n", " Stored in directory: /root/.cache/pip/wheels/a7/c9/fb/cee5a89f304e77a39c466e625ac2830434b76eb8384999d116\n", " Building wheel for python-constraint (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for python-constraint: filename=python_constraint-1.4.0-py2.py3-none-any.whl size=24081 sha256=fffdc1553687d0239ea846797253de00732d5239d91b239e0fe3423ffec55084\n", " Stored in directory: /root/.cache/pip/wheels/07/27/db/1222c80eb1e431f3d2199c12569cb1cac60f562a451fe30479\n", "Successfully built qiskit dlx docplex python-constraint\n", "Installing collected packages: tweedledum, symengine, retworkx, python-constraint, ply, fastjsonschema, requests, qiskit-terra, ntlm-auth, lxml, inflection, cryptography, yfinance, websocket-client, requests-ntlm, quandl, qiskit-ignis, docplex, dlx, qiskit-ibmq-provider, qiskit-aqua, qiskit-aer, qiskit\n", " Attempting uninstall: requests\n", " Found existing installation: requests 2.23.0\n", " Uninstalling requests-2.23.0:\n", " Successfully uninstalled requests-2.23.0\n", " Attempting uninstall: lxml\n", " Found existing installation: lxml 4.2.6\n", " Uninstalling lxml-4.2.6:\n", " Successfully uninstalled lxml-4.2.6\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "google-colab 1.0.0 requires requests~=2.23.0, but you have requests 2.27.1 which is incompatible.\n", "datascience 0.10.6 requires folium==0.2.1, but you have folium 0.8.3 which is incompatible.\u001b[0m\n", "Successfully installed cryptography-36.0.2 dlx-1.0.4 docplex-2.23.222 fastjsonschema-2.15.3 inflection-0.5.1 lxml-4.8.0 ntlm-auth-1.5.0 ply-3.11 python-constraint-1.4.0 qiskit-0.32.1 qiskit-aer-0.9.1 qiskit-aqua-0.9.5 qiskit-ibmq-provider-0.18.1 qiskit-ignis-0.6.0 qiskit-terra-0.18.3 quandl-3.7.0 requests-2.27.1 requests-ntlm-1.1.0 retworkx-0.11.0 symengine-0.9.2 tweedledum-1.1.1 websocket-client-1.3.1 yfinance-0.1.70\n" ] } ], "source": [ "!pip install qiskit==0.32.1" ] }, { "cell_type": "code", "source": [ "!git clone https://github.com/zhijian-liu/torchpack.git" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "nu5fogBIrj19", "outputId": "9f4c488e-f0e5-4d1e-91c3-df8fc8610fda" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'torchpack'...\n", "remote: Enumerating objects: 3924, done.\u001b[K\n", "remote: Counting objects: 100% (329/329), done.\u001b[K\n", "remote: Compressing objects: 100% (217/217), done.\u001b[K\n", "remote: Total 3924 (delta 174), reused 210 (delta 94), pack-reused 3595\u001b[K\n", "Receiving objects: 100% (3924/3924), 1012.96 KiB | 16.08 MiB/s, done.\n", "Resolving deltas: 100% (2521/2521), done.\n" ] } ] }, { "cell_type": "code", "source": [ "%cd torchpack" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8ILB0aparryz", "outputId": "ad2e18b2-baa3-4923-ee47-bf3054cff807" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "/content/torchpack\n" ] } ] }, { "cell_type": "code", "source": [ "!pip install ." ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4kuK88QIruTL", "outputId": "e162a7a9-aa8e-4686-9e3f-9ebc0cacb0e2" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Processing /content/torchpack\n", "\u001b[33m DEPRECATION: A future pip version will change local packages to be built in-place without first copying to a temporary directory. We recommend you use --use-feature=in-tree-build to test your packages with this new behavior before it becomes the default.\n", " pip 21.3 will remove support for this functionality. You can find discussion regarding this at https://github.com/pypa/pip/issues/7555.\u001b[0m\n", "Collecting loguru\n", " Downloading loguru-0.6.0-py3-none-any.whl (58 kB)\n", "\u001b[K |████████████████████████████████| 58 kB 3.3 MB/s \n", "\u001b[?25hCollecting multimethod\n", " Downloading multimethod-1.7-py3-none-any.whl (9.5 kB)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from torchpack==0.3.1) (1.21.5)\n", "Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/dist-packages (from torchpack==0.3.1) (3.13)\n", "Requirement already satisfied: torch>=1.5.0 in /usr/local/lib/python3.7/dist-packages (from torchpack==0.3.1) (1.10.0+cu111)\n", "Requirement already satisfied: torchvision in /usr/local/lib/python3.7/dist-packages (from torchpack==0.3.1) (0.11.1+cu111)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.7/dist-packages (from torchpack==0.3.1) (4.63.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from torch>=1.5.0->torchpack==0.3.1) (3.10.0.2)\n", "Requirement already satisfied: pillow!=8.3.0,>=5.3.0 in /usr/local/lib/python3.7/dist-packages (from torchvision->torchpack==0.3.1) (7.1.2)\n", "Building wheels for collected packages: torchpack\n", " Building wheel for torchpack (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for torchpack: filename=torchpack-0.3.1-py3-none-any.whl size=34632 sha256=6e05974cb0c985fbc1e541043be80ee7da98c12608ff883943ee70843656c42a\n", " Stored in directory: /tmp/pip-ephem-wheel-cache-njdff8xi/wheels/4f/c9/1a/b8f5a127071f807be5ee14d3d364b428a891ad020a962af415\n", "Successfully built torchpack\n", "Installing collected packages: multimethod, loguru, torchpack\n", "Successfully installed loguru-0.6.0 multimethod-1.7 torchpack-0.3.1\n" ] } ] }, { "cell_type": "code", "source": [ "%cd .." ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "VUfZPto0sBmT", "outputId": "10f6d93b-49f6-4c05-a8bc-236601e2655e" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "/content\n" ] } ] }, { "cell_type": "markdown", "metadata": { "id": "F2-0UpluOIQl" }, "source": [ "Download and cd to the repo." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6sNqLl9tjjAf", "outputId": "4ea47dc0-5146-471b-e3e6-769f887a2358" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Cloning into 'torchquantum'...\n", "remote: Enumerating objects: 10990, done.\u001b[K\n", "remote: Counting objects: 100% (7782/7782), done.\u001b[K\n", "remote: Compressing objects: 100% (3963/3963), done.\u001b[K\n", "remote: Total 10990 (delta 3911), reused 7243 (delta 3410), pack-reused 3208\u001b[K\n", "Receiving objects: 100% (10990/10990), 6.24 MiB | 18.09 MiB/s, done.\n", "Resolving deltas: 100% (5878/5878), done.\n" ] } ], "source": [ "!git clone https://github.com/mit-han-lab/torchquantum.git" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "0c2MCqFXjxkD", "outputId": "ba3c94cc-d7a6-4430-da0c-abb3f81ea0c8" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "/content/torchquantum\n" ] } ], "source": [ "%cd torchquantum" ] }, { "cell_type": "markdown", "metadata": { "id": "PO1xLbaOOxWk" }, "source": [ "Install torch-quantum." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3c6nfq3KkVXG", "outputId": "9b305639-c241-47a8-9341-f7ed2cd651ea" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Obtaining file:///content/torchquantum\n", "Requirement already satisfied: numpy>=1.19.2 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (1.21.5)\n", "Requirement already satisfied: torchvision>=0.9.0.dev20210130 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (0.11.1+cu111)\n", "Requirement already satisfied: tqdm>=4.56.0 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (4.63.0)\n", "Requirement already satisfied: setuptools>=52.0.0 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (57.4.0)\n", "Requirement already satisfied: torch>=1.8.0 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (1.10.0+cu111)\n", "Requirement already satisfied: torchpack>=0.3.0 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (0.3.1)\n", "Requirement already satisfied: qiskit>=0.32.0 in /usr/local/lib/python3.7/dist-packages (from torchquantum==0.1.0) (0.32.1)\n", "Collecting matplotlib>=3.3.2\n", " Downloading matplotlib-3.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (11.2 MB)\n", "\u001b[K |████████████████████████████████| 11.2 MB 5.1 MB/s \n", "\u001b[?25hCollecting pathos>=0.2.7\n", " Downloading pathos-0.2.8-py2.py3-none-any.whl (81 kB)\n", "\u001b[K |████████████████████████████████| 81 kB 11.2 MB/s \n", "\u001b[?25hRequirement already satisfied: python-dateutil>=2.7 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (2.8.2)\n", "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (7.1.2)\n", "Collecting fonttools>=4.22.0\n", " Downloading fonttools-4.31.2-py3-none-any.whl (899 kB)\n", "\u001b[K |████████████████████████████████| 899 kB 54.9 MB/s \n", "\u001b[?25hRequirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (0.11.0)\n", "Requirement already satisfied: pyparsing>=2.2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (3.0.7)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (21.3)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib>=3.3.2->torchquantum==0.1.0) (1.4.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from kiwisolver>=1.0.1->matplotlib>=3.3.2->torchquantum==0.1.0) (3.10.0.2)\n", "Collecting ppft>=1.6.6.4\n", " Downloading ppft-1.6.6.4-py3-none-any.whl (65 kB)\n", "\u001b[K |████████████████████████████████| 65 kB 4.5 MB/s \n", "\u001b[?25hRequirement already satisfied: multiprocess>=0.70.12 in /usr/local/lib/python3.7/dist-packages (from pathos>=0.2.7->torchquantum==0.1.0) (0.70.12.2)\n", "Requirement already satisfied: dill>=0.3.4 in /usr/local/lib/python3.7/dist-packages (from pathos>=0.2.7->torchquantum==0.1.0) (0.3.4)\n", "Collecting pox>=0.3.0\n", " Downloading pox-0.3.0-py2.py3-none-any.whl (30 kB)\n", "Requirement already satisfied: six>=1.7.3 in /usr/local/lib/python3.7/dist-packages (from ppft>=1.6.6.4->pathos>=0.2.7->torchquantum==0.1.0) (1.15.0)\n", "Requirement already satisfied: qiskit-aqua==0.9.5 in /usr/local/lib/python3.7/dist-packages (from qiskit>=0.32.0->torchquantum==0.1.0) (0.9.5)\n", "Requirement already satisfied: qiskit-ignis==0.6.0 in /usr/local/lib/python3.7/dist-packages (from qiskit>=0.32.0->torchquantum==0.1.0) (0.6.0)\n", "Requirement already satisfied: qiskit-terra==0.18.3 in /usr/local/lib/python3.7/dist-packages (from qiskit>=0.32.0->torchquantum==0.1.0) (0.18.3)\n", "Requirement already satisfied: qiskit-aer==0.9.1 in /usr/local/lib/python3.7/dist-packages (from qiskit>=0.32.0->torchquantum==0.1.0) (0.9.1)\n", "Requirement already satisfied: qiskit-ibmq-provider==0.18.1 in /usr/local/lib/python3.7/dist-packages (from qiskit>=0.32.0->torchquantum==0.1.0) (0.18.1)\n", "Requirement already satisfied: scipy>=1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aer==0.9.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.4.1)\n", "Requirement already satisfied: h5py<3.3.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (3.1.0)\n", "Requirement already satisfied: sympy>=1.3 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.7.1)\n", "Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.3.5)\n", "Requirement already satisfied: fastdtw<=0.3.4 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (0.3.4)\n", "Requirement already satisfied: dlx<=1.0.4 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.0.4)\n", "Requirement already satisfied: psutil>=5 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (5.4.8)\n", "Requirement already satisfied: quandl in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (3.7.0)\n", "Requirement already satisfied: yfinance>=0.1.62 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (0.1.70)\n", "Requirement already satisfied: docplex>=2.21.207 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (2.23.222)\n", "Requirement already satisfied: retworkx>=0.8.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (0.11.0)\n", "Requirement already satisfied: scikit-learn>=0.20.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.0.2)\n", "Requirement already satisfied: requests>=2.19 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (2.27.1)\n", "Requirement already satisfied: websocket-client>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.3.1)\n", "Requirement already satisfied: urllib3>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.24.3)\n", "Requirement already satisfied: requests-ntlm>=1.1.0 in /usr/local/lib/python3.7/dist-packages (from qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.1.0)\n", "Requirement already satisfied: jsonschema>=2.6 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (4.3.3)\n", "Requirement already satisfied: symengine>0.7 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (0.9.2)\n", "Requirement already satisfied: tweedledum<2.0,>=1.1 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (1.1.1)\n", "Requirement already satisfied: ply>=3.10 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (3.11)\n", "Requirement already satisfied: python-constraint>=1.4 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (1.4.0)\n", "Requirement already satisfied: fastjsonschema>=2.10 in /usr/local/lib/python3.7/dist-packages (from qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (2.15.3)\n", "Requirement already satisfied: cached-property in /usr/local/lib/python3.7/dist-packages (from h5py<3.3.0->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.5.2)\n", "Requirement already satisfied: pyrsistent!=0.17.0,!=0.17.1,!=0.17.2,>=0.14.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (0.18.1)\n", "Requirement already satisfied: attrs>=17.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (21.4.0)\n", "Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (4.11.3)\n", "Requirement already satisfied: importlib-resources>=1.4.0 in /usr/local/lib/python3.7/dist-packages (from jsonschema>=2.6->qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (5.4.0)\n", "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.7/dist-packages (from importlib-resources>=1.4.0->jsonschema>=2.6->qiskit-terra==0.18.3->qiskit>=0.32.0->torchquantum==0.1.0) (3.7.0)\n", "Requirement already satisfied: charset-normalizer~=2.0.0 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (2.0.12)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (2021.10.8)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (2.10)\n", "Requirement already satisfied: ntlm-auth>=1.0.2 in /usr/local/lib/python3.7/dist-packages (from requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.5.0)\n", "Requirement already satisfied: cryptography>=1.3 in /usr/local/lib/python3.7/dist-packages (from requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (36.0.2)\n", "Requirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.7/dist-packages (from cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (1.15.0)\n", "Requirement already satisfied: pycparser in /usr/local/lib/python3.7/dist-packages (from cffi>=1.12->cryptography>=1.3->requests-ntlm>=1.1.0->qiskit-ibmq-provider==0.18.1->qiskit>=0.32.0->torchquantum==0.1.0) (2.21)\n", "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.1.0)\n", "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.20.0->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (3.1.0)\n", "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.7/dist-packages (from sympy>=1.3->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (1.2.1)\n", "Requirement already satisfied: multimethod in /usr/local/lib/python3.7/dist-packages (from torchpack>=0.3.0->torchquantum==0.1.0) (1.7)\n", "Requirement already satisfied: loguru in /usr/local/lib/python3.7/dist-packages (from torchpack>=0.3.0->torchquantum==0.1.0) (0.6.0)\n", "Requirement already satisfied: pyyaml in /usr/local/lib/python3.7/dist-packages (from torchpack>=0.3.0->torchquantum==0.1.0) (3.13)\n", "Requirement already satisfied: multitasking>=0.0.7 in /usr/local/lib/python3.7/dist-packages (from yfinance>=0.1.62->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (0.0.10)\n", "Requirement already satisfied: lxml>=4.5.1 in /usr/local/lib/python3.7/dist-packages (from yfinance>=0.1.62->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (4.8.0)\n", "Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (2018.9)\n", "Requirement already satisfied: inflection>=0.3.1 in /usr/local/lib/python3.7/dist-packages (from quandl->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (0.5.1)\n", "Requirement already satisfied: more-itertools in /usr/local/lib/python3.7/dist-packages (from quandl->qiskit-aqua==0.9.5->qiskit>=0.32.0->torchquantum==0.1.0) (8.12.0)\n", "Installing collected packages: ppft, pox, fonttools, pathos, matplotlib, torchquantum\n", " Attempting uninstall: matplotlib\n", " Found existing installation: matplotlib 3.2.2\n", " Uninstalling matplotlib-3.2.2:\n", " Successfully uninstalled matplotlib-3.2.2\n", " Running setup.py develop for torchquantum\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "albumentations 0.1.12 requires imgaug<0.2.7,>=0.2.5, but you have imgaug 0.2.9 which is incompatible.\u001b[0m\n", "Successfully installed fonttools-4.31.2 matplotlib-3.5.1 pathos-0.2.8 pox-0.3.0 ppft-1.6.6.4 torchquantum-0.1.0\n" ] }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "matplotlib", "mpl_toolkits" ] } } }, "metadata": {} } ], "source": [ "!pip install --editable ." ] }, { "cell_type": "markdown", "metadata": { "id": "18tqleq4O3cX" }, "source": [ "Change PYTHONPATH and install other packages." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d7ZPp7FikrZz", "outputId": "48292375-0261-49a6-d2d8-4bc46a74725b" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "env: PYTHONPATH=.\n" ] } ], "source": [ "%env PYTHONPATH=." ] }, { "cell_type": "markdown", "metadata": { "id": "rhsBhV23PD4g" }, "source": [ "Run the following code to store a qiskit token. You can replace it with your own token from your IBMQ account if you like.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Iw9rQ6dcnrhe" }, "outputs": [], "source": [ "from qiskit import IBMQ\n", "IBMQ.save_account('0238b0afc0dc515fe7987b02706791d1719cb89b68befedc125eded0607e6e9e9f26d3eed482f66fdc45fdfceca3aab2edb9519d96b39e9c78040194b86e7858', overwrite=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Nvn9EkRH5fTs", "outputId": "a3089d81-7781-4c78-b24f-8b4b6697e041" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting matplotlib==3.1.3\n", " Downloading matplotlib-3.1.3-cp37-cp37m-manylinux1_x86_64.whl (13.1 MB)\n", "\u001b[K |████████████████████████████████| 13.1 MB 5.1 MB/s \n", "\u001b[?25hRequirement already satisfied: python-dateutil>=2.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (2.8.2)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (3.0.7)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (0.11.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (1.4.0)\n", "Requirement already satisfied: numpy>=1.11 in /usr/local/lib/python3.7/dist-packages (from matplotlib==3.1.3) (1.21.5)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.7/dist-packages (from kiwisolver>=1.0.1->matplotlib==3.1.3) (3.10.0.2)\n", "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.1->matplotlib==3.1.3) (1.15.0)\n", "Installing collected packages: matplotlib\n", " Attempting uninstall: matplotlib\n", " Found existing installation: matplotlib 3.5.1\n", " Uninstalling matplotlib-3.5.1:\n", " Successfully uninstalled matplotlib-3.5.1\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "torchquantum 0.1.0 requires matplotlib>=3.3.2, but you have matplotlib 3.1.3 which is incompatible.\n", "albumentations 0.1.12 requires imgaug<0.2.7,>=0.2.5, but you have imgaug 0.2.9 which is incompatible.\u001b[0m\n", "Successfully installed matplotlib-3.1.3\n" ] }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "matplotlib", "mpl_toolkits" ] } } }, "metadata": {} } ], "source": [ "!pip install matplotlib==3.1.3" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sTwecaw_YyCX", "outputId": "44c397df-cf6f-4664-9332-fe740caad57c" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "aerbackend.py example2 example4 example6 README.md\n", "example1 example3 example5 example7\n" ] } ], "source": [ "!ls artifact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "SNWF7ZlbVwVZ" }, "outputs": [], "source": [ "!cp artifact/aerbackend.py ../../usr/local/lib/python3.7/dist-packages/qiskit/providers/aer/backends/ -r" ] }, { "cell_type": "markdown", "metadata": { "id": "QiOV-xIGKXVK" }, "source": [ "### Import modules" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "N5acspJ8G1n3", "outputId": "a4c4d79d-8c7f-4a3b-9e7f-61be5033326d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "\n", " WARNING: The qiskit parameterization bug is not fixed!\n", "\n", "run python fix_qiskit_parameterization.py to fix it!\n" ] } ], "source": [ "import argparse\n", "import os\n", "import sys\n", "import pdb\n", "import json\n", "import numpy as np\n", "import torch\n", "import torch.backends.cudnn\n", "import torch.cuda\n", "import torch.nn\n", "import torch.utils.data\n", "import torchquantum as tq\n", "\n", "from torch.optim.lr_scheduler import CosineAnnealingLR\n", "\n", "from torchquantum.datasets import MNIST\n", "from examples.gradient_pruning.q_models import *\n", "from torchpack.callbacks import (InferenceRunner, MeanAbsoluteError,\n", " MaxSaver, MinSaver,\n", " Saver, SaverRestore, CategoricalAccuracy)\n", "from examples.gradient_pruning.callbacks import LegalInferenceRunner, SubnetInferenceRunner, \\\n", " NLLError, TrainerRestore, AddNoiseInferenceRunner, GradRestore\n", "\n", "# from torchpack import distributed as dist\n", "from torchpack.environ import set_run_dir\n", "from torchpack.utils.config import configs\n", "from torchpack.utils.logging import logger\n" ] }, { "cell_type": "markdown", "source": [ "###Function to build the callbacks" ], "metadata": { "id": "RVT-qeHDiqPz" } }, { "cell_type": "code", "source": [ "def get_subcallbacks(config):\n", " subcallbacks = []\n", " for subcallback in config:\n", " if subcallback['metrics'] == 'CategoricalAccuracy':\n", " subcallbacks.append(\n", " CategoricalAccuracy(name=subcallback['name'])\n", " )\n", " elif subcallback['metrics'] == 'MeanAbsoluteError':\n", " subcallbacks.append(\n", " MeanAbsoluteError(name=subcallback['name'])\n", " )\n", " elif subcallback['metrics'] == 'NLLError':\n", " subcallbacks.append(\n", " NLLError(name=subcallback['name'])\n", " )\n", " else:\n", " raise NotImplementedError(subcallback['metrics'])\n", " return subcallbacks\n", "\n", "\n", "def make_callbacks(dataflow):\n", " callbacks = []\n", " for config in configs['callbacks']:\n", " if config['callback'] == 'InferenceRunner':\n", " callback = InferenceRunner(\n", " dataflow=dataflow[config['split']],\n", " callbacks=get_subcallbacks(config['subcallbacks'])\n", " )\n", " elif config['callback'] == 'LegalInferenceRunner':\n", " callback = LegalInferenceRunner(\n", " dataflow=dataflow[config['split']],\n", " callbacks=get_subcallbacks(config['subcallbacks'])\n", " )\n", " elif config['callback'] == 'SubnetInferenceRunner':\n", " callback = SubnetInferenceRunner(\n", " dataflow=dataflow[config['split']],\n", " callbacks=get_subcallbacks(config['subcallbacks']),\n", " subnet=config['subnet']\n", " )\n", " elif config['callback'] == 'AddNoiseInferenceRunner':\n", " callback = AddNoiseInferenceRunner(\n", " dataflow=dataflow[config['split']],\n", " callbacks=get_subcallbacks(config['subcallbacks']),\n", " noise_total_prob=config['noise_total_prob']\n", " )\n", " elif config['callback'] == 'SaverRestore':\n", " callback = SaverRestore()\n", " elif config['callback'] == 'Saver':\n", " callback = Saver(max_to_keep=config['max_to_keep'])\n", " elif config['callback'] == 'MaxSaver':\n", " callback = MaxSaver(config['name'])\n", " elif config['callback'] == 'MinSaver':\n", " callback = MinSaver(config['name'])\n", " elif config['callback'] == 'GradRestore':\n", " callback = GradRestore()\n", " else:\n", " raise NotImplementedError(config['callback'])\n", " callbacks.append(callback)\n", "\n", " return callbacks\n" ], "metadata": { "id": "CR2gWhh2imuz" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "###Load configs\n", "The config file describes everything about the model structure and the hyper-parameters of the training process, including batch size, learning rate, number of epochs, and whether to use qiskit's processor(we use qiskit's noise processor to train and test our quantum circuit in the following example)." ], "metadata": { "id": "p-1_Yfa8z9HM" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "iBnWI5yqKfMB" }, "outputs": [], "source": [ "configs.load('examples/gradient_pruning/configs.yml')\n", "if configs.debug.set_seed:\n", " torch.manual_seed(configs.debug.seed)\n", " np.random.seed(configs.debug.seed)" ] }, { "cell_type": "markdown", "source": [ "###Function to train\n", "In this function, we create the dataset and the model according to configs. And we train our quantum model using qiskit's noise processor. The function will return a list of model accuracy after each epoch with respect to the number of inferences." ], "metadata": { "id": "DgyvEq-QCIKC" } }, { "cell_type": "code", "source": [ "def train_with_configs(configs):\n", " if os.path.exists(\"runs/probabilistic_gradient_pruning/summary/scalars.jsonl\"):\n", " os.remove(\"runs/probabilistic_gradient_pruning/summary/scalars.jsonl\")\n", " else:\n", " print(\"runs/probabilistic_gradient_pruning/summary/scalars.jsonl does not exist\")\n", "\n", " device = torch.device('cuda')\n", " if isinstance(configs.optimizer.lr, str):\n", " configs.optimizer.lr = eval(configs.optimizer.lr)\n", " dataset = MNIST(\n", " root='./mnist_data',\n", " train_valid_split_ratio=[0.9, 0.1],\n", " digits_of_interest=[0, 1, 2, 3],\n", " n_test_samples=30,\n", " n_train_samples=50,\n", " n_valid_samples=30,\n", " )\n", " dataflow = dict()\n", " for split in dataset:\n", " sampler = torch.utils.data.RandomSampler(dataset[split])\n", " dataflow[split] = torch.utils.data.DataLoader(\n", " dataset[split],\n", " batch_size=configs.run.bsz,\n", " sampler=sampler,\n", " num_workers=configs.run.workers_per_gpu,\n", " pin_memory=True)\n", "\n", " model = QMultiFCModel0(configs.model.arch)\n", "\n", " if configs.qiskit.use_qiskit_train or configs.qiskit.use_qiskit_valid:\n", " from torchquantum.plugin import QiskitProcessor\n", " processor = QiskitProcessor(use_real_qc=configs.qiskit.use_real_qc, n_shots=configs.qiskit.n_shots, backend_name=configs.qiskit.backend_name)\n", " model.set_qiskit_processor(processor)\n", "\n", " model.to(device)\n", "\n", " total_params = sum(p.numel() for p in model.parameters())\n", " logger.info(f'Model Size: {total_params}')\n", "\n", " criterion = torch.nn.NLLLoss()\n", " optimizer = torch.optim.Adam(\n", " model.parameters(),\n", " lr=configs.optimizer.lr,\n", " weight_decay=configs.optimizer.weight_decay)\n", " scheduler = CosineAnnealingLR(optimizer, T_max=configs.run.n_epochs)\n", "\n", " from examples.gradient_pruning.trainers import ParamsShiftTrainer\n", " trainer = ParamsShiftTrainer(model=model,\n", " criterion=criterion,\n", " optimizer=optimizer,\n", " scheduler=scheduler)\n", "\n", " trainer.set_use_qiskit(configs)\n", " run_dir = 'runs/probabilistic_gradient_pruning/'\n", " set_run_dir(run_dir)\n", "\n", " logger.info(' '.join([sys.executable] + sys.argv))\n", "\n", " logger.info(f'Training started: \"{run_dir}\".' + '\\n' +\n", " f'{configs}')\n", "\n", " callbacks = make_callbacks(dataflow)\n", "\n", " trainer.train_with_defaults(\n", " dataflow['train'],\n", " num_epochs=configs.run.n_epochs,\n", " callbacks=callbacks)\n", " \n", " num_forward = []\n", " accu = []\n", " with open('runs/probabilistic_gradient_pruning/summary/scalars.jsonl', 'r') as json_file:\n", " json_list = list(json_file)\n", "\n", " for json_str in json_list:\n", " result = json.loads(json_str)\n", " if 'acc/test' in result.keys():\n", " num_forward.append(result['global_step'])\n", " accu.append(result['acc/test'])\n", " \n", "\n", " return num_forward, accu" ], "metadata": { "id": "bQ-PuL-Yl2iX" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "num_forward1, accu1 = train_with_configs(configs)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000, "referenced_widgets": [ "984a84fd31394893982b407458b158c0", "d5b97947c6fd41a6b2261075e7d51a17", "2c366c0562514d4a91ebf3c0a8dd92f5", "b4c28e4ae810469eb86989f65ddc2fac", "8f5b79091de44907ae4bb65776e36e57", "a94809afc593461d89ae43b515343e21", "f05ba0ac85924f09b725986b75229641", "ec19b6c5c076455cba8ac7829dd3bea4", "79f9173fdf2f4bb38575ec9890ae6582", "c5d1f22bae084b34ad329f395e303f65", "431ab0775cd24e0aac1cb5d9bbfd28b7", "21cce0da10924866945668b43dd6f001", "ab27c90e14564fa2a6e6475bd5cae58e", "835ceffc710949d1b889ff4c88239c9f", "80c43c2bd4be4911b8ff13c92a418807", "bad0c0cabdd74ea4a0eda0a1270e0467", "f9f36805261a458d9386112f5ee77d8a", "d6d115d747824e6aba96aeffa27f3e36", "08d552b01d4249eaa6ff298bfe38095d", "953a5e42cb83447890ef0344138ea40f", "37d4936edd014242b86892a1117163ac", "06a9e0fe2e9348e99733ce4740d84cd1", "ab04b01db9d64ebd8db324a7f7c0b458", "86839a4bd3864435be4fc01f78e92cc5", "2167dfa9c303438da9cf23ccf5404c4d", "866221d198014e3bb7704713355716e2", "23f752d2090f47a6a16655434d58c9f2", "dee9e79641b04bed99e79c9e38b279f3", "1f5ec641bc3c4d97bb31052e875ae488", "eb1be1b6ee00400c9deb93deb043e78b", "ea3b88d121004bb8aa01aeaa04223f27", "bb45770342ce4d95bfc6c64d1613798a", "3fe814105bf14a41a7456c8b4e2dff72", "ee8cd27242b74cd4a23b52a9ffea1274", "c313be7c587844cc82a1b54ca7db264b", "67899373abac4c469497ccb5d0014909", "ded7462dc49d4b49a43a477a90d5ec4f", "d42bc7e21a3f4b22b305efbb0fa56d20", "0ebe065d50404a9a91489c685f8d92bf", "d1c335cf8b1e42c1a41f594ecc763184", "a92996805543487c8493600f6e3438f7", "bb1787028d9e48db9117acbe747bf3bb", "19a003c4225e440c8f7b0b256eb5f485", "94370aa305e64294ae52786e2e06cc6c" ] }, "id": "9RKs52mWousi", "outputId": "bbd2024b-dcf9-4144-e8f3-3d24b574fb0f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "runs/probabilistic_gradient_pruning/summary/scalars.jsonl does not exist\n", "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n", "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ./mnist_data/MNIST/raw/train-images-idx3-ubyte.gz\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ " 0%| | 0/9912422 [00:00" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [ "pfwd2SNaOA4z" ], "name": "probabilistic gradient pruning", "provenance": [], "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "984a84fd31394893982b407458b158c0": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "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_d5b97947c6fd41a6b2261075e7d51a17", "IPY_MODEL_2c366c0562514d4a91ebf3c0a8dd92f5", "IPY_MODEL_b4c28e4ae810469eb86989f65ddc2fac" ], "layout": "IPY_MODEL_8f5b79091de44907ae4bb65776e36e57" } }, "d5b97947c6fd41a6b2261075e7d51a17": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_a94809afc593461d89ae43b515343e21", "placeholder": "​", "style": "IPY_MODEL_f05ba0ac85924f09b725986b75229641", "value": "" } }, "2c366c0562514d4a91ebf3c0a8dd92f5": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "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_ec19b6c5c076455cba8ac7829dd3bea4", "max": 9912422, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_79f9173fdf2f4bb38575ec9890ae6582", "value": 9912422 } }, "b4c28e4ae810469eb86989f65ddc2fac": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_c5d1f22bae084b34ad329f395e303f65", "placeholder": "​", "style": "IPY_MODEL_431ab0775cd24e0aac1cb5d9bbfd28b7", "value": " 9913344/? [00:00<00:00, 17048843.95it/s]" } }, "8f5b79091de44907ae4bb65776e36e57": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "a94809afc593461d89ae43b515343e21": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "f05ba0ac85924f09b725986b75229641": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "ec19b6c5c076455cba8ac7829dd3bea4": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "79f9173fdf2f4bb38575ec9890ae6582": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "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": "" } }, "c5d1f22bae084b34ad329f395e303f65": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "431ab0775cd24e0aac1cb5d9bbfd28b7": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "21cce0da10924866945668b43dd6f001": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "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_ab27c90e14564fa2a6e6475bd5cae58e", "IPY_MODEL_835ceffc710949d1b889ff4c88239c9f", "IPY_MODEL_80c43c2bd4be4911b8ff13c92a418807" ], "layout": "IPY_MODEL_bad0c0cabdd74ea4a0eda0a1270e0467" } }, "ab27c90e14564fa2a6e6475bd5cae58e": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_f9f36805261a458d9386112f5ee77d8a", "placeholder": "​", "style": "IPY_MODEL_d6d115d747824e6aba96aeffa27f3e36", "value": "" } }, "835ceffc710949d1b889ff4c88239c9f": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "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_08d552b01d4249eaa6ff298bfe38095d", "max": 28881, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_953a5e42cb83447890ef0344138ea40f", "value": 28881 } }, "80c43c2bd4be4911b8ff13c92a418807": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_37d4936edd014242b86892a1117163ac", "placeholder": "​", "style": "IPY_MODEL_06a9e0fe2e9348e99733ce4740d84cd1", "value": " 29696/? [00:00<00:00, 881162.29it/s]" } }, "bad0c0cabdd74ea4a0eda0a1270e0467": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "f9f36805261a458d9386112f5ee77d8a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "d6d115d747824e6aba96aeffa27f3e36": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "08d552b01d4249eaa6ff298bfe38095d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "953a5e42cb83447890ef0344138ea40f": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "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": "" } }, "37d4936edd014242b86892a1117163ac": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "06a9e0fe2e9348e99733ce4740d84cd1": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "ab04b01db9d64ebd8db324a7f7c0b458": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "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_86839a4bd3864435be4fc01f78e92cc5", "IPY_MODEL_2167dfa9c303438da9cf23ccf5404c4d", "IPY_MODEL_866221d198014e3bb7704713355716e2" ], "layout": "IPY_MODEL_23f752d2090f47a6a16655434d58c9f2" } }, "86839a4bd3864435be4fc01f78e92cc5": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_dee9e79641b04bed99e79c9e38b279f3", "placeholder": "​", "style": "IPY_MODEL_1f5ec641bc3c4d97bb31052e875ae488", "value": "" } }, "2167dfa9c303438da9cf23ccf5404c4d": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "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_eb1be1b6ee00400c9deb93deb043e78b", "max": 1648877, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_ea3b88d121004bb8aa01aeaa04223f27", "value": 1648877 } }, "866221d198014e3bb7704713355716e2": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_bb45770342ce4d95bfc6c64d1613798a", "placeholder": "​", "style": "IPY_MODEL_3fe814105bf14a41a7456c8b4e2dff72", "value": " 1649664/? [00:00<00:00, 17771137.32it/s]" } }, "23f752d2090f47a6a16655434d58c9f2": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "dee9e79641b04bed99e79c9e38b279f3": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "1f5ec641bc3c4d97bb31052e875ae488": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "eb1be1b6ee00400c9deb93deb043e78b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "ea3b88d121004bb8aa01aeaa04223f27": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "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": "" } }, "bb45770342ce4d95bfc6c64d1613798a": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "3fe814105bf14a41a7456c8b4e2dff72": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "ee8cd27242b74cd4a23b52a9ffea1274": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "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_c313be7c587844cc82a1b54ca7db264b", "IPY_MODEL_67899373abac4c469497ccb5d0014909", "IPY_MODEL_ded7462dc49d4b49a43a477a90d5ec4f" ], "layout": "IPY_MODEL_d42bc7e21a3f4b22b305efbb0fa56d20" } }, "c313be7c587844cc82a1b54ca7db264b": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_0ebe065d50404a9a91489c685f8d92bf", "placeholder": "​", "style": "IPY_MODEL_d1c335cf8b1e42c1a41f594ecc763184", "value": "" } }, "67899373abac4c469497ccb5d0014909": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "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_a92996805543487c8493600f6e3438f7", "max": 4542, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_bb1787028d9e48db9117acbe747bf3bb", "value": 4542 } }, "ded7462dc49d4b49a43a477a90d5ec4f": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "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_19a003c4225e440c8f7b0b256eb5f485", "placeholder": "​", "style": "IPY_MODEL_94370aa305e64294ae52786e2e06cc6c", "value": " 5120/? [00:00<00:00, 163324.13it/s]" } }, "d42bc7e21a3f4b22b305efbb0fa56d20": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "0ebe065d50404a9a91489c685f8d92bf": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "d1c335cf8b1e42c1a41f594ecc763184": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } }, "a92996805543487c8493600f6e3438f7": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "bb1787028d9e48db9117acbe747bf3bb": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "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": "" } }, "19a003c4225e440c8f7b0b256eb5f485": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "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 } }, "94370aa305e64294ae52786e2e06cc6c": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "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": "" } } } } }, "nbformat": 4, "nbformat_minor": 0 }