From 975f7d92485adbe7c38384464b617eec6a9e8369 Mon Sep 17 00:00:00 2001 From: Karina Date: Mon, 25 Nov 2024 17:32:56 +0300 Subject: [PATCH] 10 week --- .../modelsMerging.ipynb | 7159 +++++++++++++++++ 1 file changed, 7159 insertions(+) create mode 100644 week10_Advanced_techniques_LLM_v2/modelsMerging.ipynb diff --git a/week10_Advanced_techniques_LLM_v2/modelsMerging.ipynb b/week10_Advanced_techniques_LLM_v2/modelsMerging.ipynb new file mode 100644 index 0000000..e5c10ee --- /dev/null +++ b/week10_Advanced_techniques_LLM_v2/modelsMerging.ipynb @@ -0,0 +1,7159 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b3843600", + "metadata": { + "id": "b3843600" + }, + "source": [ + "\n", + "# Advanced Seminar on Model Merging\n", + "\n", + "This seminar provides an in-depth exploration of **model merging** techniques. We will cover theoretical foundations, practical implementation, and model fine-tuning after merging.\n", + "\n", + "---\n", + "\n", + "## Objectives:\n", + "1. **Understand** the various techniques for model merging.\n", + "2. **Implement** these techniques step by step.\n", + "3. **Train and validate** merged models for improved performance.\n", + "\n", + "---\n", + "\n", + "## Techniques Covered:\n", + "1. Weighted Average Merging.\n", + "2. Layer-wise Merging.\n", + "3. Fine-tuned Gradient Alignment.\n", + "4. Parameter Freezing and Selection.\n", + "5. Practical Training of Merged Models.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ad79523e", + "metadata": { + "id": "ad79523e" + }, + "outputs": [], + "source": [ + "\n", + "# Import libraries\n", + "import torch\n", + "import torch.nn as nn\n", + "import copy\n", + "\n", + "# Dummy models for demonstration\n", + "class SimpleModel(nn.Module):\n", + " def __init__(self, input_size, hidden_size, output_size):\n", + " super(SimpleModel, self).__init__()\n", + " self.fc1 = nn.Linear(input_size, hidden_size)\n", + " self.relu = nn.ReLU()\n", + " self.fc2 = nn.Linear(hidden_size, output_size)\n", + "\n", + " def forward(self, x):\n", + " x = self.relu(self.fc1(x))\n", + " return self.fc2(x)\n", + "\n", + "# Create two models\n", + "model1 = SimpleModel(10, 20, 5)\n", + "model2 = SimpleModel(10, 20, 5)\n", + "\n", + "# Initialize weights differently\n", + "torch.manual_seed(42)\n", + "model1.fc1.weight.data.normal_()\n", + "model2.fc1.weight.data.uniform_()\n", + "\n", + "# Save initial states for merging examples\n", + "model1_state = model1.state_dict()\n", + "model2_state = model2.state_dict()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "5c16d008", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "5c16d008", + "outputId": "3358c595-1f08-4ffa-93c8-14be4ef05de3" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Weighted Average Merging Completed\n" + ] + } + ], + "source": [ + "\n", + "# Weighted Average Merging\n", + "def weighted_merge(state_dict1, state_dict2, alpha=0.5):\n", + " merged_state_dict = {}\n", + " for key in state_dict1.keys():\n", + " merged_state_dict[key] = alpha * state_dict1[key] + (1 - alpha) * state_dict2[key]\n", + " return merged_state_dict\n", + "\n", + "alpha = 0.7\n", + "merged_weights = weighted_merge(model1_state, model2_state, alpha)\n", + "\n", + "# Load the merged weights into a new model\n", + "merged_model = SimpleModel(10, 20, 5)\n", + "merged_model.load_state_dict(merged_weights)\n", + "print(\"Weighted Average Merging Completed\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "f42152cc", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f42152cc", + "outputId": "d5e52827-be18-4a5b-8539-13eb83372ebc" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Layer-wise Merging Completed\n" + ] + } + ], + "source": [ + "\n", + "# Layer-wise Merging\n", + "def layerwise_merge(state_dict1, state_dict2, layers_to_merge):\n", + " merged_state_dict = copy.deepcopy(state_dict1)\n", + " for layer in layers_to_merge:\n", + " merged_state_dict[layer] = state_dict2[layer]\n", + " return merged_state_dict\n", + "\n", + "# Merge only the first layer of model2 into model1\n", + "layers_to_merge = ['fc1.weight', 'fc1.bias']\n", + "merged_weights_layerwise = layerwise_merge(model1_state, model2_state, layers_to_merge)\n", + "\n", + "# Load the merged weights into a new model\n", + "merged_model_layerwise = SimpleModel(10, 20, 5)\n", + "merged_model_layerwise.load_state_dict(merged_weights_layerwise)\n", + "print(\"Layer-wise Merging Completed\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0e5b15ff", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0e5b15ff", + "outputId": "68c6a46a-c065-47cc-d102-9c904f6d4006" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1, Loss: 1.8546305894851685\n", + "Epoch 2, Loss: 1.7490872144699097\n", + "Epoch 3, Loss: 1.6721289157867432\n", + "Epoch 4, Loss: 1.6179580688476562\n", + "Epoch 5, Loss: 1.5801407098770142\n" + ] + } + ], + "source": [ + "\n", + "# Fine-tuning Merged Model\n", + "from torch.optim import Adam\n", + "\n", + "# Create synthetic data\n", + "x = torch.randn(100, 10)\n", + "y = torch.randint(0, 5, (100,))\n", + "\n", + "# Loss and optimizer\n", + "criterion = nn.CrossEntropyLoss()\n", + "optimizer = Adam(merged_model.parameters(), lr=0.01)\n", + "\n", + "# Fine-tune the merged model\n", + "for epoch in range(5):\n", + " optimizer.zero_grad()\n", + " outputs = merged_model(x)\n", + " loss = criterion(outputs, y)\n", + " loss.backward()\n", + " optimizer.step()\n", + " print(f\"Epoch {epoch + 1}, Loss: {loss.item()}\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "4030f282", + "metadata": { + "id": "4030f282" + }, + "source": [ + "\n", + "## Conclusion\n", + "\n", + "In this seminar, we explored:\n", + "1. Multiple techniques for merging models.\n", + "2. Practical implementation of these techniques.\n", + "3. Fine-tuning to optimize merged model performance.\n", + "\n", + "### Future Work:\n", + "- Explore more complex merging strategies like gradient alignment.\n", + "- Evaluate merged models on real-world datasets.\n", + "\n", + "---\n", + "\n", + "Experiment with these techniques to tailor models for specialized tasks!\n" + ] + }, + { + "cell_type": "markdown", + "id": "83ad878c", + "metadata": { + "id": "83ad878c" + }, + "source": [ + "\n", + "## Advanced Mergekit Demonstration\n", + "\n", + "In this section, we will explore:\n", + "1. YAML-based configuration for managing complex merges.\n", + "2. Implementation of advanced methods such as TIES, DELLA, and Mixture of Experts (MoE).\n", + "3. Practical steps for uploading merged models to Hugging Face.\n", + "\n", + "Mergekit offers unparalleled flexibility with its methods and configuration options, enabling sophisticated model merging workflows.\n" + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install torch --upgrade" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sA1W7oeh9ho9", + "outputId": "22e7efae-0fd4-41b1-8041-1feb2a889c14" + }, + "id": "sA1W7oeh9ho9", + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.5.1+cu121)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.16.1)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.12.2)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.4)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2024.9.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch) (1.3.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (3.0.2)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install git+https://github.com/arcee-ai/mergekit.git" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9p1RJxKb9oj4", + "outputId": "1d2df692-5283-423d-ae11-c47fdb740bfb" + }, + "id": "9p1RJxKb9oj4", + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Collecting git+https://github.com/arcee-ai/mergekit.git\n", + " Cloning https://github.com/arcee-ai/mergekit.git to /tmp/pip-req-build-_jlj6z5x\n", + " Running command git clone --filter=blob:none --quiet https://github.com/arcee-ai/mergekit.git /tmp/pip-req-build-_jlj6z5x\n", + " Resolved https://github.com/arcee-ai/mergekit.git to commit 57e7d14e2a732f532970e2c9dada00e2d8f15a7a\n", + " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: torch>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (2.5.1+cu121)\n", + "Requirement already satisfied: tqdm==4.66.5 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (4.66.5)\n", + "Requirement already satisfied: click==8.1.7 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (8.1.7)\n", + "Requirement already satisfied: safetensors~=0.4.3 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.4.5)\n", + "Requirement already satisfied: accelerate~=1.0.1 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (1.0.1)\n", + "Requirement already satisfied: pydantic~=2.9.2 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (2.9.2)\n", + "Requirement already satisfied: immutables==0.20 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.20)\n", + "Requirement already satisfied: transformers>=4.45.2 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (4.46.2)\n", + "Requirement already satisfied: tokenizers>=0.20.1 in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.20.3)\n", + "Requirement already satisfied: huggingface_hub in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.26.2)\n", + "Requirement already satisfied: peft in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.13.2)\n", + "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (4.12.2)\n", + "Requirement already satisfied: sentencepiece in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (0.2.0)\n", + "Requirement already satisfied: protobuf in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (4.25.5)\n", + "Requirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (1.13.1)\n", + "Requirement already satisfied: datasets in /usr/local/lib/python3.10/dist-packages (from mergekit==0.0.5.1) (3.1.0)\n", + "Requirement already satisfied: numpy<3.0.0,>=1.17 in /usr/local/lib/python3.10/dist-packages (from accelerate~=1.0.1->mergekit==0.0.5.1) (1.26.4)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from accelerate~=1.0.1->mergekit==0.0.5.1) (24.2)\n", + "Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from accelerate~=1.0.1->mergekit==0.0.5.1) (5.9.5)\n", + "Requirement already satisfied: pyyaml in /usr/local/lib/python3.10/dist-packages (from accelerate~=1.0.1->mergekit==0.0.5.1) (6.0.2)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface_hub->mergekit==0.0.5.1) (3.16.1)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface_hub->mergekit==0.0.5.1) (2024.9.0)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from huggingface_hub->mergekit==0.0.5.1) (2.32.3)\n", + "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.10/dist-packages (from pydantic~=2.9.2->mergekit==0.0.5.1) (0.7.0)\n", + "Requirement already satisfied: pydantic-core==2.23.4 in /usr/local/lib/python3.10/dist-packages (from pydantic~=2.9.2->mergekit==0.0.5.1) (2.23.4)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=2.0.0->mergekit==0.0.5.1) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=2.0.0->mergekit==0.0.5.1) (3.1.4)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch>=2.0.0->mergekit==0.0.5.1) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch>=2.0.0->mergekit==0.0.5.1) (1.3.0)\n", + "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers>=4.45.2->mergekit==0.0.5.1) (2024.9.11)\n", + "Requirement already satisfied: pyarrow>=15.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (17.0.0)\n", + "Requirement already satisfied: dill<0.3.9,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (0.3.8)\n", + "Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (2.2.2)\n", + "Requirement already satisfied: xxhash in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (3.5.0)\n", + "Requirement already satisfied: multiprocess<0.70.17 in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (0.70.16)\n", + "Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets->mergekit==0.0.5.1) (3.11.2)\n", + "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (2.4.3)\n", + "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (1.3.1)\n", + "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (24.2.0)\n", + "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (1.5.0)\n", + "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (6.1.0)\n", + "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (0.2.0)\n", + "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (1.17.2)\n", + "Requirement already satisfied: async-timeout<6.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets->mergekit==0.0.5.1) (4.0.3)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub->mergekit==0.0.5.1) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub->mergekit==0.0.5.1) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub->mergekit==0.0.5.1) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->huggingface_hub->mergekit==0.0.5.1) (2024.8.30)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=2.0.0->mergekit==0.0.5.1) (3.0.2)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets->mergekit==0.0.5.1) (2.8.2)\n", + "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets->mergekit==0.0.5.1) (2024.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets->mergekit==0.0.5.1) (2024.2)\n", + "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.2->pandas->datasets->mergekit==0.0.5.1) (1.16.0)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from huggingface_hub import login\n", + "login()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 17, + "referenced_widgets": [ + "e497bc3638f34982966e3c3f2491de6f", + "f1f90f203a444b02b0a36a17bf28b322", + "017bdb3a1a80483f844b8ed15b33edb9", + "b87fe274cced4d3581f7dd4e748f7e2e", + "5b0cd218894144f0af1c5055f2fa4eae", + "5cc2c7630fe743eba7b47c99bfe36a8a", + "2dac7688238c4fd68baa95956d9d74f7", + "b9f77c2e58974fbfa67d2fd48ef754de", + "b3e41d38fb444748be45cf7dbdf4763a", + "6a7764637a5e45ea93259b09a6c814e6", + "f40f868d356b48d08a9e7003ca61b37e", + "b36f63b7417b4a9092711100ccfcca93", + "fad136471c7041d5ac35276755caddb2", + "a21b2cf62ddb49adb247729d6272bd67", + "311d70a14ccf43238f8f329601717589", + "7b7f92e08bd34e338a6dc09a64dbd3c7", + "9f8e89d7d6c64cd494b9a9ae2afa0a45", + "4d2b635c51cc4c63a7309ecdef49ad88", + "aac197b284cb44f8828300bf57cb9a24", + "35918bad71974feca0ef6f8566fe729b" + ] + }, + "id": "UKvk31xT1uac", + "outputId": "31a05206-7333-4d76-bad6-91c27de694a4" + }, + "id": "UKvk31xT1uac", + "execution_count": 3, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "VBox(children=(HTML(value='
\n", + " sys.exit(main())\n", + " File \"/usr/local/lib/python3.10/dist-packages/click/core.py\", line 1157, in __call__\n", + " return self.main(*args, **kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/click/core.py\", line 1078, in main\n", + " rv = self.invoke(ctx)\n", + " File \"/usr/local/lib/python3.10/dist-packages/click/core.py\", line 1434, in invoke\n", + " return ctx.invoke(self.callback, **ctx.params)\n", + " File \"/usr/local/lib/python3.10/dist-packages/click/core.py\", line 783, in invoke\n", + " return __callback(*args, **kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/options.py\", line 82, in wrapper\n", + " f(*args, **kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/scripts/run_yaml.py\", line 47, in main\n", + " run_merge(\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/merge.py\", line 78, in run_merge\n", + " loader_cache.get(model)\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/io/tasks.py\", line 35, in get\n", + " self.loaders[model] = merged.lazy_loader(\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/common.py\", line 164, in lazy_loader\n", + " self.tensor_index(cache_dir),\n", + " File \"/usr/local/lib/python3.10/dist-packages/mergekit/common.py\", line 151, in tensor_index\n", + " path = huggingface_hub.snapshot_download(\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_validators.py\", line 114, in _inner_fn\n", + " return fn(*args, **kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/_snapshot_download.py\", line 293, in snapshot_download\n", + " thread_map(\n", + " File \"/usr/local/lib/python3.10/dist-packages/tqdm/contrib/concurrent.py\", line 69, in thread_map\n", + " return _executor_map(ThreadPoolExecutor, fn, *iterables, **tqdm_kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/tqdm/contrib/concurrent.py\", line 51, in _executor_map\n", + " return list(tqdm_class(ex.map(fn, *iterables, chunksize=chunksize), **kwargs))\n", + " File \"/usr/local/lib/python3.10/dist-packages/tqdm/std.py\", line 1181, in __iter__\n", + " for obj in iterable:\n", + " File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 621, in result_iterator\n", + " yield _result_or_cancel(fs.pop())\n", + " File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 319, in _result_or_cancel\n", + " return fut.result(timeout)\n", + " File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 458, in result\n", + " return self.__get_result()\n", + " File \"/usr/lib/python3.10/concurrent/futures/_base.py\", line 403, in __get_result\n", + " raise self._exception\n", + " File \"/usr/lib/python3.10/concurrent/futures/thread.py\", line 58, in run\n", + " result = self.fn(*self.args, **self.kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/_snapshot_download.py\", line 267, in _inner_hf_hub_download\n", + " return hf_hub_download(\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_validators.py\", line 114, in _inner_fn\n", + " return fn(*args, **kwargs)\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py\", line 862, in hf_hub_download\n", + " return _hf_hub_download_to_cache_dir(\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py\", line 1011, in _hf_hub_download_to_cache_dir\n", + " _download_to_tmp_and_move(\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py\", line 1545, in _download_to_tmp_and_move\n", + " http_get(\n", + " File \"/usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py\", line 457, in http_get\n", + " temp_file.write(chunk)\n", + "OSError: [Errno 28] No space left on device\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "id": "d569e6dd", + "metadata": { + "id": "d569e6dd" + }, + "source": [ + "\n", + "### TIES (Task Interference Elimination by Sparsification)\n", + "\n", + "TIES addresses conflicts between task vectors by sparsifying them, using techniques like:\n", + "- **Sign Consensus**: Aligns parameter updates across models to reduce interference.\n", + "- **Sparsification**: Retains only the most critical parameters for merging.\n", + "\n", + "#### Parameters:\n", + "- **Density**: Fraction of weights to retain in the task vector.\n", + "- **Gamma**: Controls the magnitude of pruning for large weights.\n", + "\n", + "TIES is particularly useful for merging models fine-tuned on diverse tasks.\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "### TIES-Merging\n", + "\n", + "```yaml\n", + "models:\n", + " - model: mistralai/Mistral-7B-v0.1\n", + " # no parameters necessary for base model\n", + " - model: OpenPipe/mistral-ft-optimized-1218\n", + " parameters:\n", + " density: 0.5\n", + " weight: 0.5\n", + " - model: mlabonne/NeuralHermes-2.5-Mistral-7B\n", + " parameters:\n", + " density: 0.5\n", + " weight: 0.3\n", + "merge_method: ties\n", + "base_model: mistralai/Mistral-7B-v0.1\n", + "parameters:\n", + " normalize: true\n", + "dtype: float16\n", + "```\n" + ], + "metadata": { + "id": "Mq8CSqYS3tNx" + }, + "id": "Mq8CSqYS3tNx" + }, + { + "cell_type": "markdown", + "id": "28e5f3d3", + "metadata": { + "id": "28e5f3d3" + }, + "source": [ + "\n", + "### DELLA (Dynamic Evolutionary Layer-by-Layer Assembly)\n", + "\n", + "DELLA builds on TIES, introducing adaptive pruning to retain critical parameters. It uses:\n", + "- **Magnitude-based Ranking**: Prioritizes retaining high-magnitude changes.\n", + "- **Dynamic Drop Probabilities**: Adjusts pruning probabilities based on parameter importance.\n", + "\n", + "#### Parameters:\n", + "- **Density**: Fraction of weights to retain.\n", + "- **Epsilon**: Controls variability in pruning probabilities.\n", + "- **Lambda**: Scaling factor for merged delta parameters.\n", + "\n", + "DELLA is ideal for merging models where parameter importance varies significantly.\n" + ] + }, + { + "cell_type": "markdown", + "source": [ + "## Merging LoRA Adapters using TIES and DARE\n", + "\n", + "This section demonstrates how to merge LoRA adapters using the **TIES** and **DARE** methods. These methods are efficient for merging LoRA adapters by reducing redundant parameters and resolving conflicts.\n", + "\n", + "### 1. Loading Adapters\n", + "\n", + "We first load a base model and its adapters using the `load_adapter` method:" + ], + "metadata": { + "id": "_8Le2vw_5JMf" + }, + "id": "_8Le2vw_5JMf" + }, + { + "cell_type": "code", + "source": [ + "!pip install bitsandbytes" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "W1ivyLZSC4eU", + "outputId": "ebe02b72-b307-471a-812d-51a29eae63d2" + }, + "id": "W1ivyLZSC4eU", + "execution_count": 1, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: bitsandbytes in /usr/local/lib/python3.10/dist-packages (0.44.1)\n", + "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from bitsandbytes) (2.5.1+cu121)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from bitsandbytes) (1.26.4)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (3.16.1)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (4.12.2)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (3.1.4)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (2024.9.0)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch->bitsandbytes) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch->bitsandbytes) (1.3.0)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->bitsandbytes) (3.0.2)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "!pip install --upgrade transformers peft" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8LE7cIzsC8Vb", + "outputId": "e93726ce-a637-42bc-89b7-5f3d59704c9b" + }, + "id": "8LE7cIzsC8Vb", + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.46.3)\n", + "Requirement already satisfied: peft in /usr/local/lib/python3.10/dist-packages (0.13.2)\n", + "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.16.1)\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.23.2 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.26.2)\n", + "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.26.4)\n", + "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.2)\n", + "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.2)\n", + "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2024.9.11)\n", + "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.32.3)\n", + "Requirement already satisfied: tokenizers<0.21,>=0.20 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n", + "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.5)\n", + "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.5)\n", + "Requirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from peft) (5.9.5)\n", + "Requirement already satisfied: torch>=1.13.0 in /usr/local/lib/python3.10/dist-packages (from peft) (2.5.1+cu121)\n", + "Requirement already satisfied: accelerate>=0.21.0 in /usr/local/lib/python3.10/dist-packages (from peft) (1.0.1)\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.23.2->transformers) (2024.9.0)\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.23.2->transformers) (4.12.2)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.0->peft) (3.4.2)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.0->peft) (3.1.4)\n", + "Requirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.10/dist-packages (from torch>=1.13.0->peft) (1.13.1)\n", + "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy==1.13.1->torch>=1.13.0->peft) (1.3.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.4.0)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.10)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.2.3)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.8.30)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.13.0->peft) (3.0.2)\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "from peft import PeftConfig, PeftModel\n", + "from peft import PeftModel, PeftConfig\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer\n", + "from datasets import load_dataset\n", + "import torch\n", + "import random\n", + "\n", + "peft_model_id = \"smangrul/tinyllama_lora_norobots\"\n", + "device = \"cuda\"\n", + "config = PeftConfig.from_pretrained(peft_model_id)\n", + "model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path, load_in_4bit=True, device_map=\"auto\")\n", + "tokenizer = AutoTokenizer.from_pretrained(peft_model_id)\n", + "model.resize_token_embeddings(len(tokenizer))\n", + "model = PeftModel.from_pretrained(model, peft_model_id, adapter_name=\"norobots\")\n", + "_ = model.load_adapter(\"smangrul/tinyllama_lora_sql\", adapter_name=\"sql\")\n", + "_ = model.load_adapter(\"smangrul/tinyllama_lora_adcopy\", adapter_name=\"adcopy\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 155, + "referenced_widgets": [ + "46af08f940bd46198caf1a31681a3c25", + "b87e1c47417c416da970379fdfbc3da9", + "f8c88ba757dd4715ad9b4e2811035085", + "571853672e9b4f62b0b7a80a36a82fcd", + "23fdc73cc9a9432abb7010d24ae05446", + "f30ffeb82f804ecca6147e80a2bea35e", + "3f04970eacb3400e9f7974c5386c9f06", + "284dd49a6da240799285d70d30ce474d", + "4b92e99fa6e441afa737d86064bfa0f6", + "d4cfff10827440ce833d0532f2ee34bb", + "2a7d39095aff46b1ab95fd6a8d706704", + "cab1da04294b403eb4d74d6d0845a6a4", + "922866fce5434d61824be1659845bb56", + "ead3e2bb8daa43e2b443467df2f83905", + "ef93fb4d8f9f45748d248bc7763d7826", + "53079f52ea3f4255ab124453cd2692ee", + "26cd9f4cd1b14a8ca3ee5ce9256e7adb", + "da0b4a20a37f4763a3a36aabf322c9ca", + "0fb0146823bc476ab1ebee879a49f113", + "026aee8ec19b4287865850926ac27e32", + "f8aea496688e41049706b426034e3497", + "4c455570f131445ab2079408beedd3a4" + ] + }, + "id": "EhXwJqC8H58z", + "outputId": "6e64f745-b0e3-4cd1-846f-601b28e830c9" + }, + "id": "EhXwJqC8H58z", + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "The `load_in_4bit` and `load_in_8bit` arguments are deprecated and will be removed in the future versions. Please, pass a `BitsAndBytesConfig` object in `quantization_config` argument instead.\n", + "The new embeddings will be initialized from a multivariate normal distribution that has old embeddings' mean and covariance. As described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html. To disable this, use `mean_resizing=False`\n", + "The new lm_head weights will be initialized from a multivariate normal distribution that has old embeddings' mean and covariance. As described in this article: https://nlp.stanford.edu/~johnhew/vocab-expansion.html. To disable this, use `mean_resizing=False`\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "adapter_config.json: 0%| | 0.00/737 [00:00<|im_start|>user \n", + "Write an essay about Generative AI.<|im_end|> \n", + "<|im_start|>assistant \n", + "Generative Artificial Intelligence is the process of creating art by using machine learning techniques to create images and videos that look like real paintings, drawings, or sculptures. The creations are often inspired by a variety of sources including nature, history, literature, and other forms of media. Some examples include: 19th century British painter J.M.W. Turner's painting \"The Fighting Temeraire\" (1805), which was based on the Battle of Waterlo in 1763; 20th century French artist Henri Fantin-Latour's painting \"La Belle au Bois de Boulogne\" (1848); 20th century American artist Edward Hopper's painting \"Night Interior with Moonlight\" (1930); 20th century American artist Jackson Pollack's painting \"Airplane\" (1930); 20th century American artist Jackson Pollack's painting \"Birdwatcher\" (1930); 20th century American artist Jackson Pollack's painting \"Cowlf\" (1930); 20th century American artist Jackson Pol\n" + ] + } + ] + } + ], + "metadata": { + "colab": { + "provenance": [], + "gpuType": "T4" + }, + "language_info": { + "name": "python" + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "accelerator": "GPU", + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "e497bc3638f34982966e3c3f2491de6f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "VBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "VBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "VBoxView", + "box_style": "", + "children": [], + "layout": "IPY_MODEL_2dac7688238c4fd68baa95956d9d74f7" + } + }, + "f1f90f203a444b02b0a36a17bf28b322": { + "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_b9f77c2e58974fbfa67d2fd48ef754de", + "placeholder": "​", + "style": "IPY_MODEL_b3e41d38fb444748be45cf7dbdf4763a", + "value": "

