{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "gpuType": "T4" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "8b46186a2a4d424ab92a0c6de483ad50": { "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_6f109f90c1d9428ab36e91ccf326469c", "IPY_MODEL_6c2752a126644e0d8d3b2d22fc17614c", "IPY_MODEL_8690d534ecd8450794948d13bc067946" ], "layout": "IPY_MODEL_f74224b339834aad84434cce574b1332" } }, "6f109f90c1d9428ab36e91ccf326469c": { "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_b6ffbb1bc7eb43f9bf97c912d9806739", "placeholder": "​", "style": "IPY_MODEL_8e88cdc779eb4b80afd62ae49878bb47", "value": "preprocessor_config.json: 100%" } }, "6c2752a126644e0d8d3b2d22fc17614c": { "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_c40cf25fd69e4fc8801bf7867ed86247", "max": 160, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_647ba97049dc4023afa23a16c597bbe3", "value": 160 } }, "8690d534ecd8450794948d13bc067946": { "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_60410c1f35a441e3afce5d250281eb62", "placeholder": "​", "style": "IPY_MODEL_f1e6c83160bd42919796bdec2ed9802b", "value": " 160/160 [00:00<00:00, 13.7kB/s]" } }, "f74224b339834aad84434cce574b1332": { "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 } }, "b6ffbb1bc7eb43f9bf97c912d9806739": { "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 } }, "8e88cdc779eb4b80afd62ae49878bb47": { "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": "" } }, "c40cf25fd69e4fc8801bf7867ed86247": { "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 } }, "647ba97049dc4023afa23a16c597bbe3": { "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": "" } }, "60410c1f35a441e3afce5d250281eb62": { "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 } }, "f1e6c83160bd42919796bdec2ed9802b": { "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": "" } }, "16e26fd32f6c413fab20d2a9deb7f497": { "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_1c667d9c39cc464fadac995364e5d09d", "IPY_MODEL_7876d7ab92af4a9aa6e5c2e0f1f12345", "IPY_MODEL_614faa3735f448c89e487971e46b6f10" ], "layout": "IPY_MODEL_b692fbf35b5341338950ec7b88781538" } }, "1c667d9c39cc464fadac995364e5d09d": { "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_3dbade1400094a3e95b2f8d84dc5e780", "placeholder": "​", "style": "IPY_MODEL_35b8ee694b74457a954ee1d419504d1c", "value": "config.json: 100%" } }, "7876d7ab92af4a9aa6e5c2e0f1f12345": { "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_408ff5d8577545deb50bc6be88c5e4bf", "max": 502, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_14ccf25245094794b6ec35110f39402a", "value": 502 } }, "614faa3735f448c89e487971e46b6f10": { "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_0beda046999c49e8b9d4451c5876aa20", "placeholder": "​", "style": "IPY_MODEL_8607d274e1254c30a59d0becaa5712c3", "value": " 502/502 [00:00<00:00, 48.3kB/s]" } }, "b692fbf35b5341338950ec7b88781538": { "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 } }, "3dbade1400094a3e95b2f8d84dc5e780": { "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 } }, "35b8ee694b74457a954ee1d419504d1c": { "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": "" } }, "408ff5d8577545deb50bc6be88c5e4bf": { "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 } }, "14ccf25245094794b6ec35110f39402a": { "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": "" } }, "0beda046999c49e8b9d4451c5876aa20": { "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 } }, "8607d274e1254c30a59d0becaa5712c3": { "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": "" } }, "19091b14e34243cc9f2c57a5a729bd75": { "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_2a29f7095d6349f49c7b49c9efc368a4", "IPY_MODEL_a4fa17419a3f4742bc8e82d194dc3059", "IPY_MODEL_3038bb95c99347ef876f2b807c4ee403" ], "layout": "IPY_MODEL_3cf3719e881f4e148ce0863c7ad08809" } }, "2a29f7095d6349f49c7b49c9efc368a4": { "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_0e6836a440034a339543d301d6da0464", "placeholder": "​", "style": "IPY_MODEL_139605ba8f524ddfa34a96fb93bb5699", "value": "model.safetensors: 100%" } }, "a4fa17419a3f4742bc8e82d194dc3059": { "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_e286df6bad9946dca65eff385943e3c8", "max": 345579424, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_b3ae6d59394f480ab4c5b236f239a3f6", "value": 345579424 } }, "3038bb95c99347ef876f2b807c4ee403": { "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_898fa3925c094f108bec6c7c46f2db81", "placeholder": "​", "style": "IPY_MODEL_2b76bcab1f8645568c20978dca1486ad", "value": " 346M/346M [00:06<00:00, 38.3MB/s]" } }, "3cf3719e881f4e148ce0863c7ad08809": { "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 } }, "0e6836a440034a339543d301d6da0464": { "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 } }, "139605ba8f524ddfa34a96fb93bb5699": { "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": "" } }, "e286df6bad9946dca65eff385943e3c8": { "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 } }, "b3ae6d59394f480ab4c5b236f239a3f6": { "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": "" } }, "898fa3925c094f108bec6c7c46f2db81": { "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 } }, "2b76bcab1f8645568c20978dca1486ad": { "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": "" } } } } }, "cells": [ { "cell_type": "code", "source": [ "!pip uninstall -y torch torchvision torchaudio transformers\n", "!pip install torch torchvision torchaudio transformers --upgrade" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "omjeOy0whMqR", "outputId": "18d884d7-4e44-4d27-c80a-17007f1cb3e6" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Found existing installation: torch 2.6.0+cu124\n", "Uninstalling torch-2.6.0+cu124:\n", " Successfully uninstalled torch-2.6.0+cu124\n", "Found existing installation: torchvision 0.21.0+cu124\n", "Uninstalling torchvision-0.21.0+cu124:\n", " Successfully uninstalled torchvision-0.21.0+cu124\n", "Found existing installation: torchaudio 2.6.0+cu124\n", "Uninstalling torchaudio-2.6.0+cu124:\n", " Successfully uninstalled torchaudio-2.6.0+cu124\n", "Found existing installation: transformers 4.53.0\n", "Uninstalling transformers-4.53.0:\n", " Successfully uninstalled transformers-4.53.0\n", "Collecting torch\n", " Downloading torch-2.7.1-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (29 kB)\n", "Collecting torchvision\n", " Downloading torchvision-0.22.1-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (6.1 kB)\n", "Collecting torchaudio\n", " Downloading torchaudio-2.7.1-cp311-cp311-manylinux_2_28_x86_64.whl.metadata (6.6 kB)\n", "Collecting transformers\n", " Downloading transformers-4.53.0-py3-none-any.whl.metadata (39 kB)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch) (3.18.0)\n", "Requirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.11/dist-packages (from torch) (4.14.0)\n", "Collecting sympy>=1.13.3 (from torch)\n", " Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch) (3.5)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch) (3.1.6)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch) (2025.3.2)\n", "Collecting nvidia-cuda-nvrtc-cu12==12.6.77 (from torch)\n", " Downloading nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cuda-runtime-cu12==12.6.77 (from torch)\n", " Downloading nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cuda-cupti-cu12==12.6.80 (from torch)\n", " Downloading nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cudnn-cu12==9.5.1.17 (from torch)\n", " Downloading nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cublas-cu12==12.6.4.1 (from torch)\n", " Downloading nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cufft-cu12==11.3.0.4 (from torch)\n", " Downloading nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-curand-cu12==10.3.7.77 (from torch)\n", " Downloading nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cusolver-cu12==11.7.1.2 (from torch)\n", " Downloading nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cusparse-cu12==12.5.4.2 (from torch)\n", " Downloading nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-cusparselt-cu12==0.6.3 (from torch)\n", " Downloading nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl.metadata (6.8 kB)\n", "Collecting nvidia-nccl-cu12==2.26.2 (from torch)\n", " Downloading nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.0 kB)\n", "Collecting nvidia-nvtx-cu12==12.6.77 (from torch)\n", " Downloading nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.6 kB)\n", "Collecting nvidia-nvjitlink-cu12==12.6.85 (from torch)\n", " Downloading nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl.metadata (1.5 kB)\n", "Collecting nvidia-cufile-cu12==1.11.1.6 (from torch)\n", " Downloading nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (1.5 kB)\n", "Collecting triton==3.3.1 (from torch)\n", " Downloading triton-3.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (1.5 kB)\n", "Requirement already satisfied: setuptools>=40.8.0 in /usr/local/lib/python3.11/dist-packages (from triton==3.3.1->torch) (75.2.0)\n", "Requirement already satisfied: numpy in /usr/local/lib/python3.11/dist-packages (from torchvision) (2.0.2)\n", "Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in /usr/local/lib/python3.11/dist-packages (from torchvision) (11.2.1)\n", "Requirement already satisfied: huggingface-hub<1.0,>=0.30.0 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.33.1)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from transformers) (24.2)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.11/dist-packages (from transformers) (6.0.2)\n", "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.11/dist-packages (from transformers) (2024.11.6)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.11/dist-packages (from transformers) (2.32.3)\n", "Requirement already satisfied: tokenizers<0.22,>=0.21 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.21.2)\n", "Requirement already satisfied: safetensors>=0.4.3 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.5.3)\n", "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.11/dist-packages (from transformers) (4.67.1)\n", "Requirement already satisfied: hf-xet<2.0.0,>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from huggingface-hub<1.0,>=0.30.0->transformers) (1.1.5)\n", "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy>=1.13.3->torch) (1.3.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch) (3.0.2)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (3.4.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (3.10)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (2.4.0)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.11/dist-packages (from requests->transformers) (2025.6.15)\n", "Downloading torch-2.7.1-cp311-cp311-manylinux_2_28_x86_64.whl (821.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m821.2/821.2 MB\u001b[0m \u001b[31m1.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cublas_cu12-12.6.4.1-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (393.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m393.1/393.1 MB\u001b[0m \u001b[31m4.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.6.80-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (8.9 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.9/8.9 MB\u001b[0m \u001b[31m48.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl (23.7 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m23.7/23.7 MB\u001b[0m \u001b[31m29.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (897 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m897.7/897.7 kB\u001b[0m \u001b[31m21.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cudnn_cu12-9.5.1.17-py3-none-manylinux_2_28_x86_64.whl (571.0 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m571.0/571.0 MB\u001b[0m \u001b[31m3.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cufft_cu12-11.3.0.4-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (200.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m200.2/200.2 MB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cufile_cu12-1.11.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (1.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m46.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_curand_cu12-10.3.7.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (56.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m15.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cusolver_cu12-11.7.1.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (158.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m158.2/158.2 MB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cusparse_cu12-12.5.4.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (216.6 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m216.6/216.6 MB\u001b[0m \u001b[31m5.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_cusparselt_cu12-0.6.3-py3-none-manylinux2014_x86_64.whl (156.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m156.8/156.8 MB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_nccl_cu12-2.26.2-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (201.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m201.3/201.3 MB\u001b[0m \u001b[31m6.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl (19.7 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m19.7/19.7 MB\u001b[0m \u001b[31m47.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading nvidia_nvtx_cu12-12.6.77-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (89 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m89.3/89.3 kB\u001b[0m \u001b[31m7.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading triton-3.3.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (155.7 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m155.7/155.7 MB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading torchvision-0.22.1-cp311-cp311-manylinux_2_28_x86_64.whl (7.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.5/7.5 MB\u001b[0m \u001b[31m89.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading torchaudio-2.7.1-cp311-cp311-manylinux_2_28_x86_64.whl (3.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.5/3.5 MB\u001b[0m \u001b[31m85.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading transformers-4.53.0-py3-none-any.whl (10.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.8/10.8 MB\u001b[0m \u001b[31m91.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hDownloading sympy-1.14.0-py3-none-any.whl (6.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.3/6.3 MB\u001b[0m \u001b[31m92.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hInstalling collected packages: nvidia-cusparselt-cu12, triton, sympy, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufile-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nvidia-cusparse-cu12, nvidia-cufft-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, transformers, torch, torchvision, torchaudio\n", " Attempting uninstall: nvidia-cusparselt-cu12\n", " Found existing installation: nvidia-cusparselt-cu12 0.6.2\n", " Uninstalling nvidia-cusparselt-cu12-0.6.2:\n", " Successfully uninstalled nvidia-cusparselt-cu12-0.6.2\n", " Attempting uninstall: triton\n", " Found existing installation: triton 3.2.0\n", " Uninstalling triton-3.2.0:\n", " Successfully uninstalled triton-3.2.0\n", " Attempting uninstall: sympy\n", " Found existing installation: sympy 1.13.1\n", " Uninstalling sympy-1.13.1:\n", " Successfully uninstalled sympy-1.13.1\n", " Attempting uninstall: nvidia-nvtx-cu12\n", " Found existing installation: nvidia-nvtx-cu12 12.4.127\n", " Uninstalling nvidia-nvtx-cu12-12.4.127:\n", " Successfully uninstalled nvidia-nvtx-cu12-12.4.127\n", " Attempting uninstall: nvidia-nvjitlink-cu12\n", " Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n", " Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n", " Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n", " Attempting uninstall: nvidia-nccl-cu12\n", " Found existing installation: nvidia-nccl-cu12 2.21.5\n", " Uninstalling nvidia-nccl-cu12-2.21.5:\n", " Successfully uninstalled nvidia-nccl-cu12-2.21.5\n", " Attempting uninstall: nvidia-curand-cu12\n", " Found existing installation: nvidia-curand-cu12 10.3.6.82\n", " Uninstalling nvidia-curand-cu12-10.3.6.82:\n", " Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n", " Attempting uninstall: nvidia-cuda-runtime-cu12\n", " Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n", " Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n", " Attempting uninstall: nvidia-cuda-nvrtc-cu12\n", " Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n", " Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n", " Attempting uninstall: nvidia-cuda-cupti-cu12\n", " Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n", " Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n", " Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n", " Attempting uninstall: nvidia-cublas-cu12\n", " Found existing installation: nvidia-cublas-cu12 12.5.3.2\n", " Uninstalling nvidia-cublas-cu12-12.5.3.2:\n", " Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n", " Attempting uninstall: nvidia-cusparse-cu12\n", " Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n", " Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n", " Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n", " Attempting uninstall: nvidia-cufft-cu12\n", " Found existing installation: nvidia-cufft-cu12 11.2.3.61\n", " Uninstalling nvidia-cufft-cu12-11.2.3.61:\n", " Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n", " Attempting uninstall: nvidia-cudnn-cu12\n", " Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n", " Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n", " Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n", " Attempting uninstall: nvidia-cusolver-cu12\n", " Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n", " Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n", " Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "fastai 2.7.19 requires torch<2.7,>=1.10, but you have torch 2.7.1 which is incompatible.\u001b[0m\u001b[31m\n", "\u001b[0mSuccessfully installed nvidia-cublas-cu12-12.6.4.1 nvidia-cuda-cupti-cu12-12.6.80 nvidia-cuda-nvrtc-cu12-12.6.77 nvidia-cuda-runtime-cu12-12.6.77 nvidia-cudnn-cu12-9.5.1.17 nvidia-cufft-cu12-11.3.0.4 nvidia-cufile-cu12-1.11.1.6 nvidia-curand-cu12-10.3.7.77 nvidia-cusolver-cu12-11.7.1.2 nvidia-cusparse-cu12-12.5.4.2 nvidia-cusparselt-cu12-0.6.3 nvidia-nccl-cu12-2.26.2 nvidia-nvjitlink-cu12-12.6.85 nvidia-nvtx-cu12-12.6.77 sympy-1.14.0 torch-2.7.1 torchaudio-2.7.1 torchvision-0.22.1 transformers-4.53.0 triton-3.3.1\n" ] } ] }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "qmblZvrtqcXt", "outputId": "b0417ddc-374b-44d7-cc66-f032b7c71072" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Mounted at /content/drive\n" ] } ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 967, "referenced_widgets": [ "8b46186a2a4d424ab92a0c6de483ad50", "6f109f90c1d9428ab36e91ccf326469c", "6c2752a126644e0d8d3b2d22fc17614c", "8690d534ecd8450794948d13bc067946", "f74224b339834aad84434cce574b1332", "b6ffbb1bc7eb43f9bf97c912d9806739", "8e88cdc779eb4b80afd62ae49878bb47", "c40cf25fd69e4fc8801bf7867ed86247", "647ba97049dc4023afa23a16c597bbe3", "60410c1f35a441e3afce5d250281eb62", "f1e6c83160bd42919796bdec2ed9802b", "16e26fd32f6c413fab20d2a9deb7f497", "1c667d9c39cc464fadac995364e5d09d", "7876d7ab92af4a9aa6e5c2e0f1f12345", "614faa3735f448c89e487971e46b6f10", "b692fbf35b5341338950ec7b88781538", "3dbade1400094a3e95b2f8d84dc5e780", "35b8ee694b74457a954ee1d419504d1c", "408ff5d8577545deb50bc6be88c5e4bf", "14ccf25245094794b6ec35110f39402a", "0beda046999c49e8b9d4451c5876aa20", "8607d274e1254c30a59d0becaa5712c3", "19091b14e34243cc9f2c57a5a729bd75", "2a29f7095d6349f49c7b49c9efc368a4", "a4fa17419a3f4742bc8e82d194dc3059", "3038bb95c99347ef876f2b807c4ee403", "3cf3719e881f4e148ce0863c7ad08809", "0e6836a440034a339543d301d6da0464", "139605ba8f524ddfa34a96fb93bb5699", "e286df6bad9946dca65eff385943e3c8", "b3ae6d59394f480ab4c5b236f239a3f6", "898fa3925c094f108bec6c7c46f2db81", "2b76bcab1f8645568c20978dca1486ad" ] }, "id": "hzlRggiqhEuK", "outputId": "2da93cfd-9081-4acc-92e3-19b868fdb83d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "env: CUDA_LAUNCH_BLOCKING=1\n", "Mounted at /content/drive\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.11/dist-packages/huggingface_hub/utils/_auth.py:94: UserWarning: \n", "The secret `HF_TOKEN` does not exist in your Colab secrets.\n", "To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n", "You will be able to reuse this secret in all of your notebooks.\n", "Please note that authentication is recommended but still optional to access public models or datasets.\n", " warnings.warn(\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "preprocessor_config.json: 0%| | 0.00/160 [00:00= patience:\n", " print(\"⛔ Early stopping triggered.\")\n", " break\n", "\n", "#validation\n", "\n", "def validate_model(model, val_loader):\n", " model.eval()\n", " total_loss, correct, total = 0, 0, 0\n", " pbar = tqdm(val_loader, desc=\"🔍 Validating\", leave=False)\n", "\n", " with torch.no_grad():\n", " for images, labels in pbar:\n", " if images.numel() == 0:\n", " continue\n", "\n", " if not torch.all((labels == 0) | (labels == 1)):\n", " print(\"Invalid labels found in val:\", labels)\n", " continue\n", "\n", " images = images.to(device)\n", " labels = labels.to(device)\n", " outputs = model(pixel_values=images)\n", " loss = criterion(outputs.logits, labels)\n", " total_loss += loss.item()\n", "\n", " preds = torch.argmax(outputs.logits, dim=1)\n", " correct += (preds == labels).sum().item()\n", " total += labels.size(0)\n", "\n", " pbar.set_postfix({\"loss\": f\"{loss.item():.4f}\", \"acc\": f\"{(correct / total):.4f}\"})\n", "\n", " avg_loss = total_loss / len(val_loader)\n", " acc = correct / total\n", " print(f\"📊 Validation Loss: {avg_loss:.4f} | Accuracy: {acc:.4f}\")\n", " return avg_loss\n", "\n", "#training start\n", "\n", "train_model(model, train_loader, val_loader, epochs=10)\n", "torch.save(model.state_dict(), \"/content/drive/MyDrive/train_final/trained_vit_final.pth\")\n", "print(\"✅ Training complete. Model saved.\")\n" ] }, { "cell_type": "code", "source": [ "#import libraries\n", "\n", "from torchvision.datasets import ImageFolder\n", "from PIL import UnidentifiedImageError\n", "from torchvision import transforms\n", "from transformers import ViTForImageClassification, ViTImageProcessor\n", "from sklearn.metrics import accuracy_score, f1_score, classification_report, confusion_matrix\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", "from torch.utils.data import DataLoader\n", "import os\n", "\n", "#skip corrupt images\n", "\n", "class SafeImageFolder(ImageFolder):\n", " def __getitem__(self, index):\n", " try:\n", " return super().__getitem__(index)\n", " except (UnidentifiedImageError, OSError, ValueError):\n", " print(f\"Skipping corrupt image: {self.samples[index][0]}\")\n", " return None\n", "\n", "#load transformer\n", "\n", "processor = ViTImageProcessor.from_pretrained(\"google/vit-base-patch16-224-in21k\")\n", "def transform_fn(image):\n", " encoding = processor(image.convert(\"RGB\"), return_tensors=\"pt\")\n", " return encoding[\"pixel_values\"].squeeze(0)\n", "\n", "transform = transforms.Compose([transforms.Lambda(transform_fn)])\n", "\n", "#safe collate\n", "def safe_collate(batch):\n", " batch = [b for b in batch if b is not None]\n", " if not batch:\n", " return torch.empty(0), torch.empty(0, dtype=torch.long)\n", " imgs, labs = zip(*batch)\n", " return torch.stack(imgs), torch.tensor(labs, dtype=torch.long)\n", "\n", "#load balanced test dataset\n", "\n", "test_dir = \"/content/drive/MyDrive/test_final\"\n", "full_ds = SafeImageFolder(root=test_dir, transform=transform)\n", "\n", "print(\" Detected classes:\", full_ds.classes)\n", "print(\" Class-to-index mapping:\", full_ds.class_to_idx)\n", "# Manually define correct label mapping\n", "real_label = \"realt\"\n", "fake_label = \"faket\"\n", "real_idx = full_ds.class_to_idx[real_label]\n", "fake_idx = full_ds.class_to_idx[fake_label]\n", "\n", "print(f\" Correct mapping: '{real_label}' = REAL, '{fake_label}' = FAKE\")\n", "readable_class_names = [\"real\", \"fake\"]\n", "\n", "\n", "# Create test loader\n", "\n", "test_loader = DataLoader(full_ds, batch_size=16, shuffle=False, num_workers=2, collate_fn=safe_collate)\n", "\n", "#load trained model\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "\n", "model = ViTForImageClassification.from_pretrained(\"google/vit-base-patch16-224-in21k\", num_labels=2)\n", "\n", "checkpoint_path = \"/content/drive/MyDrive/train_final/trained_vit_final.pth\"\n", "if os.path.exists(checkpoint_path):\n", " state_dict = torch.load(checkpoint_path, map_location=device)\n", " model.load_state_dict(state_dict)\n", " print(\" Trained model weights loaded.\")\n", "else:\n", " print(\" ERROR: Trained model checkpoint not found!\")\n", "\n", "model.to(device)\n", "model.eval()\n", "\n", "#testing\n", "\n", "all_preds, all_labels = [], []\n", "\n", "with torch.no_grad():\n", " for images, labels in test_loader:\n", " if images.numel() == 0:\n", " continue\n", " images = images.to(device)\n", " labels = labels.to(device)\n", "\n", " outputs = model(pixel_values=images)\n", " preds = torch.argmax(outputs.logits, dim=1)\n", "\n", " all_preds.extend(preds.cpu().numpy())\n", " all_labels.extend(labels.cpu().numpy())\n", "\n", "all_preds = np.array(all_preds)\n", "all_labels = np.array(all_labels)\n", "\n", "\n", "# Evaluation Metrics\n", "\n", "print(\"\\n Evaluation Complete\")\n", "print(f\" Accuracy : {accuracy_score(all_labels, all_preds):.4f}\")\n", "print(f\" Macro F1 Score : {f1_score(all_labels, all_preds, average='macro'):.4f}\")\n", "print(f\" Micro F1 Score : {f1_score(all_labels, all_preds, average='micro'):.4f}\")\n", "print(\"\\n Classification Report:\\n\")\n", "print(classification_report(all_labels, all_preds, target_names=readable_class_names))\n", "\n", "\n", "# CONFUSION MATRIX\n", "cm = confusion_matrix(all_labels, all_preds)\n", "plt.figure(figsize=(6, 5))\n", "sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Purples\",\n", " xticklabels=readable_class_names,\n", " yticklabels=readable_class_names)\n", "plt.xlabel(\"Predicted\")\n", "plt.ylabel(\"Actual\")\n", "plt.title(\"Confusion Matrix (Balanced Dataset)\")\n", "plt.tight_layout()\n", "plt.show()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 926 }, "id": "_OQxz45Pzew1", "outputId": "a20d3513-0ad3-44dd-d937-3d1d5223f6b7" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ " Detected classes: ['faket', 'realt']\n", " Class-to-index mapping: {'faket': 0, 'realt': 1}\n", " Correct mapping: 'realt' = REAL, 'faket' = FAKE\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "Some weights of ViTForImageClassification were not initialized from the model checkpoint at google/vit-base-patch16-224-in21k and are newly initialized: ['classifier.bias', 'classifier.weight']\n", "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ " Trained model weights loaded.\n", "\n", " Evaluation Complete\n", " Accuracy : 0.9417\n", " Macro F1 Score : 0.9417\n", " Micro F1 Score : 0.9417\n", "\n", " Classification Report:\n", "\n", " precision recall f1-score support\n", "\n", " real 0.95 0.93 0.94 180\n", " fake 0.93 0.95 0.94 180\n", "\n", " accuracy 0.94 360\n", " macro avg 0.94 0.94 0.94 360\n", "weighted avg 0.94 0.94 0.94 360\n", "\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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1bx583T27Fm1aNFC//3vf7Vo0SJ17979spcZX42YmBiNGTNGPXr00LBhw3T+/HnNmTNHt9xyi9Pkw7i4OCUmJqpTp06KiorSiRMnNHv2bN18882Ov2Lz8+KLL6pDhw5q3LixBg4cqL/++kuzZs1SUFDQFYeLrpXVatWzzz77r/06d+6suLg49e/fX3feead+/PFHLVmyRBUrVnTqV6lSJQUHB2vu3LkKCAiQn5+fGjZs6JhvUlBr167V7Nmz9dxzzzku6V6wYIFatmypcePGadq0aVfcvlu3bnrmmWd07tw5xy/YXJcuXdK7774ryT6Uc/ToUc2dO1c5OTl67rnnXD7nfwoMDFTz5s01bdo0ZWVl6aabbtLq1atdriT9XeXKlfXMM89o0qRJatasmXr27CmbzaZt27YpMjJS8fHxCgwM1Jw5c/TAAw+oXr16iomJUZkyZZScnKwvvvhCTZo00WuvvSZJio+PV6dOndS0aVMNGDBAZ86ccdwb5u/VqytJS0tzvI/nz5933KH40KFDiomJ0aRJkxx927ZtK29vb3Xp0kUPP/yw0tPT9eabbyo0NFTHjx932m/9+vU1Z84cPf/886pcubJCQ0PVunXrAn8ebdu2VXh4uJo0aaKwsDDt27dPr732mjp16uSYAzRlyhStW7dODRs21KBBg1SjRg2dOXNG33//vb755hvHHyn/9n1OSEhQiRIldNddd13Fpwq4wBOXaMH99u/fbwwaNMgoX7684e3tbQQEBBhNmjQxZs2aZVy4cMHRLysry5g4caJRoUIFw8vLyyhbtqwxduxYpz6GYb8UvFOnTnmO889LkC93Kbhh2C+VrVmzpuHt7W1UrVrVePfdd/NcCr5mzRqjW7duRmRkpOHt7W1ERkYaffr0Mfbv35/nGP+8vPSbb74xmjRpYvj6+hqBgYFGly5djL179zr1yT3ePy81X7BggSHJOHLkyGXfU8NwvhT8ci53Kfjjjz9uREREGL6+vkaTJk2MLVu25HsJ92effWbUqFHDKF68uNN5Xuny4b/v59y5c0ZUVJRRr149Iysry6nfyJEjDavVamzZsuWK55CammoUL17cWLx4cZ7z1z8uAw8MDDTatGljfPPNN059C3rO+X2ev/32m9GjRw8jODjYCAoKMu655x7j2LFjhiTjueeec/Rz9fN8++23jbp16xo2m80o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AIqMQ4cOKSIiQnfeeaenQwGKNIal4DYtW7bU0KFDNWLECJUuXVrt2rXTTz/9pA4dOsjf319hYWF64IEHdOrUKcc2q1atUtOmTRUcHKxSpUqpc+fOOnTokAfPAvCMfv366bHHHlNycrIsFovKly/v8s9Hdna2BgwYoGrVqik5OVmS9Nlnn6levXry8fFRxYoVNXHiRF26dOlGnRbgESQ3cKtFixbJ29tbmzdv1pQpU9S6dWvVrVtX27dv16pVq5SamqrevXs7+mdkZGjUqFHavn271qxZI6vVqh49eignJ8eDZwHceK+++qri4uJ088036/jx49q2bZtLPx+ZmZm65557tHPnTm3cuFHlypXTxo0b9eCDD2r48OHau3ev3njjDS1cuFAvvPCCB84QuIEMwE1atGhh1K1b1/F60qRJRtu2bZ36/Prrr4YkIykpKd99nDx50pBk/Pjjj4ZhGMaRI0cMScYPP/xw3eIGCovp06cbUVFRl11/uZ+PjRs3Gm3atDGaNm1qnD171tG/TZs2xuTJk532sXjxYiMiIuK6xA8UFlRu4Fb169d3/HvXrl1at26d/P39HUu1atUkyVFaP3DggPr06aOKFSsqMDBQ5cuXlyRHSR34X1bQn48+ffooIyNDq1evVlBQkKN9165diouLc/oZHDRokI4fP67z58/fyFMBbigmFMOt/Pz8HP9OT09Xly5dNHXq1Dz9IiIiJEldunRRVFSU3nzzTUVGRionJ0c1a9bUxYsXb1jMQGFV0J+Pjh076t1339WWLVvUunVrR3t6eromTpyonj175tm3j4/PdY8f8BSSG1w39erV07Jly1S+fHkVL573q3b69GklJSXpzTffVLNmzSRJmzZtutFhAoWSKz8fjzzyiGrWrKmuXbvqiy++UIsWLSTZfwaTkpJUuXLlGxY3UBiQ3OC6GTJkiN5880316dNHTz75pEJCQnTw4EG9//77euutt1SyZEmVKlVK8+bNU0REhJKTk/XUU095OmygUHD15+Oxxx5Tdna2OnfurK+++kpNmzbV+PHj1blzZ5UrV0533323rFardu3apZ9++knPP//8DTwb4MZizg2um8jISG3evFnZ2dlq27atatWqpREjRig4OFhWq1VWq1Xvv/++duzYoZo1a2rkyJF68cUXPR02UChczc/HiBEjNHHiRHXs2FHffvut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\n" }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "cm = confusion_matrix(all_labels, all_preds)\n", "plt.figure(figsize=(6, 5))\n", "sns.heatmap(cm, annot=True, fmt=\"d\", cmap=\"Purples\",\n", " xticklabels=readable_class_names,\n", " yticklabels=readable_class_names)\n", "plt.xlabel(\"Predicted\")\n", "plt.ylabel(\"Actual\")\n", "plt.title(\"Confusion Matrix (Balanced Dataset)\")\n", "plt.tight_layout()\n", "plt.show()\n" ], "metadata": { "id": "nUGr_cS8-lp8" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "**ROC CURVE**" ], "metadata": { "id": "qveLe1JWVEz9" } }, { "cell_type": "code", "source": [ "from torchvision.datasets import ImageFolder\n", "from torchvision import transforms\n", "from transformers import ViTForImageClassification, ViTImageProcessor\n", "from torch.utils.data import DataLoader\n", "from PIL import UnidentifiedImageError\n", "from sklearn.metrics import roc_curve, auc\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import torch\n", "\n", "# setup device\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "\n", "# skipping corrupt images\n", "\n", "class SafeImageFolder(ImageFolder):\n", " def __getitem__(self, index):\n", " try:\n", " return super().__getitem__(index)\n", " except (UnidentifiedImageError, OSError, ValueError):\n", " print(f\"Skipping corrupt image: {self.samples[index][0]}\")\n", " return None\n", "\n", "def safe_collate(batch):\n", " batch = [b for b in batch if b is not None]\n", " if not batch:\n", " return torch.empty(0), torch.empty(0, dtype=torch.long)\n", " imgs, labs = zip(*batch)\n", " return torch.stack(imgs), torch.tensor(labs, dtype=torch.long)\n", "\n", "# transformer\n", "\n", "processor = ViTImageProcessor.from_pretrained(\"google/vit-base-patch16-224-in21k\")\n", "def transform_fn(image):\n", " encoding = processor(image.convert(\"RGB\"), return_tensors=\"pt\")\n", " return encoding[\"pixel_values\"].squeeze(0)\n", "transform = transforms.Compose([transforms.Lambda(transform_fn)])\n", "\n", "# load test data\n", "\n", "test_dataset = SafeImageFolder(\"/content/drive/MyDrive/test_final\", transform=transform)\n", "test_loader = DataLoader(test_dataset, batch_size=16, shuffle=False, num_workers=2, collate_fn=safe_collate)\n", "\n", "#model\n", "\n", "model = ViTForImageClassification.from_pretrained(\"google/vit-base-patch16-224-in21k\", num_labels=2)\n", "model.load_state_dict(torch.load(\"/content/drive/MyDrive/train_final/trained_vit_final.pth\", map_location=device))\n", "model.to(device)\n", "model.eval()\n", "\n", "#labelling\n", "\n", "all_labels, all_probs = [], []\n", "\n", "with torch.no_grad():\n", " for images, labels in test_loader:\n", " if images.numel() == 0:\n", " continue\n", " images = images.to(device)\n", " outputs = model(pixel_values=images)\n", " probs = torch.softmax(outputs.logits, dim=1)\n", " all_probs.extend(probs[:, 1].cpu().numpy())\n", " all_labels.extend(labels.cpu().numpy())\n", "\n", "# ROC CURVE\n", "fpr, tpr, _ = roc_curve(all_labels, all_probs)\n", "roc_auc = auc(fpr, tpr)\n", "\n", "plt.figure(figsize=(6, 5))\n", "plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (AUC = {roc_auc:.4f})')\n", "plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n", "plt.xlim([0.0, 1.0])\n", "plt.ylim([0.0, 1.05])\n", "plt.xlabel('False Positive Rate')\n", "plt.ylabel('True Positive Rate')\n", "plt.title('ROC Curve')\n", "plt.legend(loc=\"lower right\")\n", "plt.grid(True)\n", "plt.tight_layout()\n", "plt.show()\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 562 }, "id": "lOGDap7E4ZN0", "outputId": "a4989f1c-6450-4b58-e954-25e76e635711" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "Some weights of ViTForImageClassification were not initialized from the model checkpoint at google/vit-base-patch16-224-in21k and are newly initialized: ['classifier.bias', 'classifier.weight']\n", "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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395bwlQFp+hdcCQiIiK9EkJg2bI/0aTJKnTvvgWJielSR5IEiyYiIiLKUVJSBvr1+w2ffbYH6ekq3LnzHD/8cFrqWJLg5TkiIiLK1l9/PUGPHqG4dSte0zZ6dENMndpSwlTSYdFEREREWaxbdwWffbYbqamZAABrawVWreoCH58PJU4mHRZNREREpJGaqsTo0fuwatVlTVvt2o4IDfVBpUofSJhMeiyaiIiICACQmalGixZrcPHiP0+1GDKkLn76qQPMzU0kTGYYOBH8fUWEAmuqActK89EpRERUqBkbG8HXtyYAwMLCBGvXemPFii4smP4fR5reFx+dQkRERcjYsY3x6FEiBg2qiw8/dJA6jkHhSNP7+vejU6xcgZJV+egUIiIqFKKjX2L16stabTKZDPPmebFgygZHmvSFj04hIqJCZOfOCPj5bUdCQhrKlLGFp2d5qSMZPI40ERERFSNKpQpff30QXbsG4+XLNAgBTJt2FEIIqaMZPI40ERERFRN//52I3r3DcPr0Q01b9+7VsGpVF8hkMgmTFQ4smoiIiIqB33+/i759tyE+PgUAYGJihB9/bIfRoxuyYMolFk1ERERFmEqlxjffHMfMmSfw5gpcmTK22LKlBxo1Ki1tuEKGRRMREVERNmbMfixe/Idmu1Onyli71hslS5pLmKpw4kRwIiKiImz06IawslJALpfh++89sWNHbxZMecSRJiIioiKsShV7rF//KUqWNEfLlmWljlOocaQpL/joFCIiMkDPnqVg7Nj9SE1VarV7e1dlwaQHHGnKCz46hYiIDMy5c3+jZ89QPHyYiORkJZYv7yx1pCKHI015wUenEBGRgRBCYOHCc2jRYg0ePkwEAGzffguxsUkSJyt6ONL0PvjoFCIiklBCQhoGDdqJbdtuatqaNy+D4ODucHKykjBZ0cSiKbciQl9flst4xXlMREQkucuXY9CjRyju3XuhaRs/vhm+/bY1jI15ISk/sGjKLc5jIiIiAyCEwPLlFzFmzH6kp6sAAHZ2Zli37lN06lRZ4nRFG4um3Pr3PCZL59cFE+cxERFRAQsLu4HPPtuj2f7oIxds2eIDd/cS0oUqJlg06YrzmIiISELdulVD69blcORIFL74oiHmzm0HhUIudaxigUUTERFRISKXG2HTpm44ffohunWrJnWcYoUzxYiIiAxUSooSw4bt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\n" }, "metadata": {} } ] } ] }