diff --git a/notebooks/ONNX_export_tutorial.ipynb b/notebooks/ONNX_export_tutorial.ipynb index e7a6659d2..19be798bd 100644 --- a/notebooks/ONNX_export_tutorial.ipynb +++ b/notebooks/ONNX_export_tutorial.ipynb @@ -5,6 +5,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -22,17 +25,15 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[33mWARNING: Ignoring invalid distribution ~nnx-weekly (/home/giuseppe/miniconda3/envs/torch_2.1/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mRequirement already satisfied: netron in /home/giuseppe/miniconda3/envs/torch_2.1/lib/python3.11/site-packages (7.2.9)\n", - "\u001b[33mWARNING: Ignoring invalid distribution ~nnx-weekly (/home/giuseppe/miniconda3/envs/torch_2.1/lib/python3.11/site-packages)\u001b[0m\u001b[33m\n", - "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" + "Requirement already satisfied: netron in /scratch/fabian/miniforge3/envs/torchgpu/lib/python3.11/site-packages (7.4.5)\n", + "Note: you may need to restart the kernel to use updated packages.\n" ] } ], @@ -45,6 +46,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -62,6 +66,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -88,6 +95,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -106,9 +116,12 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 2, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -127,9 +140,12 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -153,9 +169,12 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" }, @@ -168,7 +187,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Stopping http://localhost:8082\n", "Serving 'quant_linear_qcdq.onnx' at http://localhost:8082\n" ] }, @@ -187,10 +205,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 16, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -203,6 +221,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -219,6 +240,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -231,9 +255,12 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 5, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -260,9 +287,12 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 6, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" }, @@ -275,7 +305,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Stopping http://localhost:8083\n", "Serving 'quant_model_qcdq.onnx' at http://localhost:8083\n" ] }, @@ -294,10 +323,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -310,6 +339,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -327,6 +359,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -347,9 +382,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 7, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -378,9 +416,12 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 8, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" }, @@ -411,10 +452,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -427,6 +468,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -441,6 +485,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -459,9 +506,12 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 9, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -471,7 +521,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/giuseppe/Documents/git/brevitas/src/brevitas/export/onnx/standard/manager.py:26: UserWarning: ONNX opset version set to 13, override with opset_version=\n", + "/scratch/fabian/brevitas/src/brevitas/export/onnx/standard/manager.py:26: UserWarning: ONNX opset version set to 13, override with opset_version=\n", " warnings.warn(f\"ONNX opset version set to {DEFAULT_OPSET}, override with {ka}=\")\n" ] }, @@ -480,7 +530,7 @@ "text/plain": [ "ir_version: 7\n", "producer_name: \"pytorch\"\n", - "producer_version: \"2.1.0\"\n", + "producer_version: \"2.1.1\"\n", "graph {\n", " node {\n", " output: \"/input_quant/export_handler/Constant_output_0\"\n", @@ -528,7 +578,7 @@ " dims: 3\n", " dims: 3\n", " data_type: 3\n", - " raw_data: \"\\377\\006\\003\\006\\005\\002\\373\\006\\000\\374\\004\\377\\374\\005\\006\\374\\004\\376\\002\\005\\005\\006\\374\\371\\373\\002\\371\\374\\001\\002\\377\\002\\006\\376\\006\\373\\004\\005\\003\\007\\376\\372\\007\\374\\377\\005\\002\\375\\001\\374\\372\\375\\373\\003\\002\\372\\000\\377\\003\\006\\002\\377\\004\\373\\374\\371\\000\\373\\376\\372\\002\\006\\005\\005\\374\\003\\001\\006\\006\\001\\003\\375\\000\\006\\376\\000\\004\\004\\373\\372\\002\\002\\000\\002\\007\\001\\374\\376\\376\\377\\375\\377\\375\\006\\372\\371\\005\\004\\005\\372\\377\\004\\377\\373\\004\\373\\004\\007\\377\\000\\003\\373\\005\\003\\004\\376\\372\\371\\376\\377\\005\\005\\006\\001\\005\\376\\002\\006\\000\\000\\371\\005\\001\\003\\003\\003\\372\\003\\372\\002\\377\\374\\007\\000\\377\\005\\004\\006\\006\\374\\000\\006\\375\\005\\376\\374\\000\\000\\004\\002\\374\\006\\374\\005\\004\\006\\376\\001\\372\\376\\006\\374\\371\\001\\005\\006\\375\\372\\373\\377\\377\\376\\000\\005\\377\\005\\006\\374\\003\\376\\003\\000\\376\\377\\374\\004\\375\\001\\376\\374\\374\\373\\000\\371\\377\\006\\002\\377\\375\\001\\003\\006\\372\\001\\002\\000\\373\\374\\000\\005\\003\\004\\003\\377\\004\\373\\376\\005\\376\\377\\375\\376\\003\\005\\005\\004\\004\\006\\004\\005\\375\\376\\373\\372\\006\\002\\375\\003\\001\\005\\003\\006\\372\\004\\375\\371\\377\\003\\374\\006\\376\\376\\373\\374\\377\\006\\001\\377\\372\\003\\001\\372\\006\\000\\377\\372\\372\\001\\000\\377\\371\\002\\373\\006\\373\\372\\002\\375\\374\\373\\376\\377\\377\\375\\374\\006\\003\\372\\003\\000\\007\\005\\371\\001\\372\\006\\373\\376\\006\\376\\000\\372\\007\\000\\000\\006\\006\\373\\006\\372\\005\\374\\376\\376\\373\\372\\006\\004\\372\\003\\377\\000\\005\\002\\374\\375\\373\\000\\000\\006\\004\\376\\001\\001\\003\\374\\003\\004\\004\\377\\007\\377\\376\\006\\005\\000\\371\\006\\002\\003\\377\\374\\377\\372\\377\\005\\377\\003\\000\\006\\375\\004\\372\\376\\005\\372\\001\\005\\006\\005\\002\\004\\001\\001\\007\\375\\004\\002\\007\\374\\006\\005\\000\\002\\372\\001\\377\\002\\372\\005\\007\\373\\377\\374\\001\\004\\005\\372\\001\\001\\377\\002\\007\\003\\373\\376\\377\\005\\006\\374\\002\\375\\002\\373\\001\\004\\377\\373\\003\\377\\006\\006\\376\\004\\373\\003\\375\\376\\374\\375\\376\\007\\000\\377\\371\\004\\373\\000\\374\\002\\377\\375\\005\\006\\372\\003\\002\\376\\007\\002\\003\\001\\000\\006\\004\\000\\001\\000\\376\\377\\000\\004\\006\\001\\000\\373\\006\\374\\000\\375\\377\\004\\006\\373\\006\\003\\006\\373\\373\\376\\007\\375\\377\\004\\374\\003\\001\\376\\374\\372\\001\\375\\004\\003\\002\\003\\373\\001\\003\\374\\001\\372\\003\\003\\004\\372\\007\\005\\004\\373\\372\\002\\377\\007\\003\\001\\001\\373\\375\\373\\373\\372\\375\\376\\375\\005\\376\\373\\374\\374\\000\\002\\373\\006\\003\\000\\005\\005\\000\\007\\004\\377\\373\\372\\004\\375\\375\\002\\007\\376\\000\\006\\376\\373\\372\\001\\373\\000\\377\\006\\002\\006\\375\\376\\002\\004\\006\\373\\001\\002\\372\\005\\376\\002\\001\\373\\377\\004\\001\\374\\373\\002\\004\\002\\377\\004\\372\\377\\373\\004\\375\\001\\372\\006\\376\\007\\371\\006\\003\\006\\373\\000\\377\\375\\005\\374\\005\\374\\005\\373\\372\\000\\372\\371\\002\\372\\375\\372\\377\\005\\371\\004\\375\\000\\006\\002\\006\\377\\375\\006\\006\\004\\005\\374\\372\\372\\372\\004\\377\\005\\377\\372\\375\\374\\371\\376\\000\\004\\005\\005\\003\\373\\371\\000\\375\\001\\376\\372\\006\\376\\374\\005\\005\\372\\372\\005\\003\\000\\001\\376\\372\\377\\004\\376\\001\\377\\375\\005\\005\\371\\377\\371\\377\\374\\007\\004\\007\\000\\377\\000\\376\\001\\376\\004\\375\\006\\003\\001\\005\\373\\004\\376\\005\\003\\377\\377\\001\\004\\375\\375\\376\\377\\373\\376\\000\\000\\005\\374\\372\\375\\000\\376\\000\\002\\376\\005\\004\\377\\004\\372\\006\\375\\377\\372\\376\\004\\374\\003\\004\\006\\375\\376\\003\\371\\374\\374\\000\\000\\371\\006\\002\\003\\376\\374\\374\\001\\375\\004\\003\\372\\007\\004\\005\\006\\004\\007\\372\\376\\371\\000\\007\\005\\005\\005\\001\\374\\374\\377\\006\\003\\000\\001\\004\\372\\375\\005\\003\\002\\374\\004\\005\\371\\373\\373\\377\\374\\372\\376\\002\\372\\377\\004\\000\\003\\002\\001\\004\\377\\374\\002\\004\\374\\377\\376\\006\\005\\002\\004\\005\\003\\004\\373\\377\\004\\373\\004\\003\\004\\001\\375\\005\\004\\001\\376\\005\\005\\000\\375\\374\\001\\373\\006\\000\\376\\005\\377\\001\\002\\374\\007\\005\\002\\000\\371\\375\\007\\000\\000\\005\\372\\002\\373\\004\\000\\374\\375\\006\\371\\007\\004\\007\\374\\001\\000\\006\\376\\375\\371\\375\\372\\002\\003\\004\\375\\002\\005\\373\\372\\377\\004\\373\\001\\004\\003\\007\\002\\373\\372\\373\\376\\374\\004\\003\\002\\000\\376\\375\\006\\376\\373\\006\\371\\006\\005\\005\\006\\000\\000\\377\\001\\372\\005\\377\\005\\376\\001\\373\\376\\001\\375\\371\\375\\372\\373\\002\\374\\002\\000\\006\\377\\003\\004\\371\\001\\375\\002\\004\\373\\001\\000\\371\\375\\372\\004\\003\\372\\002\\002\\374\\002\\001\\004\\371\\006\\007\\003\\373\\004\\003\\376\\005\\005\\003\\373\\374\\003\\004\\376\\000\\007\\002\\005\\376\\006\\004\\001\\375\\004\\377\\375\\006\\375\\001\\005\\376\\373\\377\\003\\374\\000\\371\\000\\006\\000\\007\\374\\376\\377\\004\\374\\004\\374\\374\\374\\004\\376\\001\\002\\376\\000\\000\\001\\002\\373\\377\\004\\007\\376\\373\\374\\375\\006\\376\\004\\007\\001\\001\\373\\372\\003\\001\\002\\003\\375\\000\\373\\004\\376\\000\\373\\377\\376\\376\\377\\001\\005\\000\\006\\372\\002\\006\\377\\376\\004\\003\\002\\376\\004\\006\\001\\002\\374\\000\\374\\005\\377\\375\\372\\006\\003\\373\\376\\004\\372\\002\\003\\377\\006\\376\\375\\377\\375\\001\\374\\004\\005\\000\\001\\372\\376\\376\\006\\377\\374\\001\\006\\375\\374\\373\\372\\002\\001\\001\\373\\006\\374\\375\\001\\377\\004\\001\\007\\371\\001\\000\\376\\006\\376\\375\\003\\374\\371\\376\\377\\376\\000\\001\\373\\006\\376\\375\\373\\002\\374\\375\\375\\001\\000\\003\\007\\004\\373\\003\\377\\372\\000\\376\\376\\371\\006\\373\\001\\377\\002\\003\\001\\377\\004\\007\\002\\375\\376\\004\\002\\005\\002\\001\\376\\001\\006\\002\\002\\375\\372\\003\\377\\000\\375\\004\\375\\377\\373\\374\\376\\001\\002\\373\\377\\377\\003\\005\\004\\373\\006\\001\\001\\003\\000\\005\\003\\377\\376\\377\\002\\004\\373\\003\\006\\004\\372\\004\\003\\002\\371\\376\\377\\377\\371\\373\\371\\377\\374\\006\\373\\005\\007\\372\\373\\377\\003\\003\\374\\377\\007\\004\\376\\000\\000\\003\\372\\007\\001\\372\\004\\000\\001\\003\\375\\005\\007\\001\\376\\001\\377\\371\\377\\004\\007\\374\\373\\373\\006\\007\\005\\001\\376\\376\\005\\373\\001\\005\\006\\004\\005\\372\\373\\002\\004\\006\\377\\375\\005\\376\\000\\373\\005\\006\\003\\002\\000\\372\\001\\001\\000\\000\\007\\372\\001\\374\\006\\003\\005\\376\\003\\002\\377\\373\\372\\375\\371\\377\\001\\374\\377\\001\\371\\006\\001\\376\\374\\006\\375\\001\\000\\007\\000\\375\\376\\376\\377\\001\\374\\000\\371\\373\\374\\003\\006\\006\\371\\001\\001\\376\\006\\377\\001\\375\\002\\376\\000\\377\\006\\000\\004\\372\\000\\000\\375\\000\\003\\002\\004\\372\\000\\001\\372\\002\\004\\003\\374\\373\\005\\006\\376\\007\\000\\000\\373\\003\\000\\007\\377\\376\\372\\007\\376\\003\\001\\374\\001\\006\\006\\001\\372\\002\\371\\006\\005\\374\\005\\005\\377\\373\\373\\003\\006\\002\\376\\371\\007\\374\\006\\372\\377\\375\\002\\000\\006\\006\\377\\373\\001\\372\\375\\004\\377\\372\\372\\001\\375\\003\\000\\373\\000\\373\\001\\004\\371\\377\\377\\372\\005\\372\\004\\005\\007\\002\\372\\001\\371\\002\\003\\006\\376\\372\\006\\373\\375\\376\\000\\373\\376\\007\\377\\000\\375\\000\\371\\006\\373\\007\\002\\004\\376\\372\\004\\002\\003\\000\\373\\005\\376\\377\\001\\004\\372\\377\\000\\003\\000\\373\\004\\005\\375\\006\\374\\004\\376\\003\\375\\374\\372\\001\\003\\374\\000\\002\\001\\004\\002\\374\\003\\001\\006\\374\\372\\003\\006\\375\\377\\374\\006\\001\\375\\005\\375\\002\\373\\007\\004\\373\\003\\372\\004\\374\\004\\373\\007\\000\\007\\377\\376\\374\\371\\004\\001\\375\\373\\005\\007\\377\\371\\372\\005\\372\\004\\377\\374\\372\\001\\002\\000\\001\\375\\003\\374\\375\\375\\376\\003\\006\\372\\006\\002\\006\\377\\375\\377\\005\\006\\005\\374\\377\\372\\373\\004\\003\\376\\006\\373\\006\\374\\002\\006\\005\\006\\371\\005\\004\\372\\001\\004\\371\\003\\005\\004\\374\\003\\373\\376\\374\\005\\003\\000\\006\\373\\006\\376\\001\\376\\006\\372\\371\\005\\372\\375\\374\\002\\003\\375\\372\\000\\001\\001\\006\\000\\002\\374\\373\\377\\373\\001\\375\\000\\000\\001\\003\\006\\374\\002\\375\\000\\375\\002\\005\\001\\004\\000\\377\\376\\005\\371\\377\\000\\002\\376\\372\\004\\376\\372\\372\\003\\004\\003\\375\\001\\376\\002\\003\\371\\372\\377\\375\\005\\004\\376\\005\\004\\004\\376\\002\\372\\001\\373\\002\\000\\006\\376\\375\\007\\001\\000\\002\\374\\000\\377\\005\\372\\003\\000\\000\\000\\005\\006\\002\\001\\004\\000\\376\\375\\006\\004\\374\\376\\006\\002\\007\\006\\377\\006\\006\\376\\000\\002\\004\\374\\005\\373\\004\\375\\371\\376\\006\\000\\373\\376\\376\\003\\007\\371\\377\\005\\376\\000\\005\\001\\375\\371\\001\\376\\373\\006\\005\\000\\376\\005\\001\\001\\376\\002\\002\\001\\375\\375\\372\\373\\004\\372\\000\\000\\006\\005\\375\\003\\005\\006\\372\\003\\001\\006\\377\\003\\003\\002\\001\\377\\004\\374\\006\\003\\374\\004\\373\\374\\006\\376\\005\\003\\374\\377\\376\\003\\006\\000\\375\\007\\003\\375\\371\\373\\374\\006\\004\\004\\373\\373\\374\\005\\001\\006\\005\\373\\000\\372\\371\\000\\004\\002\\375\\374\\006\\375\\373\\005\\376\\004\\007\\002\\002\\374\\375\\004\\371\\007\\007\\006\\003\\377\\004\\006\\007\\372\\006\\371\\371\\374\\002\\001\\371\\007\\377\\377\\005\\002\\001\\004\\002\\377\\377\\000\\373\\000\\004\\005\\004\\372\\377\\376\\373\\007\\007\\000\\000\\000\\001\\006\\006\\375\\002\\006\\372\\005\\000\\005\\003\\371\\371\\006\\001\\375\\002\\001\\377\\006\\376\\372\\373\\375\\001\\002\\004\\376\\001\\374\\373\\005\\374\\376\\006\\002\\377\\006\\373\\007\\002\\004\\374\\373\\374\\002\\004\\372\\006\\005\\375\\000\\371\\003\\376\\376\\002\\374\\001\\002\\004\\001\\003\\006\\002\\002\\371\\376\\006\\000\\371\\372\\007\\002\\005\\002\\372\\006\\000\\373\\000\\375\\001\\002\\004\\007\\374\\376\\000\\372\\003\\375\\377\\001\\375\\003\\372\\372\\000\\001\\002\\376\\373\\376\\004\\372\\004\\372\\377\\375\\001\\004\\375\\002\\371\\376\\006\\005\\374\\001\\372\\006\\000\\005\\000\\373\\377\\001\\007\\375\\374\\002\\007\\373\\373\\000\\376\\004\\006\\000\\372\\003\\002\\376\\007\\002\\002\\001\\374\\000\\373\\374\\005\\007\\375\\003\\004\\006\\371\\002\\006\\372\\372\\376\\371\\002\\002\\000\\006\\373\\374\\003\\374\\372\\004\\372\\000\\002\\374\\374\\007\\000\\001\\002\\004\\376\\001\\004\\375\\377\\003\\376\\004\\001\\376\\374\\377\\372\\374\\000\\003\\002\\371\\372\\377\\373\\005\\371\\373\\003\\372\\373\\004\\371\\006\\002\\006\\376\\002\\377\\375\\376\\371\\005\\006\\006\\005\\374\\004\\372\\006\\372\\004\\002\\006\\001\\007\\007\\002\\005\\001\\005\\005\\004\\004\\007\\372\\373\\004\\374\\373\\004\\374\\376\\376\\375\\372\\005\\002\\375\\005\\007\\375\\007\\006\\376\\374\\003\\377\\377\\000\\373\\372\\003\\371\\006\\000\\373\\374\\001\\003\\005\\372\\376\\374\\002\\003\\373\\377\\006\\376\\374\\004\\005\\375\\002\\004\\371\\004\\371\\377\\006\\001\\375\\005\\004\\374\\006\\376\\004\\000\\001\\372\\007\\374\\373\\373\\005\\372\\004\\001\\006\\374\\374\\001\\003\\000\\375\\371\\000\\004\\005\\003\\376\\377\\004\\004\\007\\000\\004\\007\\004\\376\\376\\003\\376\\001\\373\\377\\373\\002\\374\\003\\374\\373\\374\\376\\373\\003\\006\\375\\002\\373\\375\\374\\376\\373\\001\\375\\001\\375\\371\\001\\003\\002\\006\\374\\004\\371\\373\\004\\374\\377\\003\\374\\371\\000\\006\\003\\377\\374\\006\\372\\373\\376\\375\\002\\003\\001\\000\\005\\004\\374\\006\\377\\006\\371\\002\\377\\376\\000\\374\\376\\005\\373\\376\\004\\001\\377\\006\\001\\372\\001\\002\\375\\373\\000\\374\\007\\376\\006\\375\\375\\377\\004\\004\\002\\374\\000\\376\\002\\006\\376\\006\\003\\000\\376\\371\\005\\004\\373\\004\\005\\376\\000\\375\\375\\003\\371\\375\\002\\371\\007\\374\\377\\005\\006\\372\\000\\375\\373\\001\\375\\005\\374\\374\\001\\374\\004\\374\\002\\371\\000\\006\\005\\376\\373\\373\\004\\374\\004\\005\\004\\374\\005\\372\\373\\003\\377\\000\\005\\376\\375\\373\\376\\007\\003\\000\\004\\007\\374\\376\\000\\377\\375\\377\\000\\376\\373\\007\\005\\374\\004\\007\\006\\004\\001\\373\\377\\376\\372\\005\\007\\007\\004\\377\\374\\373\\004\\376\\373\\003\\004\\372\\004\\376\\373\\000\\000\\002\\374\\002\\000\\001\\003\\376\\007\\375\\374\\001\\003\\000\\374\\375\\001\\374\\002\\375\\003\\375\\001\\376\\007\\374\\003\\003\\000\\374\\001\\373\\000\\000\\003\\374\\375\\005\\377\\001\\374\\000\\375\\372\\372\\000\\376\\372\\001\\373\\007\\372\\373\\375\\375\\373\\001\\003\\372\\005\\376\\374\\374\\375\\002\\372\\376\\376\\374\\004\\374\\005\\004\\007\\375\\372\\004\\001\\374\\002\\001\\372\\006\\373\\003\\003\\000\\375\\373\\374\\004\\373\\374\\372\\372\\005\\002\\005\\003\\377\\376\\002\\005\\006\\374\\374\\003\\003\\377\\000\\371\\006\\007\\003\\001\\005\\005\\377\\373\\372\\005\\377\\005\\002\\373\\006\\001\\007\\006\\005\\373\\006\\003\\002\\000\\372\\002\\005\\373\\377\\001\\375\\372\\003\\374\\375\\004\\372\\372\\371\\376\\377\\374\\372\\004\\376\\001\\375\\000\\374\\000\\375\\376\\377\\372\\371\\003\\373\\005\\371\\001\\372\\373\\003\\374\\003\\376\\375\\003\\004\\372\\374\\002\\372\\006\\377\\373\\000\\373\\002\\375\\374\\005\\004\\003\\006\\377\\372\\375\\005\\376\\374\\001\\004\\371\\373\\377\\001\\372\\003\\372\\002\\372\\001\\001\\007\\000\\004\\002\\000\\375\\372\\371\\001\\001\\375\\371\\005\\000\\001\\377\\002\\376\\002\\000\\376\\373\\371\\373\\376\\000\\001\\375\\373\\372\\005\\005\\006\\001\\001\\373\\003\\006\\373\\006\\005\\003\\374\\006\\375\\007\\005\\374\\007\\007\\371\\376\\375\\374\\001\\376\\372\\372\\373\\000\\004\\376\\005\\372\\376\\000\\004\\375\\001\\000\\376\\376\\376\\004\\375\\002\\374\\371\\373\\371\\006\\000\\006\\005\\374\\005\\377\\373\\001\\375\\375\\000\\376\\373\\377\\372\\377\\375\\006\\005\\002\\001\\377\\374\\004\\001\\002\\006\\004\\375\\374\\000\\003\\003\\000\\000\\003\\373\\006\\374\\376\\007\\376\\003\\003\\373\\376\\003\\003\\000\\002\\004\\000\\375\\006\\373\\003\\001\\377\\372\\006\\005\\003\\376\\374\\002\\001\\001\\006\\005\\376\\377\\374\\003\\006\\372\\004\\002\\374\\004\\374\\374\\005\\004\\375\\377\\377\\001\\377\\005\\006\\372\\377\\377\\377\\002\\000\\377\\006\\373\\376\\376\\001\\376\\007\\004\\004\\371\\373\\371\\374\\376\\000\\000\\372\\003\\377\\004\\005\\004\\001\\376\\374\\003\\376\\007\\373\\006\\002\\006\\004\\004\\371\\372\\373\\006\\376\\005\\373\\373\\376\\000\\006\\006\\007\\377\\005\\001\\376\\374\\373\\005\\001\\373\\001\\004\\003\\000\\375\\005\\377\\003\\373\\377\\376\\375\\376\\000\\000\\000\\375\\375\\372\\000\\000\\003\\373\\000\\373\\001\\007\\006\\001\\374\\007\\002\\006\\004\\372\\377\\000\\375\\375\\000\\377\\002\\005\\001\\376\\371\\001\\374\\374\\373\\374\\372\\376\\005\\372\\003\\373\\007\\374\\005\\003\\000\\006\\005\\372\\004\\372\\003\\005\\373\\376\\003\\374\\377\\003\\373\\003\\005\\374\\001\\374\\375\\002\\374\\001\\000\\002\\374\\003\\007\\374\\373\\004\\000\\004\\003\\002\\000\\377\\371\\002\\377\\003\\006\\001\\000\\371\\377\\377\\376\\002\\000\\004\\003\\007\\005\\005\\375\\376\\375\\005\\375\\376\\007\\002\\004\\001\\003\\001\\001\\004\\375\\003\\000\\374\\004\\376\\001\\006\\376\\003\\374\\374\\373\\375\\003\\374\\000\\376\\001\\004\\374\\004\\003\\000\\005\\003\\374\\006\\375\\373\\376\\374\\373\\002\\004\\004\\006\\374\\004\\001\\001\\002\\373\\005\\004\\373\\375\\377\\377\\002\\005\\001\\375\\375\\006\\001\\373\\003\\377\\004\\003\\003\\006\\001\\376\\375\\375\\377\\373\\004\\373\\007\\375\\001\\376\\374\\002\\004\\003\\377\\376\\374\\005\\007\\000\\006\\006\\377\\007\\374\\376\\375\\371\\375\\003\\005\\005\\373\\373\\376\\002\\005\\375\\000\\375\\371\\000\\004\\006\\373\\372\\005\\372\\377\\375\\372\\006\\005\\375\\372\\377\\374\\375\\006\\002\\377\\374\\374\\006\\374\\004\\375\\373\\005\\006\\377\\000\\001\\377\\003\\375\\006\\376\\004\\002\\372\\372\\377\\005\\371\\376\\374\\002\\377\\373\\001\\006\\006\\372\\002\\004\\001\\005\\001\\002\\003\\372\\001\\377\\004\\003\\005\\003\\006\\372\\002\\376\\000\\000\\000\\376\\377\\373\\004\\002\\371\\373\\003\\374\\372\\005\\005\\373\\376\\003\\375\\372\\373\\375\\374\\006\\377\\004\\005\\004\\377\\000\\005\\375\\004\\005\\377\\003\\004\\002\\006\\374\\377\\005\\003\\376\\372\\003\\373\\374\\377\\004\\372\\002\\000\\002\\002\\375\\006\\001\\377\\374\\001\\374\\375\\372\\372\\004\\004\\001\\377\\003\\002\\375\\006\\007\\374\\376\\375\\372\\003\\376\\372\\373\\374\\004\\374\\002\\376\\003\\003\\372\\000\\375\\002\\007\\005\\375\\373\\000\\373\\373\\002\\372\\376\\005\\000\\004\\006\\375\\374\\006\\372\\377\\006\\000\\005\\004\\002\\375\\376\\000\\005\\003\\374\\375\\001\\372\\373\\005\\002\\376\\374\\007\\000\\003\\002\\005\\006\\374\\374\\006\\371\\375\\002\\005\\005\\372\\003\\372\\001\\000\\376\\377\\372\\372\\000\\004\\002\\002\\373\\376\\374\\373\\003\\373\\376\\002\\007\\007\\004\\003\\376\\373\\002\\003\\372\\001\\001\\001\\375\\376\\377\\372\\004\\002\\000\\003\\371\\002\\003\\377\\375\\001\\372\\372\\003\\005\\376\\007\\374\\374\\000\\374\\376\\004\\374\\004\\373\\004\\375\\000\\376\\001\\377\\004\\007\\373\\003\\371\\001\\375\\007\\002\\000\\001\\003\\006\\004\"\n", + " raw_data: \"\\377\\007\\001\\001\\375\\373\\005\\007\\000\\001\\375\\373\\376\\372\\377\\002\\006\\006\\005\\377\\374\\001\\005\\374\\372\\004\\006\\000\\376\\371\\371\\002\\373\\001\\374\\004\\004\\377\\003\\006\\002\\007\\373\\001\\376\\372\\375\\005\\003\\372\\005\\372\\377\\006\\006\\000\\006\\375\\003\\377\\005\\003\\003\\006\\001\\000\\373\\373\\007\\376\\002\\371\\001\\007\\373\\005\\001\\005\\372\\002\\002\\375\\006\\376\\002\\377\\374\\000\\001\\004\\374\\005\\377\\001\\001\\004\\006\\002\\005\\375\\000\\375\\000\\003\\001\\374\\372\\006\\001\\005\\002\\003\\377\\001\\001\\005\\004\\005\\376\\003\\374\\375\\004\\375\\007\\002\\373\\002\\001\\005\\005\\000\\005\\372\\004\\004\\007\\377\\372\\371\\003\\006\\002\\374\\005\\375\\000\\373\\001\\003\\376\\372\\371\\000\\374\\005\\377\\000\\373\\376\\000\\003\\000\\376\\377\\006\\003\\376\\377\\001\\004\\373\\374\\005\\372\\005\\004\\000\\375\\377\\003\\372\\005\\003\\007\\003\\004\\371\\005\\004\\375\\000\\374\\371\\002\\377\\371\\006\\372\\007\\002\\002\\003\\000\\374\\001\\377\\374\\005\\375\\001\\374\\373\\372\\372\\005\\375\\004\\372\\376\\371\\000\\003\\372\\373\\375\\000\\004\\001\\002\\002\\375\\004\\374\\003\\000\\375\\374\\374\\006\\372\\373\\002\\000\\000\\375\\377\\005\\375\\373\\001\\006\\002\\005\\006\\005\\001\\005\\000\\006\\374\\374\\007\\377\\006\\004\\373\\372\\376\\377\\374\\005\\001\\373\\002\\375\\376\\005\\007\\375\\002\\377\\376\\005\\002\\375\\371\\001\\001\\006\\001\\374\\000\\000\\002\\000\\006\\006\\000\\005\\376\\007\\372\\373\\371\\004\\003\\002\\376\\374\\374\\376\\371\\003\\372\\002\\001\\007\\374\\006\\376\\004\\375\\373\\372\\006\\006\\376\\371\\373\\005\\372\\376\\001\\000\\006\\377\\004\\373\\375\\373\\372\\003\\003\\372\\375\\000\\377\\002\\375\\007\\374\\000\\002\\375\\004\\006\\374\\374\\002\\372\\000\\003\\371\\372\\373\\376\\377\\377\\007\\002\\374\\375\\376\\005\\005\\001\\003\\375\\000\\374\\004\\003\\003\\377\\373\\001\\373\\007\\376\\372\\371\\374\\377\\004\\371\\001\\374\\372\\375\\005\\007\\002\\006\\372\\376\\372\\374\\005\\377\\374\\003\\003\\373\\373\\373\\004\\001\\000\\003\\000\\005\\002\\003\\373\\001\\002\\001\\003\\005\\371\\004\\002\\005\\006\\377\\005\\377\\006\\003\\004\\373\\373\\007\\001\\376\\375\\001\\372\\002\\000\\376\\000\\376\\372\\372\\003\\000\\376\\376\\377\\373\\004\\375\\375\\375\\007\\376\\002\\004\\003\\001\\003\\006\\001\\002\\372\\375\\006\\006\\001\\000\\374\\003\\377\\373\\374\\007\\372\\000\\002\\375\\003\\001\\372\\373\\373\\004\\375\\372\\001\\376\\374\\374\\004\\372\\374\\000\\006\\002\\005\\005\\001\\000\\376\\007\\000\\005\\004\\003\\374\\000\\004\\007\\375\\000\\003\\372\\375\\374\\374\\006\\003\\000\\006\\001\\006\\373\\005\\007\\001\\376\\375\\377\\374\\000\\006\\003\\000\\375\\005\\375\\376\\005\\375\\372\\373\\003\\000\\002\\373\\372\\001\\376\\371\\001\\000\\004\\372\\375\\004\\373\\005\\371\\001\\377\\377\\373\\005\\006\\003\\005\\372\\000\\377\\371\\005\\373\\375\\376\\001\\374\\000\\001\\000\\374\\376\\373\\005\\000\\377\\005\\372\\376\\006\\375\\374\\000\\005\\377\\001\\005\\373\\000\\002\\002\\005\\004\\001\\374\\003\\000\\003\\374\\373\\006\\003\\004\\006\\005\\374\\004\\376\\000\\002\\373\\376\\006\\001\\373\\004\\372\\001\\000\\375\\002\\004\\376\\377\\005\\374\\003\\004\\375\\374\\007\\000\\003\\002\\002\\372\\004\\003\\002\\001\\372\\376\\001\\002\\372\\374\\003\\376\\003\\005\\375\\003\\001\\371\\371\\371\\002\\376\\375\\005\\372\\374\\004\\004\\372\\374\\002\\000\\002\\376\\003\\007\\372\\373\\372\\005\\374\\005\\007\\001\\001\\005\\376\\376\\374\\377\\006\\374\\001\\005\\003\\006\\005\\003\\000\\001\\376\\002\\372\\373\\003\\375\\374\\003\\376\\377\\372\\374\\002\\375\\004\\377\\004\\373\\005\\002\\002\\372\\000\\005\\004\\000\\001\\003\\002\\374\\375\\005\\003\\001\\005\\375\\004\\004\\005\\005\\376\\373\\005\\374\\376\\377\\004\\377\\004\\006\\005\\377\\001\\006\\373\\003\\002\\373\\373\\376\\371\\001\\374\\002\\375\\374\\001\\006\\373\\376\\003\\000\\003\\001\\375\\003\\373\\007\\001\\004\\005\\003\\005\\373\\001\\006\\372\\004\\005\\000\\375\\375\\377\\003\\006\\377\\004\\007\\373\\372\\006\\374\\374\\377\\002\\372\\375\\003\\373\\371\\375\\376\\000\\006\\374\\376\\372\\002\\374\\007\\376\\373\\371\\002\\002\\003\\001\\374\\001\\005\\002\\004\\005\\000\\374\\374\\005\\372\\001\\004\\005\\006\\375\\005\\002\\377\\374\\375\\376\\371\\371\\005\\375\\377\\375\\374\\002\\376\\374\\004\\006\\375\\000\\001\\001\\004\\000\\006\\376\\001\\006\\002\\003\\374\\005\\005\\371\\005\\006\\002\\372\\373\\000\\005\\003\\374\\003\\002\\373\\001\\004\\375\\005\\000\\376\\000\\007\\373\\003\\374\\004\\003\\003\\377\\000\\376\\374\\376\\377\\003\\374\\375\\001\\003\\373\\005\\005\\002\\006\\374\\001\\002\\376\\375\\006\\376\\376\\002\\377\\002\\001\\375\\004\\376\\377\\003\\001\\374\\001\\002\\005\\005\\377\\373\\003\\003\\377\\004\\376\\375\\373\\000\\373\\005\\003\\004\\001\\377\\000\\377\\371\\372\\001\\373\\004\\002\\001\\002\\374\\005\\005\\377\\004\\373\\003\\005\\002\\374\\376\\376\\375\\372\\003\\372\\003\\000\\376\\007\\006\\371\\001\\004\\374\\000\\005\\001\\000\\006\\005\\375\\004\\377\\005\\374\\000\\373\\005\\376\\003\\003\\007\\374\\005\\374\\005\\000\\005\\376\\002\\002\\004\\373\\375\\373\\374\\006\\372\\372\\376\\002\\006\\376\\002\\376\\002\\372\\003\\375\\377\\000\\004\\373\\003\\373\\375\\002\\001\\004\\372\\006\\005\\002\\007\\003\\005\\374\\377\\004\\376\\376\\374\\000\\376\\374\\003\\003\\001\\007\\002\\000\\003\\000\\002\\005\\374\\373\\004\\000\\003\\377\\002\\000\\007\\006\\004\\000\\003\\371\\376\\371\\372\\376\\376\\000\\371\\372\\377\\006\\007\\376\\372\\001\\372\\373\\000\\007\\000\\371\\375\\000\\002\\004\\377\\005\\377\\000\\373\\376\\005\\004\\004\\002\\372\\006\\006\\377\\373\\002\\376\\000\\000\\006\\002\\001\\006\\371\\007\\372\\007\\003\\375\\375\\372\\005\\006\\375\\006\\374\\372\\003\\004\\374\\000\\007\\373\\006\\377\\371\\000\\374\\371\\006\\372\\004\\372\\000\\007\\374\\372\\004\\004\\000\\372\\376\\377\\372\\372\\374\\376\\000\\003\\000\\372\\001\\376\\375\\377\\371\\377\\373\\372\\377\\376\\002\\002\\373\\376\\000\\376\\375\\003\\375\\374\\006\\005\\004\\001\\374\\004\\375\\371\\372\\005\\372\\373\\002\\372\\000\\001\\374\\375\\006\\002\\375\\005\\377\\001\\003\\372\\373\\371\\004\\001\\375\\375\\376\\000\\377\\005\\005\\377\\376\\374\\371\\004\\377\\374\\004\\371\\004\\006\\002\\002\\000\\376\\373\\375\\373\\003\\006\\376\\004\\006\\375\\000\\004\\374\\002\\001\\377\\372\\373\\372\\375\\373\\373\\003\\375\\374\\371\\002\\005\\372\\376\\376\\005\\007\\374\\001\\377\\003\\376\\372\\005\\377\\376\\376\\006\\376\\376\\371\\005\\371\\000\\374\\372\\372\\003\\373\\001\\002\\003\\002\\005\\006\\377\\004\\375\\372\\374\\004\\005\\001\\372\\371\\005\\375\\000\\373\\006\\003\\377\\004\\371\\374\\374\\005\\371\\374\\003\\374\\004\\004\\002\\374\\377\\004\\002\\003\\374\\374\\373\\375\\371\\002\\372\\002\\005\\371\\000\\005\\005\\001\\376\\003\\002\\374\\001\\002\\375\\007\\003\\374\\373\\000\\003\\001\\373\\001\\006\\001\\002\\375\\376\\374\\372\\373\\007\\373\\371\\004\\005\\377\\371\\373\\374\\001\\007\\376\\371\\377\\003\\002\\376\\377\\003\\004\\377\\001\\372\\003\\005\\006\\006\\001\\005\\374\\004\\006\\377\\377\\371\\372\\372\\377\\004\\005\\374\\007\\373\\377\\001\\375\\006\\006\\376\\375\\002\\375\\371\\000\\002\\374\\375\\006\\373\\372\\375\\371\\374\\002\\376\\377\\376\\004\\000\\004\\373\\003\\377\\004\\006\\374\\003\\001\\002\\376\\372\\374\\003\\006\\002\\372\\003\\006\\002\\001\\003\\372\\371\\371\\372\\375\\001\\003\\003\\377\\005\\005\\002\\376\\003\\002\\375\\002\\005\\002\\003\\372\\006\\005\\006\\006\\373\\376\\376\\002\\005\\005\\372\\377\\377\\005\\004\\371\\376\\377\\002\\000\\004\\003\\002\\004\\005\\375\\377\\006\\375\\003\\376\\004\\374\\004\\000\\371\\374\\374\\005\\374\\003\\005\\006\\373\\006\\001\\374\\000\\372\\371\\373\\373\\373\\001\\376\\005\\005\\376\\005\\005\\372\\374\\006\\373\\376\\375\\375\\004\\000\\003\\003\\373\\375\\375\\376\\373\\001\\371\\003\\376\\373\\372\\376\\377\\372\\002\\003\\001\\006\\001\\372\\375\\006\\002\\376\\006\\372\\372\\002\\006\\375\\372\\373\\377\\000\\004\\003\\002\\004\\001\\000\\372\\374\\373\\376\\001\\001\\006\\373\\377\\374\\377\\371\\376\\377\\001\\000\\007\\006\\374\\371\\377\\000\\006\\005\\001\\005\\003\\005\\002\\376\\004\\373\\005\\002\\377\\003\\004\\375\\003\\371\\003\\373\\373\\374\\377\\000\\373\\002\\372\\002\\377\\006\\005\\373\\001\\372\\375\\004\\375\\002\\007\\375\\374\\002\\001\\377\\372\\003\\004\\003\\373\\002\\377\\372\\376\\374\\374\\001\\375\\377\\373\\000\\005\\376\\006\\006\\004\\007\\000\\374\\007\\000\\375\\374\\375\\002\\007\\371\\377\\374\\000\\005\\377\\376\\005\\002\\375\\005\\371\\004\\375\\007\\375\\377\\004\\374\\375\\005\\000\\376\\373\\372\\003\\001\\000\\374\\002\\375\\005\\006\\373\\005\\373\\373\\376\\373\\005\\004\\376\\377\\004\\002\\000\\003\\004\\002\\000\\002\\004\\004\\001\\373\\004\\000\\002\\373\\000\\006\\002\\374\\371\\004\\377\\374\\372\\006\\372\\000\\377\\372\\377\\001\\377\\000\\001\\003\\374\\371\\376\\376\\376\\375\\001\\374\\004\\374\\372\\375\\006\\373\\006\\376\\377\\004\\373\\002\\005\\000\\374\\007\\002\\004\\003\\005\\003\\374\\006\\372\\004\\003\\004\\003\\377\\371\\001\\375\\377\\377\\001\\001\\372\\376\\005\\000\\000\\373\\371\\003\\371\\375\\374\\005\\374\\373\\371\\004\\374\\376\\006\\005\\372\\004\\000\\001\\376\\372\\004\\004\\373\\372\\375\\375\\003\\372\\000\\372\\007\\000\\376\\006\\374\\004\\002\\374\\000\\376\\004\\006\\373\\001\\373\\000\\006\\371\\004\\000\\007\\375\\000\\375\\000\\006\\374\\001\\000\\004\\374\\002\\001\\006\\376\\373\\003\\003\\004\\001\\373\\003\\002\\374\\373\\003\\001\\004\\001\\376\\003\\373\\005\\002\\005\\376\\376\\001\\005\\375\\007\\002\\374\\006\\005\\373\\377\\007\\374\\003\\006\\374\\377\\376\\005\\373\\001\\005\\005\\002\\373\\004\\376\\374\\377\\001\\373\\375\\374\\373\\374\\372\\000\\376\\371\\371\\375\\001\\377\\001\\001\\004\\377\\373\\001\\005\\376\\000\\376\\372\\377\\374\\001\\371\\006\\376\\373\\376\\002\\002\\006\\377\\373\\006\\371\\374\\007\\006\\006\\004\\006\\002\\006\\006\\005\\002\\006\\374\\376\\000\\373\\006\\376\\003\\003\\376\\001\\004\\005\\005\\003\\376\\376\\376\\007\\375\\375\\002\\371\\374\\373\\000\\004\\372\\374\\377\\371\\373\\006\\004\\374\\376\\005\\002\\005\\375\\006\\006\\377\\373\\374\\002\\372\\002\\003\\376\\377\\372\\377\\376\\005\\005\\002\\004\\371\\374\\372\\004\\377\\376\\375\\005\\000\\376\\000\\371\\005\\005\\000\\003\\006\\374\\003\\001\\374\\000\\000\\372\\006\\006\\371\\372\\374\\000\\373\\002\\001\\373\\372\\374\\373\\373\\374\\374\\001\\376\\004\\000\\377\\005\\374\\371\\000\\377\\005\\000\\376\\003\\004\\006\\374\\003\\376\\004\\006\\005\\003\\006\\375\\373\\002\\376\\002\\000\\374\\006\\002\\002\\377\\377\\005\\372\\000\\001\\004\\006\\000\\006\\376\\002\\002\\371\\375\\376\\001\\007\\000\\372\\371\\005\\372\\373\\372\\375\\001\\376\\372\\377\\004\\001\\000\\000\\001\\007\\373\\377\\372\\005\\002\\376\\376\\003\\005\\007\\000\\003\\377\\376\\376\\371\\000\\006\\376\\007\\003\\004\\376\\374\\002\\371\\001\\005\\373\\377\\374\\004\\375\\006\\000\\000\\004\\002\\002\\372\\376\\376\\004\\373\\373\\371\\005\\002\\377\\373\\000\\001\\003\\004\\006\\377\\002\\003\\003\\003\\007\\003\\377\\001\\004\\002\\006\\005\\003\\372\\005\\000\\373\\374\\000\\002\\371\\005\\372\\002\\006\\374\\004\\376\\003\\376\\004\\377\\003\\006\\000\\003\\005\\371\\371\\002\\006\\004\\373\\001\\376\\002\\006\\372\\377\\374\\376\\372\\000\\002\\006\\377\\373\\003\\372\\376\\375\\004\\374\\004\\002\\000\\375\\005\\002\\376\\375\\004\\374\\374\\376\\001\\003\\374\\004\\003\\005\\371\\372\\373\\001\\004\\376\\000\\376\\001\\374\\377\\374\\001\\001\\005\\004\\371\\372\\000\\001\\372\\377\\374\\001\\001\\372\\006\\377\\000\\001\\006\\001\\006\\001\\007\\007\\001\\372\\004\\374\\376\\371\\006\\376\\375\\005\\000\\377\\003\\005\\374\\376\\000\\374\\006\\006\\001\\000\\004\\372\\374\\001\\374\\000\\003\\373\\002\\374\\372\\003\\007\\372\\374\\373\\004\\377\\006\\372\\375\\376\\373\\003\\005\\376\\377\\377\\376\\006\\002\\374\\001\\004\\001\\003\\001\\371\\372\\000\\006\\371\\001\\003\\372\\004\\003\\001\\375\\006\\376\\003\\372\\005\\377\\377\\373\\006\\375\\371\\006\\373\\373\\004\\002\\000\\002\\372\\375\\377\\003\\006\\372\\003\\377\\004\\004\\007\\005\\006\\375\\001\\000\\375\\371\\377\\003\\376\\374\\377\\374\\005\\003\\375\\007\\006\\001\\372\\006\\372\\005\\001\\373\\001\\002\\372\\374\\377\\002\\377\\006\\374\\001\\373\\377\\373\\371\\004\\003\\372\\375\\004\\376\\000\\373\\374\\001\\371\\377\\000\\002\\373\\005\\375\\376\\376\\001\\003\\373\\372\\003\\000\\001\\372\\003\\003\\002\\000\\003\\376\\004\\376\\001\\376\\376\\373\\004\\000\\002\\007\\002\\375\\003\\000\\003\\000\\372\\371\\374\\371\\375\\006\\377\\002\\374\\006\\004\\003\\002\\001\\002\\377\\375\\374\\004\\001\\007\\004\\007\\004\\006\\004\\372\\006\\375\\006\\372\\373\\001\\001\\002\\001\\000\\007\\377\\005\\375\\005\\377\\002\\373\\000\\372\\005\\007\\372\\002\\000\\375\\005\\002\\005\\377\\003\\004\\001\\371\\377\\002\\374\\376\\377\\371\\374\\377\\004\\004\\376\\001\\005\\006\\373\\002\\376\\007\\375\\375\\001\\375\\004\\372\\374\\005\\377\\006\\001\\376\\374\\003\\377\\373\\376\\004\\003\\375\\375\\004\\377\\006\\003\\375\\006\\375\\002\\004\\006\\004\\007\\004\\373\\000\\373\\372\\002\\005\\374\\004\\377\\002\\371\\006\\376\\003\\002\\373\\371\\001\\005\\373\\374\\001\\375\\376\\376\\376\\007\\376\\006\\375\\004\\376\\004\\004\\373\\376\\007\\006\\373\\003\\002\\005\\000\\375\\004\\006\\376\\373\\372\\001\\374\\376\\374\\376\\003\\000\\374\\004\\371\\377\\005\\376\\376\\372\\376\\375\\373\\377\\004\\007\\006\\373\\377\\377\\375\\372\\372\\376\\372\\376\\371\\001\\000\\376\\001\\373\\000\\376\\004\\371\\375\\003\\004\\371\\376\\005\\003\\004\\004\\372\\375\\001\\006\\000\\375\\375\\006\\371\\376\\373\\005\\372\\003\\376\\377\\376\\001\\377\\377\\006\\006\\374\\372\\372\\002\\003\\373\\006\\372\\374\\374\\006\\374\\001\\377\\376\\006\\007\\006\\006\\005\\376\\376\\374\\373\\000\\376\\377\\373\\003\\000\\001\\005\\005\\006\\005\\004\\003\\005\\004\\001\\006\\373\\003\\003\\377\\375\\000\\000\\004\\004\\007\\005\\376\\005\\000\\005\\377\\005\\005\\005\\372\\373\\001\\375\\005\\005\\377\\372\\005\\004\\374\\005\\374\\004\\373\\374\\000\\377\\003\\377\\007\\000\\375\\006\\005\\003\\000\\006\\374\\377\\003\\374\\374\\377\\001\\372\\376\\377\\000\\372\\004\\377\\372\\002\\004\\375\\006\\377\\374\\374\\376\\377\\371\\004\\372\\007\\374\\005\\373\\004\\000\\372\\375\\372\\001\\372\\376\\003\\376\\377\\375\\003\\005\\374\\377\\001\\005\\374\\007\\372\\001\\377\\375\\005\\374\\005\\005\\377\\376\\375\\373\\001\\000\\001\\373\\376\\000\\004\\373\\004\\002\\006\\001\\003\\002\\004\\000\\004\\002\\372\\003\\375\\005\\001\\375\\372\\002\\372\\374\\002\\375\\003\\006\\373\\003\\373\\003\\003\\374\\007\\007\\377\\002\\372\\374\\375\\377\\376\\007\\374\\004\\007\\375\\376\\376\\377\\001\\001\\007\\374\\371\\375\\004\\374\\005\\003\\375\\005\\002\\374\\372\\000\\372\\001\\002\\001\\001\\006\\003\\376\\374\\003\\375\\005\\001\\376\\375\\377\\003\\373\\371\\376\\005\\007\\003\\372\\007\\373\\002\\001\\001\\005\\372\\005\\000\\000\\375\\001\\007\\373\\005\\376\\376\\005\\004\\374\\376\\003\\372\\004\\005\\005\\375\\001\\373\\000\\001\\377\\002\\003\\000\\006\\005\\372\\004\\006\\000\\372\\002\\373\\003\\377\\004\\007\\374\\377\\003\\371\\001\\373\\006\\376\\375\\003\\376\\372\\372\\377\\005\\003\\001\\372\\001\\375\\376\\375\\377\\375\\003\\377\\006\\377\\376\\376\\377\\002\\002\\004\\000\\373\\007\\375\\375\\372\\373\\372\\375\\372\\375\\006\\374\\000\\373\\375\\375\\372\\002\\377\\001\\006\\375\\006\\375\\377\\001\\006\\000\\376\\005\\373\\001\\376\\376\\376\\375\\007\\375\\375\\375\\377\\000\\006\\001\\005\\005\\001\\373\\000\\002\\375\\004\\004\\000\\002\\001\\376\\374\\005\\007\\007\\005\\005\\001\\003\\002\\000\\003\\374\\371\\373\\000\\000\\377\\006\\004\\003\\003\\001\\005\\376\\375\\372\\001\\001\\376\\376\\002\\001\\006\\374\\373\\005\\004\\004\\376\\371\\005\\376\\003\\007\\003\\004\\005\\005\\006\\373\\003\\377\\002\\373\\372\\004\\377\\003\\002\\006\\001\\376\\372\\003\\004\\372\\002\\377\\002\\007\\002\\001\\006\\003\\374\\004\\377\\007\\005\\000\\004\\007\\375\\375\\373\\375\\373\\002\\372\\372\\374\\373\\377\\374\\001\\375\\373\\377\\374\\003\\374\\002\\002\\000\\006\\371\\006\\373\\371\\007\\002\\004\\372\\374\\372\\376\\374\\373\\001\\377\\374\\003\\001\\001\\002\\371\\000\\005\\372\\005\\003\\374\\005\\000\\373\\001\\006\\007\\005\\375\\374\\375\\372\\005\\002\\000\\002\\002\\004\\374\\003\\000\\001\\371\\372\\372\\004\\372\\374\\377\\372\\375\\002\\371\\005\\376\\374\\007\\377\\377\\377\\377\\000\\001\\371\\001\\373\\374\\373\\001\\005\\001\\373\\376\\372\\374\\375\\372\\001\\000\\004\\376\\007\\001\\373\\004\\000\\006\\001\\372\\376\\000\\006\\005\\005\\372\\372\\377\\004\\375\\371\\001\\005\\372\\375\\375\\377\\377\\004\\005\\375\\006\\377\\375\\375\\376\\004\\005\\003\\373\\004\\001\\374\\007\\373\\376\\372\\000\\374\\000\\002\\000\\005\\375\\376\\006\\005\\374\\000\\001\\002\\005\\373\\374\\001\\004\\372\\002\\002\\372\\372\\372\\004\\372\\373\\004\\003\\376\\372\\376\\004\\372\\004\\371\\004\\002\\003\\003\\377\\003\\372\\006\\003\\373\"\n", " }\n", " type: TENSOR\n", " }\n", @@ -541,7 +591,7 @@ " name: \"value\"\n", " t {\n", " data_type: 1\n", - " raw_data: \"\\2556\\341<\"\n", + " raw_data: \"].\\341<\"\n", " }\n", " type: TENSOR\n", " }\n", @@ -555,7 +605,7 @@ " t {\n", " dims: 128\n", " data_type: 6\n", - " raw_data: \"\\016\\003\\000\\000\\240\\375\\377\\377\\344\\002\\000\\000\\341\\002\\000\\000\\207\\000\\000\\000C\\377\\377\\377\\255\\375\\377\\377,\\376\\377\\377\\\"\\001\\000\\000\\237\\001\\000\\000\\'\\003\\000\\000\\220\\377\\377\\377{\\003\\000\\000\\252\\002\\000\\000A\\003\\000\\000\\233\\002\\000\\000\\375\\377\\377\\377\\302\\001\\000\\000\\365\\374\\377\\377\\025\\003\\000\\000w\\003\\000\\000\\231\\375\\377\\377\\030\\377\\377\\377K\\000\\000\\000h\\002\\000\\0002\\001\\000\\000X\\003\\000\\000\\241\\001\\000\\000W\\000\\000\\000\\010\\002\\000\\000R\\002\\000\\000v\\003\\000\\000\\353\\001\\000\\000J\\001\\000\\000\\312\\377\\377\\377\\007\\002\\000\\000\\345\\376\\377\\377\\316\\001\\000\\000\\352\\000\\000\\000\\357\\375\\377\\377\\004\\001\\000\\000\\353\\002\\000\\000\\342\\376\\377\\377#\\003\\000\\000\\252\\001\\000\\000\\354\\377\\377\\377Y\\003\\000\\000x\\000\\000\\000\\251\\377\\377\\377f\\000\\000\\000}\\003\\000\\000\\317\\374\\377\\377\\300\\376\\377\\377\\230\\000\\000\\000c\\003\\000\\000\\204\\377\\377\\377n\\376\\377\\377(\\375\\377\\377\\314\\001\\000\\000\\304\\000\\000\\000\\357\\374\\377\\377\\241\\376\\377\\377\\217\\375\\377\\377\\r\\001\\000\\000;\\001\\000\\000\\240\\377\\377\\377Q\\377\\377\\377U\\375\\377\\377\\'\\377\\377\\377h\\002\\000\\000f\\002\\000\\000\\307\\002\\000\\000\\364\\001\\000\\000\\303\\000\\000\\000W\\000\\000\\000\\001\\375\\377\\377!\\002\\000\\000\\210\\000\\000\\000:\\377\\377\\377\\242\\000\\000\\000o\\377\\377\\377\\327\\001\\000\\000\\263\\377\\377\\377X\\003\\000\\000\\303\\000\\000\\0003\\000\\000\\000\\337\\375\\377\\377=\\375\\377\\377{\\000\\000\\000\\336\\375\\377\\377I\\375\\377\\377\\036\\377\\377\\377\\016\\002\\000\\000\\017\\003\\000\\000\\240\\374\\377\\377f\\001\\000\\000\\003\\375\\377\\377\\020\\375\\377\\377\\224\\000\\000\\000S\\375\\377\\377\\266\\001\\000\\000\\337\\002\\000\\000\\356\\375\\377\\377\\027\\000\\000\\000\\340\\000\\000\\000p\\377\\377\\377\\371\\000\\000\\000\\253\\000\\000\\000\\322\\001\\000\\0008\\001\\000\\000\\346\\377\\377\\377\\271\\374\\377\\377\\003\\376\\377\\377\\032\\001\\000\\000\\207\\374\\377\\377\\265\\374\\377\\377;\\003\\000\\000\\353\\374\\377\\377\\275\\002\\000\\000:\\002\\000\\000}\\377\\377\\377\\000\\376\\377\\377W\\376\\377\\377\\235\\000\\000\\000\\333\\376\\377\\377x\\375\\377\\377+\\376\\377\\377\\025\\003\\000\\000\"\n", + " raw_data: \"*\\376\\377\\377\\236\\374\\377\\377\\\\\\375\\377\\377g\\377\\377\\377h\\003\\000\\000\\334\\000\\000\\000\\361\\375\\377\\377\\233\\376\\377\\377D\\003\\000\\000\\302\\377\\377\\377G\\002\\000\\000\\034\\376\\377\\377\\322\\376\\377\\377[\\003\\000\\000\\304\\375\\377\\3776\\001\\000\\000\\000\\376\\377\\377\\312\\002\\000\\000\\275\\374\\377\\377\\005\\003\\000\\000\\221\\000\\000\\000k\\003\\000\\000&\\000\\000\\000g\\375\\377\\377\\017\\000\\000\\000\\276\\002\\000\\000E\\002\\000\\000\\247\\002\\000\\000\\253\\000\\000\\000\\036\\002\\000\\000C\\001\\000\\000\\232\\000\\000\\000f\\002\\000\\000z\\375\\377\\377\\320\\374\\377\\377\\212\\376\\377\\377\\307\\375\\377\\377+\\376\\377\\3774\\003\\000\\000\\'\\377\\377\\377\\315\\000\\000\\000\\267\\002\\000\\000c\\377\\377\\377\\237\\000\\000\\000\\020\\001\\000\\000\\207\\375\\377\\377\\322\\000\\000\\000\\t\\000\\000\\000x\\001\\000\\000e\\000\\000\\000\\374\\377\\377\\377\\203\\377\\377\\377z\\000\\000\\000*\\000\\000\\000\\224\\375\\377\\377|\\377\\377\\377O\\375\\377\\377`\\377\\377\\377\\021\\003\\000\\000F\\000\\000\\000|\\002\\000\\000m\\000\\000\\000\\036\\000\\000\\000\\366\\374\\377\\377\\322\\375\\377\\377\\347\\374\\377\\377\\357\\000\\000\\000\\365\\374\\377\\377!\\377\\377\\377\\374\\001\\000\\000\\305\\000\\000\\0005\\002\\000\\000]\\003\\000\\000\\330\\377\\377\\377\\033\\375\\377\\377\\322\\374\\377\\377Y\\000\\000\\000\\350\\377\\377\\377\\233\\377\\377\\377F\\377\\377\\377\\247\\374\\377\\377\\217\\002\\000\\000\\205\\374\\377\\377\\301\\374\\377\\377\\340\\374\\377\\377\\367\\374\\377\\377\\372\\001\\000\\000\\353\\376\\377\\377l\\001\\000\\000c\\375\\377\\377s\\001\\000\\000{\\377\\377\\377j\\000\\000\\000\\200\\001\\000\\000\\261\\000\\000\\000a\\003\\000\\000\\371\\375\\377\\377\\250\\374\\377\\377\\023\\003\\000\\000\\201\\001\\000\\000\\300\\375\\377\\377\\367\\002\\000\\000R\\001\\000\\000s\\377\\377\\377\\361\\375\\377\\377\\304\\377\\377\\377\\244\\377\\377\\377\\355\\377\\377\\377\\365\\376\\377\\377M\\003\\000\\000\\334\\375\\377\\377\\241\\001\\000\\000W\\002\\000\\000\\344\\002\\000\\000X\\002\\000\\000\\315\\377\\377\\377\\375\\377\\377\\377\\000\\376\\377\\377\\335\\002\\000\\000\\t\\003\\000\\000\\250\\002\\000\\000\\363\\376\\377\\377\\375\\001\\000\\000\\034\\001\\000\\000U\\377\\377\\377\\351\\376\\377\\377\\202\\377\\377\\377\\325\\377\\377\\377\"\n", " }\n", " type: TENSOR\n", " }\n", @@ -665,7 +715,7 @@ "}" ] }, - "execution_count": 21, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -704,9 +754,12 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 10, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" }, @@ -737,10 +790,10 @@ " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -753,6 +806,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -772,6 +828,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -791,6 +850,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -805,9 +867,12 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 11, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -817,7 +882,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "2024-02-02 09:51:08.764823876 [W:onnxruntime:, graph.cc:1283 Graph] Initializer linear.bias appears in graph inputs and will not be treated as constant value/weight. This may prevent some of the graph optimizations, like const folding. Move it out of graph inputs if there is no need to override it, by either re-generating the model with latest exporter/converter or with the tool onnxruntime/tools/python/remove_initializer_from_input.py.\n" + "2024-02-26 03:30:53.570179499 [W:onnxruntime:, graph.cc:1283 Graph] Initializer linear.bias appears in graph inputs and will not be treated as constant value/weight. This may prevent some of the graph optimizations, like const folding. Move it out of graph inputs if there is no need to override it, by either re-generating the model with latest exporter/converter or with the tool onnxruntime/tools/python/remove_initializer_from_input.py.\n" ] } ], @@ -858,6 +923,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -883,9 +951,12 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 12, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -907,6 +978,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -919,6 +993,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -931,9 +1008,12 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 13, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%%\n" } @@ -943,7 +1023,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/giuseppe/Documents/git/brevitas/src/brevitas/export/onnx/standard/manager.py:26: UserWarning: ONNX opset version set to 13, override with opset_version=\n", + "/scratch/fabian/brevitas/src/brevitas/export/onnx/standard/manager.py:26: UserWarning: ONNX opset version set to 13, override with opset_version=\n", " warnings.warn(f\"ONNX opset version set to {DEFAULT_OPSET}, override with {ka}=\")\n" ] } @@ -991,6 +1071,9 @@ "cell_type": "markdown", "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "pycharm": { "name": "#%% md\n" } @@ -1000,11 +1083,103 @@ "\n", "Due to differences in how the computation is performed between Brevitas and ONNX Runtime, it might happen the two results are slightly different (since Brevitas uses a style closer to QCDQ, rather than operating between integers), thus we added a tolerance for off-by-1 errors." ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Export Dynamically Quantized Models to ONNX " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also export dynamically quantized models to ONNX, but there are some limitations. Supported exports include:\n", + "- Asymmetric quantization (and therefore *unsigned*)\n", + "- Min-max scaling\n", + "- Rounding to nearest\n", + "- Per tensor scaling\n", + "- Bit width set to 8\n", + "\n", + "Note that ONNX DynamicQuantizeLinear requires these specific requirements for quantizers. This is shown in the following example:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "from brevitas.quant.generative.quantizers import ShiftedUint8DynamicActPerTensorFloat\n", + "\n", + "IN_CH = 3\n", + "IMG_SIZE = 128\n", + "OUT_CH = 128\n", + "BATCH_SIZE = 1\n", + "\n", + "class Model(torch.nn.Module):\n", + " def __init__(self) -> None:\n", + " super().__init__()\n", + " self.linear = qnn.QuantLinear(IN_CH, OUT_CH, bias=True, weight_bit_width=8, input_quant=ShiftedUint8DynamicActPerTensorFloat)\n", + " self.act = qnn.QuantReLU(input_quant=ShiftedUint8DynamicActPerTensorFloat)\n", + " \n", + " def forward(self, inp):\n", + " inp = self.linear(inp)\n", + " inp = self.act(inp)\n", + " return inp\n", + "\n", + "inp = torch.randn(BATCH_SIZE, IN_CH)\n", + "model = Model() \n", + "model.eval()\n", + "path = 'dynamic_quant_model_qcdq.onnx'\n", + "\n", + "exported_model = export_onnx_qcdq(model, args=inp, export_path=path, opset_version=13)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Serving 'dynamic_quant_model_qcdq.onnx' at http://localhost:8086\n" + ] + }, + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "show_netron(\"dynamic_quant_model_qcdq.onnx\", 8086)" + ] } ], "metadata": { "kernelspec": { - "display_name": "pytorch_latest", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1020,7 +1195,6 @@ "pygments_lexer": "ipython3", "version": "3.11.5" }, - "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "b6e150ee02c45d2c3f896173a651a21b25567e05411969bcc0f3a62fa15a0a0b" @@ -1028,5 +1202,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/src/brevitas_examples/common/generative/quant_blocks.py b/src/brevitas/quant/generative/quant_blocks.py similarity index 100% rename from src/brevitas_examples/common/generative/quant_blocks.py rename to src/brevitas/quant/generative/quant_blocks.py diff --git a/src/brevitas_examples/common/generative/quantizers.py b/src/brevitas/quant/generative/quantizers.py similarity index 100% rename from src/brevitas_examples/common/generative/quantizers.py rename to src/brevitas/quant/generative/quantizers.py diff --git a/src/brevitas_examples/common/generative/quantize.py b/src/brevitas_examples/common/generative/quantize.py index 31ab57361..ed7da8ec6 100644 --- a/src/brevitas_examples/common/generative/quantize.py +++ b/src/brevitas_examples/common/generative/quantize.py @@ -19,6 +19,14 @@ from brevitas.quant.fixed_point import Int8WeightPerChannelFixedPointMSE from brevitas.quant.fixed_point import Int8WeightPerTensorFixedPoint from brevitas.quant.fixed_point import Int8WeightPerTensorFixedPointMSE +from brevitas.quant.generative.quantizers import Fp8e4m3WeightSymmetricGroupQuant +from brevitas.quant.generative.quantizers import Int8DynamicActPerGroupFloat +from brevitas.quant.generative.quantizers import Int8DynamicActPerRowFloat +from brevitas.quant.generative.quantizers import Int8DynamicActPerTensorFloat +from brevitas.quant.generative.quantizers import IntWeightSymmetricGroupQuant +from brevitas.quant.generative.quantizers import ShiftedUint8DynamicActPerRowFloat +from brevitas.quant.generative.quantizers import ShiftedUint8DynamicActPerTensorFloat +from brevitas.quant.generative.quantizers import ShiftedUintWeightAsymmetricGroupQuant from brevitas.quant.scaled_int import Int8ActPerTensorFloat from brevitas.quant.scaled_int import Int8ActPerTensorFloatMSE from brevitas.quant.scaled_int import Int8WeightPerChannelFloat @@ -31,16 +39,9 @@ from brevitas.quant.shifted_scaled_int import ShiftedUint8WeightPerChannelFloatMSE from brevitas.quant.shifted_scaled_int import ShiftedUint8WeightPerTensorFloat from brevitas.quant.shifted_scaled_int import ShiftedUint8WeightPerTensorFloatMSE -from brevitas_examples.common.generative.nn import LoRACompatibleQuantConv2d -from brevitas_examples.common.generative.nn import LoRACompatibleQuantLinear -from brevitas_examples.common.generative.quantizers import Fp8e4m3WeightSymmetricGroupQuant -from brevitas_examples.common.generative.quantizers import Int8DynamicActPerGroupFloat -from brevitas_examples.common.generative.quantizers import Int8DynamicActPerRowFloat -from brevitas_examples.common.generative.quantizers import Int8DynamicActPerTensorFloat -from brevitas_examples.common.generative.quantizers import IntWeightSymmetricGroupQuant -from brevitas_examples.common.generative.quantizers import ShiftedUint8DynamicActPerRowFloat -from brevitas_examples.common.generative.quantizers import ShiftedUint8DynamicActPerTensorFloat -from brevitas_examples.common.generative.quantizers import ShiftedUintWeightAsymmetricGroupQuant + +from .nn import LoRACompatibleQuantConv2d +from .nn import LoRACompatibleQuantLinear WEIGHT_QUANT_MAP = { 'int': { diff --git a/tests/brevitas_ort/common.py b/tests/brevitas_ort/common.py index fa324f0be..8d89a064b 100644 --- a/tests/brevitas_ort/common.py +++ b/tests/brevitas_ort/common.py @@ -20,6 +20,7 @@ from brevitas.quant.fixed_point import Int8ActPerTensorFixedPoint from brevitas.quant.fixed_point import Int8WeightPerChannelFixedPoint from brevitas.quant.fixed_point import Int8WeightPerTensorFixedPoint +from brevitas.quant.generative.quantizers import ShiftedUint8DynamicActPerTensorFloat from brevitas.quant.scaled_int import Int8AccumulatorAwareWeightQuant from brevitas.quant.scaled_int import Int8ActPerTensorFloat from brevitas.quant.scaled_int import Int8WeightPerChannelFloat @@ -28,7 +29,6 @@ from brevitas.quant.shifted_scaled_int import ShiftedUint8WeightPerChannelFloat from brevitas.quant.shifted_scaled_int import ShiftedUint8WeightPerTensorFloat from brevitas.quant_tensor import QuantTensor -from brevitas_examples.common.generative.quantizers import ShiftedUint8DynamicActPerTensorFloat SEED = 123456 OUT_CH = 16