Copy a token from your Hugging Face\ntokens page and paste it below.
Immediately click login after copying\nyour token or it might be stored in plain text in this notebook file.
" + } + }, + "017bdb3a1a80483f844b8ed15b33edb9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "PasswordModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "PasswordModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "PasswordView", + "continuous_update": true, + "description": "Token:", + "description_tooltip": null, + "disabled": false, + "layout": "IPY_MODEL_6a7764637a5e45ea93259b09a6c814e6", + "placeholder": "​", + "style": "IPY_MODEL_f40f868d356b48d08a9e7003ca61b37e", + "value": "" + } + }, + "b87fe274cced4d3581f7dd4e748f7e2e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "CheckboxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "CheckboxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "CheckboxView", + "description": "Add token as git credential?", + "description_tooltip": null, + "disabled": false, + "indent": true, + "layout": "IPY_MODEL_b36f63b7417b4a9092711100ccfcca93", + "style": "IPY_MODEL_fad136471c7041d5ac35276755caddb2", + "value": true + } + }, + "5b0cd218894144f0af1c5055f2fa4eae": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ButtonModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ButtonView", + "button_style": "", + "description": "Login", + "disabled": false, + "icon": "", + "layout": "IPY_MODEL_a21b2cf62ddb49adb247729d6272bd67", + "style": "IPY_MODEL_311d70a14ccf43238f8f329601717589", + "tooltip": "" + } + }, + "5cc2c7630fe743eba7b47c99bfe36a8a": { + "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_7b7f92e08bd34e338a6dc09a64dbd3c7", + "placeholder": "​", + "style": "IPY_MODEL_9f8e89d7d6c64cd494b9a9ae2afa0a45", + "value": "\nPro Tip: If you don't already have one, you can create a dedicated\n'notebooks' token with 'write' access, that you can then easily reuse for all\nnotebooks.
" + } + }, + "2dac7688238c4fd68baa95956d9d74f7": { + "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": "center", + "align_self": null, + "border": null, + "bottom": null, + "display": "flex", + "flex": null, + "flex_flow": "column", + "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": "50%" + } + }, + "b9f77c2e58974fbfa67d2fd48ef754de": { + "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 + } + }, + "b3e41d38fb444748be45cf7dbdf4763a": { + "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": "" + } + }, + "6a7764637a5e45ea93259b09a6c814e6": { + "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 + } + }, + "f40f868d356b48d08a9e7003ca61b37e": { + "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": "" + } + }, + "b36f63b7417b4a9092711100ccfcca93": { + "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 + } + }, + "fad136471c7041d5ac35276755caddb2": { + "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": "" + } + }, + "a21b2cf62ddb49adb247729d6272bd67": { + "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 + } + }, + "311d70a14ccf43238f8f329601717589": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ButtonStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ButtonStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "button_color": null, + "font_weight": "" + } + }, + "7b7f92e08bd34e338a6dc09a64dbd3c7": { + "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 + } + }, + "9f8e89d7d6c64cd494b9a9ae2afa0a45": { + "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": "" + } + }, + "4d2b635c51cc4c63a7309ecdef49ad88": { + "model_module": "@jupyter-widgets/controls", + "model_name": "LabelModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "LabelModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "LabelView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aac197b284cb44f8828300bf57cb9a24", + "placeholder": "​", + "style": "IPY_MODEL_35918bad71974feca0ef6f8566fe729b", + "value": "Connecting..." + } + }, + "aac197b284cb44f8828300bf57cb9a24": { + "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 + } + }, + "35918bad71974feca0ef6f8566fe729b": { + "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": "" + } + }, + "46af08f940bd46198caf1a31681a3c25": { + "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_b87e1c47417c416da970379fdfbc3da9", + "IPY_MODEL_f8c88ba757dd4715ad9b4e2811035085", + "IPY_MODEL_571853672e9b4f62b0b7a80a36a82fcd" + ], + "layout": "IPY_MODEL_23fdc73cc9a9432abb7010d24ae05446" + } + }, + "b87e1c47417c416da970379fdfbc3da9": { + "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_f30ffeb82f804ecca6147e80a2bea35e", + "placeholder": "​", + "style": "IPY_MODEL_3f04970eacb3400e9f7974c5386c9f06", + "value": "adapter_config.json: 100%" + } + }, + "f8c88ba757dd4715ad9b4e2811035085": { + "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_284dd49a6da240799285d70d30ce474d", + "max": 737, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4b92e99fa6e441afa737d86064bfa0f6", + "value": 737 + } + }, + "571853672e9b4f62b0b7a80a36a82fcd": { + "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_d4cfff10827440ce833d0532f2ee34bb", + "placeholder": "​", + "style": "IPY_MODEL_2a7d39095aff46b1ab95fd6a8d706704", + "value": " 737/737 [00:00<00:00, 52.2kB/s]" + } + }, + "23fdc73cc9a9432abb7010d24ae05446": { + "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 + } + }, + "f30ffeb82f804ecca6147e80a2bea35e": { + "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 + } + }, + "3f04970eacb3400e9f7974c5386c9f06": { + "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": "" + } + }, + "284dd49a6da240799285d70d30ce474d": { + "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 + } + }, + "4b92e99fa6e441afa737d86064bfa0f6": { + "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": "" + } + }, + "d4cfff10827440ce833d0532f2ee34bb": { + "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 + } + }, + "2a7d39095aff46b1ab95fd6a8d706704": { + "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": "" + } + }, + "cab1da04294b403eb4d74d6d0845a6a4": { + "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_922866fce5434d61824be1659845bb56", + "IPY_MODEL_ead3e2bb8daa43e2b443467df2f83905", + "IPY_MODEL_ef93fb4d8f9f45748d248bc7763d7826" + ], + "layout": "IPY_MODEL_53079f52ea3f4255ab124453cd2692ee" + } + }, + "922866fce5434d61824be1659845bb56": { + "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_26cd9f4cd1b14a8ca3ee5ce9256e7adb", + "placeholder": "​", + "style": "IPY_MODEL_da0b4a20a37f4763a3a36aabf322c9ca", + "value": "adapter_model.safetensors: 100%" + } + }, + "ead3e2bb8daa43e2b443467df2f83905": { + "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_0fb0146823bc476ab1ebee879a49f113", + "max": 289636872, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_026aee8ec19b4287865850926ac27e32", + "value": 289636872 + } + }, + "ef93fb4d8f9f45748d248bc7763d7826": { + "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_f8aea496688e41049706b426034e3497", + "placeholder": "​", + "style": "IPY_MODEL_4c455570f131445ab2079408beedd3a4", + "value": " 290M/290M [00:13<00:00, 19.8MB/s]" + } + }, + "53079f52ea3f4255ab124453cd2692ee": { + "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 + } + }, + "26cd9f4cd1b14a8ca3ee5ce9256e7adb": { + "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 + } + }, + "da0b4a20a37f4763a3a36aabf322c9ca": { + "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": "" + } + }, + "0fb0146823bc476ab1ebee879a49f113": { + "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 + } + }, + "026aee8ec19b4287865850926ac27e32": { + "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": "" + } + }, + "f8aea496688e41049706b426034e3497": { + "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 + } + }, + "4c455570f131445ab2079408beedd3a4": { + "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": 5 +} \ No newline at end of file