diff --git a/CHANGELOG.md b/CHANGELOG.md index 9db2d329c..3a45d79e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Make JSON-able a configuration depending on the databackend - Restore some training test cases - Simple querying shell +- Fix existing templates #### New Features & Functionality diff --git a/superduper/components/model.py b/superduper/components/model.py index dfff24141..819929ca4 100644 --- a/superduper/components/model.py +++ b/superduper/components/model.py @@ -1305,6 +1305,11 @@ def predict(self, *args, **kwargs) -> t.Any: logging.info(f'Predicting with model {self.model}') return self.models[self.model].predict(*args, **kwargs) + @override + def fit(self, *args, **kwargs) -> t.Any: + logging.info(f'Fitting with model {self.model}') + return self.models[self.model].fit(*args, **kwargs) + @override def predict_batches(self, dataset) -> t.List: logging.info(f'Predicting with model {self.model}') diff --git a/templates/multimodal_image_search/build.ipynb b/templates/multimodal_image_search/build.ipynb index d41c41f19..630d6e822 100644 --- a/templates/multimodal_image_search/build.ipynb +++ b/templates/multimodal_image_search/build.ipynb @@ -37,7 +37,7 @@ "source": [ "from superduper import superduper\n", "\n", - "db = superduper('mongomock:///test_db')" + "db = superduper('mongomock:///test_db')\n" ] }, { @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "0828031a", "metadata": {}, "outputs": [], @@ -66,12 +66,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "44a702b1-faf9-4edb-8a55-efc4add84a83", "metadata": {}, "outputs": [], "source": [ - "data = [{'img': d} for d in data[:100]]" + "data = [{'img': d} for d in data[:10]]" ] }, { @@ -92,7 +92,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "5375ff04-8b6d-40b0-a8b2-6aa124636871", "metadata": {}, "outputs": [], @@ -104,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "489a19c2-c673-4bf9-9bea-f4bb279fc462", "metadata": {}, "outputs": [], @@ -124,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "8751ede0-4b9f-4f92-b4ec-f6b0e0740c30", "metadata": {}, "outputs": [], @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "12e75fab-8504-4d17-a7d9-f98667a5d6aa", "metadata": {}, "outputs": [], @@ -187,7 +187,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "66ee3ff4-880e-477b-bbdf-5b8d89c56de2", "metadata": {}, "outputs": [], @@ -197,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "4cede653", "metadata": {}, "outputs": [], @@ -277,7 +277,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "ce565823-4655-488c-8684-2240107fa30d", "metadata": {}, "outputs": [], @@ -288,16 +288,26 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "d8059626-dff8-4fe0-b872-97b8eb8b1b01", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'img': }" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# \n", "from IPython.display import display\n", "search_image = data[0]\n", "display(search_image)\n", - "item = Document({indexing_key: search_image})" + "item = Document(search_image)" ] }, { @@ -364,6 +374,14 @@ "\n", "template.export('.')" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "759db69c-c3e6-47e5-af6d-e089c1e8ad4e", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/templates/multimodal_image_search/component.json b/templates/multimodal_image_search/component.json index 3b1f9f248..cb8a7c0a3 100644 --- a/templates/multimodal_image_search/component.json +++ b/templates/multimodal_image_search/component.json @@ -3,122 +3,195 @@ "_builds": { "image-vector-search": { "_path": "superduper.components.template.Template", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, "template": { "_base": "?image-vector-search", "_builds": { - "vector[1024]": { - "_path": "superduper.components.vector_index.vector", + "datatype:sqlvector[1024]": { + "_path": "superduper.components.vector_index.sqlvector", "shape": [ 1024 ] }, - "dill": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", "method": "dill", "encodable": "artifact" }, - "75347bbb255301912d39cedb0694f549f8819abb": { + "a59f7ef66658ac2aebb08cfb42392889a8d4dfbc": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:75347bbb255301912d39cedb0694f549f8819abb" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:a59f7ef66658ac2aebb08cfb42392889a8d4dfbc" }, "e1635b227a7f3787dc79524d812915c342701260": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", + "datatype": "?datatype:dill", + "uri": null, "blob": "&:blob:e1635b227a7f3787dc79524d812915c342701260" }, - "6e99888088997261fb7a5634c403fc06c5fb6f9b": { + "d74a9ebc7af72ea5640dc6cb7928eb708189ccac": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:6e99888088997261fb7a5634c403fc06c5fb6f9b" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:d74a9ebc7af72ea5640dc6cb7928eb708189ccac" }, - "clip_image": { + "model:clip_image": { "_path": "superduper_torch.model.TorchModel", + "preferred_devices": [ + "cuda", + "mps", + "cpu" + ], + "device": null, + "upstream": null, + "plugins": null, + "cache": true, + "status": "Status.ready", "signature": "singleton", - "datatype": "?vector[1024]", - "object": "?75347bbb255301912d39cedb0694f549f8819abb", + "datatype": "?datatype:sqlvector[1024]", + "output_schema": null, + "model_update_kwargs": {}, + "predict_kwargs": {}, + "compute_kwargs": {}, + "validation": null, + "metric_values": {}, + "num_workers": 0, + "serve": false, + "trainer": null, + "object": "?a59f7ef66658ac2aebb08cfb42392889a8d4dfbc", "preprocess": "?e1635b227a7f3787dc79524d812915c342701260", - "postprocess": "?6e99888088997261fb7a5634c403fc06c5fb6f9b" + "preprocess_signature": "singleton", + "postprocess": "?d74a9ebc7af72ea5640dc6cb7928eb708189ccac", + "postprocess_signature": "singleton", + "forward_method": "__call__", + "forward_signature": "singleton", + "train_forward_method": "__call__", + "train_forward_signature": "singleton", + "train_preprocess": null, + "train_preprocess_signature": "singleton", + "collate_fn": null, + "optimizer_state": null, + "loader_kwargs": {} }, "-select": { "_path": "superduper_mongodb.query.parse_query", "documents": [], "query": ".select()" }, - "indexing-listener": { + "listener:indexing-listener": { "_path": "superduper.components.listener.Listener", + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "cdc_table": "", "key": "img", - "model": "?clip_image", + "model": "?model:clip_image", + "predict_kwargs": {}, "select": "?-select", - "predict_id": "indexing-listener" + "flatten": false }, - "38c0a0ed4807b9f73c6acbee624fb6d1d0ef91f3": { + "e5551585470d016f388b67c7903b13f8a49e149b": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:38c0a0ed4807b9f73c6acbee624fb6d1d0ef91f3" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:e5551585470d016f388b67c7903b13f8a49e149b" }, - "68e3d68b08e34272c74c87c050a934ecaa20fbf7": { + "5af4e17913a59c52b9dcc60b35cfe88a64052f3d": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:68e3d68b08e34272c74c87c050a934ecaa20fbf7" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:5af4e17913a59c52b9dcc60b35cfe88a64052f3d" }, - "89d6b1b6e00ddbac730818039f895c3533395a19": { + "d892f128056598f912763336ce4047f36090c11f": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:89d6b1b6e00ddbac730818039f895c3533395a19" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:d892f128056598f912763336ce4047f36090c11f" }, - "clip_text": { + "model:clip_text": { "_path": "superduper_torch.model.TorchModel", + "preferred_devices": [ + "cuda", + "mps", + "cpu" + ], + "device": null, + "upstream": null, + "plugins": null, + "cache": true, + "status": "Status.ready", "signature": "singleton", - "datatype": "?vector[1024]", - "object": "?38c0a0ed4807b9f73c6acbee624fb6d1d0ef91f3", - "preprocess": "?68e3d68b08e34272c74c87c050a934ecaa20fbf7", - "postprocess": "?89d6b1b6e00ddbac730818039f895c3533395a19", - "forward_method": "encode_text" + "datatype": "?datatype:sqlvector[1024]", + "output_schema": null, + "model_update_kwargs": {}, + "predict_kwargs": {}, + "compute_kwargs": {}, + "validation": null, + "metric_values": {}, + "num_workers": 0, + "serve": false, + "trainer": null, + "object": "?e5551585470d016f388b67c7903b13f8a49e149b", + "preprocess": "?5af4e17913a59c52b9dcc60b35cfe88a64052f3d", + "preprocess_signature": "singleton", + "postprocess": "?d892f128056598f912763336ce4047f36090c11f", + "postprocess_signature": "singleton", + "forward_method": "encode_text", + "forward_signature": "singleton", + "train_forward_method": "__call__", + "train_forward_signature": "singleton", + "train_preprocess": null, + "train_preprocess_signature": "singleton", + "collate_fn": null, + "optimizer_state": null, + "loader_kwargs": {} }, - "compatible-listener": { + "listener:compatible-listener": { "_path": "superduper.components.listener.Listener", + "upstream": null, + "plugins": null, + "cache": true, + "status": "Status.ready", + "cdc_table": "", "key": "text", - "model": "?clip_text", + "model": "?model:clip_text", + "predict_kwargs": {}, "select": null, - "predict_id": "compatible-listener" + "flatten": false }, - "my-vector-index": { + "vector_index:my-vector-index": { "_path": "superduper.components.vector_index.VectorIndex", - "indexing_listener": "?indexing-listener", - "compatible_listener": "?compatible-listener" + "upstream": null, + "plugins": null, + "cache": true, + "status": null, + "cdc_table": "_outputs__indexing-listener__?(listener:indexing-listener.uuid)", + "indexing_listener": "?listener:indexing-listener", + "compatible_listener": "?listener:compatible-listener", + "measure": "cosine", + "metric_values": {} }, "image-vector-search": { "_path": "superduper.components.application.Application", + "upstream": null, + "plugins": null, + "cache": true, + "status": "Status.ready", "components": [ - "?my-vector-index" + "?vector_index:my-vector-index" ], "namespace": [ { "type_id": "vector_index", "identifier": "my-vector-index" - }, - { - "type_id": "listener", - "identifier": "indexing-listener" - }, - { - "type_id": "listener", - "identifier": "compatible-listener" - }, - { - "type_id": "model", - "identifier": "clip_image" - }, - { - "type_id": "datatype", - "identifier": "vector[1024]" - }, - { - "type_id": "model", - "identifier": "clip_text" } ], + "link": null, "_literals": [ "template" ] @@ -128,6 +201,11 @@ "template_variables": [ "table" ], + "types": {}, + "blobs": null, + "files": null, + "data": null, + "requirements": null, "_literals": [ "template" ] diff --git a/templates/multimodal_video_search/build.ipynb b/templates/multimodal_video_search/build.ipynb index 8657d3137..3ef76c6a3 100644 --- a/templates/multimodal_video_search/build.ipynb +++ b/templates/multimodal_video_search/build.ipynb @@ -19,14 +19,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "cb029a5e-fedf-4f07-8a31-d220cfbfbb3d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:11:43.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.misc.plugins\u001b[0m:\u001b[36m13 \u001b[0m | \u001b[1mLoading plugin: ibis\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:43.15\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper_ibis.data_backend\u001b[0m:\u001b[36m107 \u001b[0m | \u001b[33m\u001b[1mUnable to connect to the database with self.conn.con: and self.name: sqlite:. Error: 'sqlite3.Connection' object has no attribute 'dialect'.\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:43.15\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper_ibis.data_backend\u001b[0m:\u001b[36m111 \u001b[0m | \u001b[33m\u001b[1mFalling back to using the uri: sqlite://.\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:43.16\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m32 \u001b[0m | \u001b[1mCreating artifact store directory\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:43.16\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m73 \u001b[0m | \u001b[1mBuilding Data Layer\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:43.16\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.build\u001b[0m:\u001b[36m177 \u001b[0m | \u001b[1mConfiguration: \n", + " +---------------+-----------+\n", + "| Configuration | Value |\n", + "+---------------+-----------+\n", + "| Data Backend | sqlite:// |\n", + "+---------------+-----------+\u001b[0m\n" + ] + } + ], "source": [ "from superduper import superduper\n", " \n", - "db = superduper('mongomock://test_db')" + "db = superduper('mongomock://test_db')\n", + "#db = superduper('sqlite://')" ] }, { @@ -40,12 +59,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "1b6f7ccb", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:11:48.05\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.misc.annotations\u001b[0m:\u001b[36m336 \u001b[0m | \u001b[33m\u001b[1m`superduper.ext.pillow` is deprecated and will be removed in a future release. Please insteall `superduper_pillow` and use `from superduper_pillow import *` instead.\u001b[0m\n" + ] + } + ], "source": [ - "!curl -O https://superduperdb-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\n", + "#!curl -O https://superduperdb-public-demo.s3.amazonaws.com/videos.zip && unzip videos.zip\n", "import os\n", "from superduper.ext.pillow import pil_image\n", "\n", @@ -78,7 +105,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "e844c762-3391-401d-9047-ed8617a9c946", "metadata": {}, "outputs": [], @@ -103,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "9c2f0083", "metadata": {}, "outputs": [], @@ -117,20 +144,87 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "d7967a6b-bb77-48ae-a40f-829547eb08c3", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m476 \u001b[0m | \u001b[1mHere are the CREATION EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[0]: datatype:video_on_file:b006820e46954e0e8ecab5ff0764ae98: create ~ [1]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[1]: schema:schema:676e0ab9baf540c3a02c429698378b3a: create ~ [2]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m484 \u001b[0m | \u001b[1m[2]: table:docs:b88f7e5b1c4540c6af4458eca98a4156: create\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m486 \u001b[0m | \u001b[1mJOBS EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[0]: datatype:video_on_file:b006820e46954e0e8ecab5ff0764ae98: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[1]: schema:schema:676e0ab9baf540c3a02c429698378b3a: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:54.80\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[2]: table:docs:b88f7e5b1c4540c6af4458eca98a4156: set_status\u001b[0m\n", + "\u001b[1mPlease approve this deployment plan.\u001b[0m [Y/n]:" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + " Y\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:11:57.25\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent b006820e46954e0e8ecab5ff0764ae98 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.25\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding datatype:video_on_file:b006820e46954e0e8ecab5ff0764ae98 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.25\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding datatype: video_on_file to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.26\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 676e0ab9baf540c3a02c429698378b3a not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.26\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding schema:schema:676e0ab9baf540c3a02c429698378b3a to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.26\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding schema: schema to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.26\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent b88f7e5b1c4540c6af4458eca98a4156 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:11:57.26\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding table:docs:b88f7e5b1c4540c6af4458eca98a4156 to cache\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "Table(identifier='docs', uuid='b88f7e5b1c4540c6af4458eca98a4156', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='schema', uuid='676e0ab9baf540c3a02c429698378b3a', upstream=None, plugins=None, cache=True, status=, fields={'x': DataType(identifier='video_on_file', uuid='b006820e46954e0e8ecab5ff0764ae98', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=None, directory=None, encodable='file', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='55d75b1c89554675a4a2be6253c485a9')}), primary_id='id')" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "db.apply(table)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "e2e5422a-a05e-4692-8be0-23b2d8fd504d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:01.85\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m114 \u001b[0m | \u001b[1mCopying file videos/4.mp4 to .superduper/artifacts/ccdc38e8e3d7942bd7bc64bb13d4478e273bd6d7/4.mp4\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:01.89\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m286 \u001b[0m | \u001b[1mInserted 1 documents into docs\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:01.89\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m341 \u001b[0m | \u001b[1mSkipping cdc for inserted documents in {table} because no component to consume the table.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "['614cb65c-5349-40f0-b5fa-64105dee746a']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "db['docs'].insert(datas).execute()" ] @@ -159,7 +253,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "f093a6d0-9d2f-4ecf-b1bd-0027302c62de", "metadata": {}, "outputs": [], @@ -172,10 +266,7 @@ "from superduper import model, Schema\n", "\n", "\n", - "@model(\n", - " flatten=True,\n", - " model_update_kwargs={},\n", - ")\n", + "@model\n", "def chunker(video_file):\n", " # Set the sampling frequency for frames\n", " sample_freq = 10\n", @@ -225,7 +316,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "93d21872-d4dc-40dc-abab-fb07ba102ea3", "metadata": {}, "outputs": [], @@ -236,18 +327,120 @@ " model=chunker,\n", " select=db['docs'].select(),\n", " key='x',\n", - " uuid='chunker',\n", " identifier='chunker',\n", + " flatten=True,\n", " upstream=[table]\n", ")" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "0616e1e3-a5e0-4891-94b2-55ec0074cffa", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:06.58\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file ccdc38e8e3d7942bd7bc64bb13d4478e273bd6d7 from .superduper/artifacts/\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:06.58\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file ccdc38e8e3d7942bd7bc64bb13d4478e273bd6d7 from .superduper/artifacts/\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "4491it [00:01, 3533.17it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:09.13\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.misc.annotations\u001b[0m:\u001b[36m336 \u001b[0m | \u001b[33m\u001b[1m`superduper.ext.torch` is deprecated and will be removed in a future release. Please insteall `superduper_torch` and use `from superduper_torch import *` instead.\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf ID already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m476 \u001b[0m | \u001b[1mHere are the CREATION EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[0]: model:chunker:e718f93a8c244106b7138e49ee0ec23b: create ~ [3]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[1]: schema:_schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:239d6abdf7674185bb39b12a697f4553: create ~ [2]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[2]: table:_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:7c9f24c8ff6943ad8ecf831b01e7a31e: create ~ [3]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m484 \u001b[0m | \u001b[1m[3]: listener:chunker:36befbcbede9423cbd19b4dccbed94dc: create\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m486 \u001b[0m | \u001b[1mJOBS EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[0]: model:chunker:e718f93a8c244106b7138e49ee0ec23b: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[1]: schema:_schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:239d6abdf7674185bb39b12a697f4553: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[2]: table:_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:7c9f24c8ff6943ad8ecf831b01e7a31e: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[3]: listener:chunker:36befbcbede9423cbd19b4dccbed94dc: run ~ [0,2]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:09.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[4]: listener:chunker:36befbcbede9423cbd19b4dccbed94dc: set_status ~ [3]\u001b[0m\n", + "\u001b[1mPlease approve this deployment plan.\u001b[0m [Y/n]:" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + " Y\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:10.10\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent e718f93a8c244106b7138e49ee0ec23b not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding model:chunker:e718f93a8c244106b7138e49ee0ec23b to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 239d6abdf7674185bb39b12a697f4553 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding schema:_schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:239d6abdf7674185bb39b12a697f4553 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.12\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding schema: _schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.12\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 7c9f24c8ff6943ad8ecf831b01e7a31e not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.12\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding table:_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc:7c9f24c8ff6943ad8ecf831b01e7a31e to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.13\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 36befbcbede9423cbd19b4dccbed94dc not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.13\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding listener:chunker:36befbcbede9423cbd19b4dccbed94dc to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.13\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding listener: chunker to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.14\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m526 \u001b[0m | \u001b[1mRequesting prediction in db - [chunker] with predict_id chunker__36befbcbede9423cbd19b4dccbed94dc\n", + "\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "1it [00:00, 6278.90it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:10.16\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file ccdc38e8e3d7942bd7bc64bb13d4478e273bd6d7 from .superduper/artifacts/\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:10.16\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file ccdc38e8e3d7942bd7bc64bb13d4478e273bd6d7 from .superduper/artifacts/\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "4491it [00:01, 3547.77it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:11.43\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m659 \u001b[0m | \u001b[1mAdding 1 model outputs to `db`\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:12.66\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m286 \u001b[0m | \u001b[1mInserted 450 documents into _outputs__chunker__36befbcbede9423cbd19b4dccbed94dc\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "Listener(identifier='chunker', uuid='36befbcbede9423cbd19b4dccbed94dc', upstream=[Table(identifier='docs', uuid='b88f7e5b1c4540c6af4458eca98a4156', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='schema', uuid='676e0ab9baf540c3a02c429698378b3a', upstream=None, plugins=None, cache=True, status=, fields={'x': DataType(identifier='video_on_file', uuid='b006820e46954e0e8ecab5ff0764ae98', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=None, directory=None, encodable='file', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='55d75b1c89554675a4a2be6253c485a9')}), primary_id='id')], plugins=None, cache=True, status=None, cdc_table='docs', key='x', model=ObjectModel(identifier='chunker', uuid='e718f93a8c244106b7138e49ee0ec23b', upstream=None, plugins=None, cache=True, status=, signature='*args,**kwargs', datatype=DataType(identifier='DEFAULT', uuid='4c215857386747409046c6a28d2dfb1f', upstream=None, plugins=None, cache=True, status=None, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=, method=None), predict_kwargs={}, select=docs\n", + "docs.select(query[0]), output_table=Table(identifier='_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc', uuid='7c9f24c8ff6943ad8ecf831b01e7a31e', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc', uuid='239d6abdf7674185bb39b12a697f4553', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='841d9d1179f5476e90c16acfd99c08c6'), 'id': FieldType(identifier='ID', uuid='3906025d1fd34d17a5e5709d44ccc8d0'), '_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc': DataType(identifier='DEFAULT', uuid='4c215857386747409046c6a28d2dfb1f', upstream=None, plugins=None, cache=True, status=None, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='6a9628c281d144168962db2eccc624c9')}), primary_id='id'), flatten=True)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "db.apply(upstream_listener)" ] @@ -270,7 +463,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "28848ff1-45ab-4926-8676-777edf237347", "metadata": {}, "outputs": [], @@ -282,7 +475,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "6acf66c5-7369-4aa8-a8a0-5842bd17b469", "metadata": {}, "outputs": [], @@ -302,7 +495,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "f33513d3-9f86-4108-8f8b-4a6251bdd9fd", "metadata": {}, "outputs": [], @@ -354,6 +547,14 @@ { "cell_type": "code", "execution_count": null, + "id": "821f9279-ebc8-41b4-9267-e03bb219272b", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 16, "id": "4cede653", "metadata": {}, "outputs": [], @@ -380,17 +581,590 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "d8fcd960-2246-40bf-ac9f-3efda1a61dc7", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:35.29\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf ID already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:35.76\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:35.76\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:36.56\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:36.56\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:36.97\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:36.97\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:37.97\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:37.97\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m476 \u001b[0m | \u001b[1mHere are the CREATION EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[0]: model:clip_image:2a5bd86a530b42359dd6cf1c361237cf: create ~ [3]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[1]: schema:_schema/_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:d724ecb4e48d49cfbd76fe50a423feb4: create ~ [2]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[2]: table:_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:55efba5beea945babe83e7690a415a1d: create ~ [3]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[3]: listener:clip_image-listener:fa65aac5a64548ffb93cddf596338d76: create ~ [6]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[4]: model:clip_text:0128d4846e4e45d0b8d2f4a6fda6914e: create ~ [5]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.81\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m482 \u001b[0m | \u001b[1m[5]: listener:compatible-listener:02bd1d7736774c54850dbc52a4ebaca0: create ~ [6]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m484 \u001b[0m | \u001b[1m[6]: vector_index:my-vector-index:d8875bc98cb5426cbf79060afcfd7bed: create\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m486 \u001b[0m | \u001b[1mJOBS EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[0]: model:clip_image:2a5bd86a530b42359dd6cf1c361237cf: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[1]: schema:_schema/_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:d724ecb4e48d49cfbd76fe50a423feb4: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[2]: table:_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:55efba5beea945babe83e7690a415a1d: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[3]: listener:clip_image-listener:fa65aac5a64548ffb93cddf596338d76: run ~ [0,2]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[4]: listener:clip_image-listener:fa65aac5a64548ffb93cddf596338d76: set_status ~ [3]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[5]: model:clip_text:0128d4846e4e45d0b8d2f4a6fda6914e: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[6]: listener:compatible-listener:02bd1d7736774c54850dbc52a4ebaca0: set_status\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[7]: vector_index:my-vector-index:d8875bc98cb5426cbf79060afcfd7bed: copy_vectors ~ [3,4,6]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:38.82\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m494 \u001b[0m | \u001b[1m[8]: vector_index:my-vector-index:d8875bc98cb5426cbf79060afcfd7bed: set_status ~ [7]\u001b[0m\n", + "\u001b[1mPlease approve this deployment plan.\u001b[0m [Y/n]:" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + " Y\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:41.53\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 2a5bd86a530b42359dd6cf1c361237cf not found in cache, loading from db\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/kartiksharma/Work/superduperdb/code/superduper/.venv/lib/python3.11/site-packages/torch/storage.py:414: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", + " return torch.load(io.BytesIO(b))\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:12:42.03\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding model:clip_image:2a5bd86a530b42359dd6cf1c361237cf to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.03\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent d724ecb4e48d49cfbd76fe50a423feb4 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.04\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding schema:_schema/_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:d724ecb4e48d49cfbd76fe50a423feb4 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.04\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding schema: _schema/_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.04\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 55efba5beea945babe83e7690a415a1d not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.04\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding table:_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76:55efba5beea945babe83e7690a415a1d to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.04\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent fa65aac5a64548ffb93cddf596338d76 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.05\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding listener:clip_image-listener:fa65aac5a64548ffb93cddf596338d76 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.05\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding listener: clip_image-listener to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:42.05\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 0128d4846e4e45d0b8d2f4a6fda6914e not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.10\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding model:clip_text:0128d4846e4e45d0b8d2f4a6fda6914e to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 02bd1d7736774c54850dbc52a4ebaca0 not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding listener:compatible-listener:02bd1d7736774c54850dbc52a4ebaca0 to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding listener: compatible-listener to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent d8875bc98cb5426cbf79060afcfd7bed not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding vector_index:my-vector-index:d8875bc98cb5426cbf79060afcfd7bed to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper_sqlalchemy.metadata\u001b[0m:\u001b[36m305 \u001b[0m | \u001b[33m\u001b[1mSkipping d8875bc98cb5426cbf79060afcfd7bed fa65aac5a64548ffb93cddf596338d76 since they already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.11\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding vector_index: my-vector-index to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:12:43.12\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m526 \u001b[0m | \u001b[1mRequesting prediction in db - [clip_image] with predict_id clip_image-listener__fa65aac5a64548ffb93cddf596338d76\n", + "\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "450it [00:00, 15277.45it/s]\n", + "100%|██████████████████████████████████████████████████| 450/450 [00:27<00:00, 16.34it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:13:10.95\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m659 \u001b[0m | \u001b[1mAdding 450 model outputs to `db`\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:13:12.09\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m286 \u001b[0m | \u001b[1mInserted 450 documents into _outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "VectorIndex(identifier='my-vector-index', uuid='d8875bc98cb5426cbf79060afcfd7bed', upstream=[Listener(identifier='chunker', uuid='36befbcbede9423cbd19b4dccbed94dc', upstream=[Table(identifier='docs', uuid='b88f7e5b1c4540c6af4458eca98a4156', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='schema', uuid='676e0ab9baf540c3a02c429698378b3a', upstream=None, plugins=None, cache=True, status=, fields={'x': DataType(identifier='video_on_file', uuid='b006820e46954e0e8ecab5ff0764ae98', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=None, directory=None, encodable='file', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='55d75b1c89554675a4a2be6253c485a9')}), primary_id='id')], plugins=None, cache=True, status=None, cdc_table='docs', key='x', model=ObjectModel(identifier='chunker', uuid='e718f93a8c244106b7138e49ee0ec23b', upstream=None, plugins=None, cache=True, status=, signature='*args,**kwargs', datatype=DataType(identifier='DEFAULT', uuid='4c215857386747409046c6a28d2dfb1f', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=, method=None), predict_kwargs={}, select=docs\n", + "docs.select(query[0]), output_table=Table(identifier='_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc', uuid='7c9f24c8ff6943ad8ecf831b01e7a31e', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc', uuid='239d6abdf7674185bb39b12a697f4553', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='841d9d1179f5476e90c16acfd99c08c6'), 'id': FieldType(identifier='ID', uuid='3906025d1fd34d17a5e5709d44ccc8d0'), '_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc': DataType(identifier='DEFAULT', uuid='4c215857386747409046c6a28d2dfb1f', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='6a9628c281d144168962db2eccc624c9')}), primary_id='id'), flatten=True)], plugins=None, cache=True, status=None, cdc_table='_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76', indexing_listener=Listener(identifier='clip_image-listener', uuid='fa65aac5a64548ffb93cddf596338d76', upstream=['&:component:listener:chunker:36befbcbede9423cbd19b4dccbed94dc'], plugins=None, cache=True, status=None, cdc_table='_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc', key='_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc.image', model=TorchModel(preferred_devices=('cuda', 'mps', 'cpu'), device=None, identifier='clip_image', uuid='2a5bd86a530b42359dd6cf1c361237cf', upstream=None, plugins=None, cache=True, status=, signature='singleton', datatype=DataType(identifier='sqlvector[1024]', uuid='1325484bc3374fd49d3af5d14202eeb5', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=(1024,), directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=VisionTransformer(\n", + " (conv1): Conv2d(3, 768, kernel_size=(32, 32), stride=(32, 32), bias=False)\n", + " (ln_pre): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (ln_post): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + "), preprocess=Compose(\n", + " Resize(size=224, interpolation=bicubic, max_size=None, antialias=True)\n", + " CenterCrop(size=(224, 224))\n", + " \n", + " ToTensor()\n", + " Normalize(mean=(0.48145466, 0.4578275, 0.40821073), std=(0.26862954, 0.26130258, 0.27577711))\n", + "), preprocess_signature='singleton', postprocess= at 0x2a195a660>, postprocess_signature='singleton', forward_method='__call__', forward_signature='singleton', train_forward_method='__call__', train_forward_signature='singleton', train_preprocess=None, train_preprocess_signature='singleton', collate_fn=None, optimizer_state=None, loader_kwargs={}), predict_kwargs={}, select=_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc\n", + "_outputs__chunker__36befbcbede9423cbd19b4dccbed94dc.select(query[0]), output_table=Table(identifier='_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76', uuid='55efba5beea945babe83e7690a415a1d', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76', uuid='d724ecb4e48d49cfbd76fe50a423feb4', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='000bcd047c5c4df0aa85fdc790e8caab'), '_outputs__clip_image-listener__fa65aac5a64548ffb93cddf596338d76': DataType(identifier='sqlvector[1024]', uuid='1325484bc3374fd49d3af5d14202eeb5', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=(1024,), directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='eab2230f1036478e872735a226f85012')}), primary_id='id'), flatten=False), compatible_listener=Listener(identifier='compatible-listener', uuid='02bd1d7736774c54850dbc52a4ebaca0', upstream=None, plugins=None, cache=True, status=, cdc_table='', key='text', model=TorchModel(preferred_devices=('cuda', 'mps', 'cpu'), device=None, identifier='clip_text', uuid='0128d4846e4e45d0b8d2f4a6fda6914e', upstream=None, plugins=None, cache=True, status=, signature='singleton', datatype=DataType(identifier='sqlvector[1024]', uuid='1325484bc3374fd49d3af5d14202eeb5', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=(1024,), directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=CLIP(\n", + " (visual): VisionTransformer(\n", + " (conv1): Conv2d(3, 768, kernel_size=(32, 32), stride=(32, 32), bias=False)\n", + " (ln_pre): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (ln_post): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (token_embedding): Embedding(49408, 512)\n", + " (ln_final): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + "), preprocess= at 0x2a17c5da0>, preprocess_signature='singleton', postprocess= at 0x2a1959b20>, postprocess_signature='singleton', forward_method='encode_text', forward_signature='singleton', train_forward_method='__call__', train_forward_signature='singleton', train_preprocess=None, train_preprocess_signature='singleton', collate_fn=None, optimizer_state=None, loader_kwargs={}), predict_kwargs={}, select=None, output_table=None, flatten=False), measure=, metric_values={})" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "db.apply(vector_index)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "3ff1904a-c71d-4294-b7d6-e89d9f0f12b1", "metadata": {}, "outputs": [], @@ -408,10 +1182,516 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "c1cf1a8b-53ce-4201-9741-e2525f4da116", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:08:30.67\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf ID already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:30.68\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf ID already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:31.51\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:31.51\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.75\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.75\u001b[0m| \u001b[33m\u001b[1mWARNING \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.document\u001b[0m:\u001b[36m471 \u001b[0m | \u001b[33m\u001b[1mLeaf datatype:dill already exists\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.77\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m476 \u001b[0m | \u001b[1mHere are the CREATION EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.77\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m484 \u001b[0m | \u001b[1m[0]: application:video-search:190d67c1571448bb836f2e21a1298b6d: create\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.77\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m486 \u001b[0m | \u001b[1mJOBS EVENTS:\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:32.77\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m499 \u001b[0m | \u001b[1m[0]: application:video-search:190d67c1571448bb836f2e21a1298b6d: set_status\u001b[0m\n", + "\u001b[1mPlease approve this deployment plan.\u001b[0m [Y/n]:" + ] + }, + { + "name": "stdin", + "output_type": "stream", + "text": [ + " Y\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:08:40.65\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m621 \u001b[0m | \u001b[1mComponent 190d67c1571448bb836f2e21a1298b6d not found in cache, loading from db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:40.65\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m646 \u001b[0m | \u001b[1mAdding application:video-search:190d67c1571448bb836f2e21a1298b6d to cache\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:08:40.65\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.component\u001b[0m:\u001b[36m560 \u001b[0m | \u001b[1mAdding application: video-search to cache\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "Application(identifier='video-search', uuid='190d67c1571448bb836f2e21a1298b6d', upstream=None, plugins=None, cache=True, status=, components=[Listener(identifier='chunker', uuid='0c9b08c6ac6f4df18483a4424bccd4a3', upstream=[Table(identifier='docs', uuid='e3c06b013d0e48e182006d4b75155820', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='schema', uuid='28023654b88542b6913e96d24de3d07b', upstream=None, plugins=None, cache=True, status=, fields={'x': DataType(identifier='video_on_file', uuid='ae955820799b45f4a2680900a4694a03', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=None, directory=None, encodable='file', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='e772a53786b2475baf7fb17f8979b50f')}), primary_id='id')], plugins=None, cache=True, status=None, cdc_table='docs', key='x', model=ObjectModel(identifier='chunker', uuid='974b8c0e7a244dbb98c9bcc822e1a034', upstream=None, plugins=None, cache=True, status=, signature='*args,**kwargs', datatype=DataType(identifier='DEFAULT', uuid='c1059ead89dc4d588e04bd05ec80ed09', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=, method=None), predict_kwargs={}, select=docs.select(), output_table=Table(identifier='_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3', uuid='4153444469fc4d9791a3c511c9cb817c', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3', uuid='5c8a050fe9fb4dcf952cbb3015a4b6b0', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='ec4d53d18dad4830aa5495b8dccac44a'), 'id': FieldType(identifier='ID', uuid='588c33c026c441ed88246ff5dffaf518'), '_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3': DataType(identifier='DEFAULT', uuid='c1059ead89dc4d588e04bd05ec80ed09', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='4de1519b641c4ec59d539ee9105737d8')}), primary_id='id'), flatten=True), VectorIndex(identifier='my-vector-index', uuid='6c9ef962cb7d4f55938aff1ec2d9752e', upstream=[Listener(identifier='chunker', uuid='0c9b08c6ac6f4df18483a4424bccd4a3', upstream=[Table(identifier='docs', uuid='e3c06b013d0e48e182006d4b75155820', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='schema', uuid='28023654b88542b6913e96d24de3d07b', upstream=None, plugins=None, cache=True, status=, fields={'x': DataType(identifier='video_on_file', uuid='ae955820799b45f4a2680900a4694a03', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=None, directory=None, encodable='file', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='e772a53786b2475baf7fb17f8979b50f')}), primary_id='id')], plugins=None, cache=True, status=None, cdc_table='docs', key='x', model=ObjectModel(identifier='chunker', uuid='974b8c0e7a244dbb98c9bcc822e1a034', upstream=None, plugins=None, cache=True, status=, signature='*args,**kwargs', datatype=DataType(identifier='DEFAULT', uuid='c1059ead89dc4d588e04bd05ec80ed09', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=, method=None), predict_kwargs={}, select=docs.select(), output_table=Table(identifier='_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3', uuid='4153444469fc4d9791a3c511c9cb817c', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3', uuid='5c8a050fe9fb4dcf952cbb3015a4b6b0', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='ec4d53d18dad4830aa5495b8dccac44a'), 'id': FieldType(identifier='ID', uuid='588c33c026c441ed88246ff5dffaf518'), '_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3': DataType(identifier='DEFAULT', uuid='c1059ead89dc4d588e04bd05ec80ed09', upstream=None, plugins=None, cache=True, status=, encoder=, decoder=, info=None, shape=None, directory=None, encodable='encodable', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='4de1519b641c4ec59d539ee9105737d8')}), primary_id='id'), flatten=True)], plugins=None, cache=True, status=None, cdc_table='_outputs__clip_image-listener__078737f6cc3345ec9db2e38d2cbbb20e', indexing_listener=Listener(identifier='clip_image-listener', uuid='078737f6cc3345ec9db2e38d2cbbb20e', upstream=['&:component:listener:chunker:0c9b08c6ac6f4df18483a4424bccd4a3'], plugins=None, cache=True, status=None, cdc_table='_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3', key='_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3.image', model=TorchModel(preferred_devices=('cuda', 'mps', 'cpu'), device=None, identifier='clip_image', uuid='34cdba46e65f41b586b9fbb1a5f56f99', upstream=None, plugins=None, cache=True, status=, signature='singleton', datatype=DataType(identifier='vector[1024]', uuid='4291517a07fd435a99644b1337940fb0', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=(1024,), directory=None, encodable='native', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=VisionTransformer(\n", + " (conv1): Conv2d(3, 768, kernel_size=(32, 32), stride=(32, 32), bias=False)\n", + " (ln_pre): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (ln_post): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + "), preprocess=Compose(\n", + " Resize(size=224, interpolation=bicubic, max_size=None, antialias=True)\n", + " CenterCrop(size=(224, 224))\n", + " \n", + " ToTensor()\n", + " Normalize(mean=(0.48145466, 0.4578275, 0.40821073), std=(0.26862954, 0.26130258, 0.27577711))\n", + "), preprocess_signature='singleton', postprocess= at 0x1684fb1a0>, postprocess_signature='singleton', forward_method='__call__', forward_signature='singleton', train_forward_method='__call__', train_forward_signature='singleton', train_preprocess=None, train_preprocess_signature='singleton', collate_fn=None, optimizer_state=None, loader_kwargs={}), predict_kwargs={}, select=_outputs__chunker__0c9b08c6ac6f4df18483a4424bccd4a3.select(), output_table=Table(identifier='_outputs__clip_image-listener__078737f6cc3345ec9db2e38d2cbbb20e', uuid='e765f67fc6c64082bf755614fa34a123', upstream=None, plugins=None, cache=True, status=, schema=Schema(identifier='_schema/_outputs__clip_image-listener__078737f6cc3345ec9db2e38d2cbbb20e', uuid='a444a7024c1144a9809f49061542ee91', upstream=None, plugins=None, cache=True, status=, fields={'_source': FieldType(identifier='ID', uuid='c6ff5ef57471400690aaabbbccf1077a'), '_outputs__clip_image-listener__078737f6cc3345ec9db2e38d2cbbb20e': DataType(identifier='vector[1024]', uuid='4291517a07fd435a99644b1337940fb0', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=(1024,), directory=None, encodable='native', bytes_encoding=, intermediate_type='bytes', media_type=None), '_fold': FieldType(identifier='str', uuid='fbf0a3c9bd024e4691d6ddeeda8d6bf0')}), primary_id='id'), flatten=False), compatible_listener=Listener(identifier='compatible-listener', uuid='78b932cb28fc440d8c979b73360ac030', upstream=None, plugins=None, cache=True, status=, cdc_table='', key='text', model=TorchModel(preferred_devices=('cuda', 'mps', 'cpu'), device=None, identifier='clip_text', uuid='d4d4110f5ee540ffada2ba7a05549121', upstream=None, plugins=None, cache=True, status=, signature='singleton', datatype=DataType(identifier='vector[1024]', uuid='4291517a07fd435a99644b1337940fb0', upstream=None, plugins=None, cache=True, status=, encoder=None, decoder=None, info=None, shape=(1024,), directory=None, encodable='native', bytes_encoding=, intermediate_type='bytes', media_type=None), output_schema=None, model_update_kwargs={}, predict_kwargs={}, compute_kwargs={}, validation=None, metric_values={}, num_workers=0, serve=False, trainer=None, object=CLIP(\n", + " (visual): VisionTransformer(\n", + " (conv1): Conv2d(3, 768, kernel_size=(32, 32), stride=(32, 32), bias=False)\n", + " (ln_pre): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=768, out_features=768, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=768, out_features=3072, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=3072, out_features=768, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (ln_post): LayerNorm((768,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (transformer): Transformer(\n", + " (resblocks): Sequential(\n", + " (0): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (1): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (2): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (3): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (4): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (5): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (6): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (7): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (8): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (9): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (10): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " (11): ResidualAttentionBlock(\n", + " (attn): MultiheadAttention(\n", + " (out_proj): NonDynamicallyQuantizableLinear(in_features=512, out_features=512, bias=True)\n", + " )\n", + " (ln_1): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (mlp): Sequential(\n", + " (c_fc): Linear(in_features=512, out_features=2048, bias=True)\n", + " (gelu): QuickGELU()\n", + " (c_proj): Linear(in_features=2048, out_features=512, bias=True)\n", + " )\n", + " (ln_2): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " )\n", + " )\n", + " )\n", + " (token_embedding): Embedding(49408, 512)\n", + " (ln_final): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + "), preprocess= at 0x168485120>, preprocess_signature='singleton', postprocess= at 0x1684fa2a0>, postprocess_signature='singleton', forward_method='encode_text', forward_signature='singleton', train_forward_method='__call__', train_forward_signature='singleton', train_preprocess=None, train_preprocess_signature='singleton', collate_fn=None, optimizer_state=None, loader_kwargs={}), predict_kwargs={}, select=None, output_table=None, flatten=False), measure=, metric_values={})], namespace=[{'type_id': 'listener', 'identifier': 'chunker'}, {'type_id': 'vector_index', 'identifier': 'my-vector-index'}], link=None)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "db.apply(app)" ] @@ -428,7 +1708,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "ce565823-4655-488c-8684-2240107fa30d", "metadata": {}, "outputs": [], @@ -439,7 +1719,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "79fb039e-ab88-4773-94d3-9d1a3f942429", "metadata": {}, "outputs": [], @@ -458,10 +1738,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "a061de0b-2694-4b36-844c-7753a465360f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:13:24.99\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m961 \u001b[0m | \u001b[1mGetting vector-index\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:13:24.99\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m969 \u001b[0m | \u001b[1m{}\u001b[0m\n" + ] + } + ], "source": [ "select = db[upstream_listener.outputs].like(item, vector_index='my-vector-index', n=5).select()\n", "results = list(db.execute(select))" @@ -477,10 +1766,66 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "9e2ecea5-3a58-457c-ac50-ddc742484f2d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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WU8rMetK1gJpZMjANFrdta3KyISpzyR6VVLE0A07iPV9F1aCa2imQYt0OFgHJkf1NdxYXqyg+YRvA3SkdFHZRXz5p2q3OlXQmt3IOOld/ofjGxkWNJH8gqc7WP329SaLgew20mcDODjmqviK+i0/RriR2GSpAFcsnizT7SIyy3qNjoFbkmuA8WeOJNamMUbEQjpz1qHHW4jm9SnWW4d89Say2NEk241CWqhimmk0bqTNABmikoouAtJSZNJmkAtFFFIRXHWnimAGngGpGLS0gBpwp2AKSnYpuKAEozSkUmKdgFzTweKjANPUHFNAOo6UUUAFFFFABRRRQA6im0UAOpQaZS0ASqcciriQF4wwHWqCnmtqzG+1BHaqiBnzx+Xj1qGrF2370j0NVSaGAGm7j60MabSAduzRuNNzSZpAOLE9zSZPrTM0UAOzRTaKACijNGaACkoopjFpaSipJA0ZpKTNAxopwpKcKYC0oFJTqACkxTqSkAm2jApc0mRTAXFLSUUALSUtFACUUtFIBKKKKYBRRRQAUtJRQAorb0ydRZzhuw4rDFdL4f8AD02r2d5MkyoIkyFz1ppgYkmTkt1qEmpZkZJGVyMjg4quTzTYATzSUE0hqQEzRTqbQAUlLSUAFFFFABRRRQAlFLSUALSUtFIAptOptAADmniox1qSgAoHWkpRTAKKKKAFooopCEooopjFooopCEo70UUxjqKbzRQAUU7NJkUAJRRRQAVPBdT2+7ypXTIwdpxUFFAD3dmOWOSe9MzRRQAZpKKKACkpaKACiiigAFLSGikAUUlFMBaSlpKQC0UlFACUUUUDAdadTR1p1AhaKKKBCUUlFMY6ijNLSEJRS0UAJRTqKYxtFFFABTqbRQAtFLSUgG5paKSmAtFA60tIBtFFFMAooooASiiigAooooAKKKKACiiigAopKWgApM0UVIBSGlooGNp4plPFAC0hpaDTQgoooqhhS5pKKQgpaKKQhKKKKYxaKKKQhKKKKYwopaSgBaKKKQhKKKKYxaKKKQhKKKSmMWkoooAKKWkoAWiiikAUUUlABRRRQAlFFFIBKXFJRQMSnCm08UAFFFFAhaKSiquAUtJRQA6koopAFFLSUAFFFFABRRRQAUlLSUwHdqSgUtIBKWkpaACijNJQIKD0oooGNpaKKdwFopKWkAZpM0UUAFFFFABRRRQA2iiigAopKKQxAaeKiqQUCHUlJRQMfSUU2mIfRSUUALRSUUALRRSUAFFFFABRSUtMAooooAKKKKACiiigAopKWgBKKKKYC0UU3vUgOooooAb3ooPWigAp1NooAKKKKQBRRRQAhopTSUAR08UynikMdS0UnemIWiiikAopaQUtUAlFFLQAlJS0UgCiiimAUUtFACUUd6WgBKKKKACiiigAooooAKKKKACm06igAooooAbRRS0gEooooAKSiigAopaKAEpaKKQH/9k=", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/jpeg": "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", + "image/png": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from IPython.display import display\n", "for result in results:\n", @@ -502,7 +1847,39 @@ "execution_count": null, "id": "5ef97f5a-bb41-46ca-a85e-489824741216", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:09:05.73\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m114 \u001b[0m | \u001b[1mCopying file videos/3.mp4 to /tmp/test_db/20943fe19fe8249be4c0099cd728faca8b148367/3.mp4\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:09:05.74\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m286 \u001b[0m | \u001b[1mInserted 1 documents into docs\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:09:05.74\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m351 \u001b[0m | \u001b[1mCreated 1 events for insert on [docs]\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:09:05.74\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.base.datalayer\u001b[0m:\u001b[36m352 \u001b[0m | \u001b[1mPublishing 1 events\u001b[0m\n", + "Streaming with listener:chunker\n", + "Streaming with listener:clip_image-listener\n", + "Streaming with vector_index:my-vector-index\n", + "\u001b[32m2024-Oct-18 22:09:05.75\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m526 \u001b[0m | \u001b[1mRequesting prediction in db - [chunker] with predict_id chunker__0c9b08c6ac6f4df18483a4424bccd4a3\n", + "\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:09:05.76\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file 20943fe19fe8249be4c0099cd728faca8b148367 from /tmp/test_db\u001b[0m\n", + "\u001b[32m2024-Oct-18 22:09:05.76\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.backends.local.artifacts\u001b[0m:\u001b[36m127 \u001b[0m | \u001b[1mLoading file 20943fe19fe8249be4c0099cd728faca8b148367 from /tmp/test_db\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "1074it [00:03, 305.78it/s]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m2024-Oct-18 22:09:09.31\u001b[0m| \u001b[1mINFO \u001b[0m | \u001b[36mkartiks-MacBook-Air.local\u001b[0m| \u001b[36msuperduper.components.model\u001b[0m:\u001b[36m659 \u001b[0m | \u001b[1mAdding 1 model outputs to `db`\u001b[0m\n" + ] + } + ], "source": [ "new_datas = [{'x': data[-1]}]\n", "ids = db['docs'].insert(new_datas).execute()" diff --git a/templates/transfer_learning/build.ipynb b/templates/transfer_learning/build.ipynb index 195e43972..557e8b902 100644 --- a/templates/transfer_learning/build.ipynb +++ b/templates/transfer_learning/build.ipynb @@ -1,469 +1,563 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "c288025e-2326-4e8b-ab52-6fb8a5f9560f", - "metadata": {}, - "source": [ - "# Transfer learning" - ] - }, - { - "cell_type": "markdown", - "id": "32f8484d-2e35-472a-9b24-1a30ec1d144b", - "metadata": {}, - "source": [ - "\n", - "## Connect to superduper" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "cb029a5e-fedf-4f07-8a31-d220cfbfbb3d", - "metadata": {}, - "outputs": [], - "source": [ - "from superduper import superduper\n", - "\n", - "db = superduper('mongomock:///test_db')" - ] - }, - { - "cell_type": "markdown", - "id": "032c2e7b-3f54-4263-b778-0fef60596efb", - "metadata": {}, - "source": [ - "\n", - "## Get useful sample data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "547751e5", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "!curl -O https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json\n", - "import json\n", - "\n", - "with open(\"text_classification.json\", \"r\") as f:\n", - " data = json.load(f)\n", - "num_classes = 2" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1b28f6bf", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "!curl -O https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n", - "import json\n", - "from PIL import Image\n", - "\n", - "with open('images/images.json', 'r') as f:\n", - " data = json.load(f)\n", - " \n", - "data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]\n", - "num_classes = 2" - ] - }, - { - "cell_type": "markdown", - "id": "eedb0bc4-826f-43fe-bd34-869bf69f2db0", - "metadata": {}, - "source": [ - "After obtaining the data, we insert it into the database." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "7598ec1a-4f23-46f0-ae9f-617bce855e65", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "datas = [{'txt': d['x'], 'label': d['y']} for d in data]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "89e856c2-7407-431f-a7de-3a6d51d17be6", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "datas = [{'image': d['x'], 'label': d['y']} for d in data]" - ] - }, - { - "cell_type": "markdown", - "id": "944ebee5", - "metadata": {}, - "source": [ - "\n", - "## Insert simple data\n", - "\n", - "After turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "64d0f3b5", - "metadata": {}, - "outputs": [], - "source": [ - "from superduper import Document\n", - "\n", - "table_or_collection = db['docs']\n", - "\n", - "ids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\n", - "select = table_or_collection.select()" - ] - }, - { - "cell_type": "markdown", - "id": "9e703b58-a46d-4b1f-98fd-f50d46b168fe", - "metadata": {}, - "source": [ - "\n", - "## Compute features" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae2e1588-fec8-45a6-b678-fef05fc7b57f", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "key = 'txt'\n", - "import sentence_transformers\n", - "from superduper import vector, Listener\n", - "from superduper_sentence_transformers import SentenceTransformer\n", - "\n", - "superdupermodel = SentenceTransformer(\n", - " identifier=\"embedding\",\n", - " object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n", - " postprocess=lambda x: x.tolist(),\n", - ")\n", - "\n", - "jobs, listener = db.apply(\n", - " Listener(\n", - " model=superdupermodel,\n", - " select=select,\n", - " key=key,\n", - " identifier=\"features\"\n", - " )\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "17de589c-4d75-4483-b2ca-77d5c25c2fb8", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "key = 'image'\n", - "import torchvision.models as models\n", - "from torchvision import transforms\n", - "from superduper_torch import TorchModel\n", - "from superduper import Listener\n", - "from PIL import Image\n", - "\n", - "class TorchVisionEmbedding:\n", - " def __init__(self):\n", - " # Load the pre-trained ResNet-18 model\n", - " self.resnet = models.resnet18(pretrained=True)\n", - " \n", - " # Set the model to evaluation mode\n", - " self.resnet.eval()\n", - " \n", - " def preprocess(self, image):\n", - " # Preprocess the image\n", - " preprocess = preprocess = transforms.Compose([\n", - " transforms.Resize(256),\n", - " transforms.CenterCrop(224),\n", - " transforms.ToTensor(),\n", - " transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n", - " ])\n", - " tensor_image = preprocess(image)\n", - " return tensor_image\n", - " \n", - "model = TorchVisionEmbedding()\n", - "superdupermodel = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n", - "\n", - "jobs, listener = db.apply(\n", - " Listener(\n", - " model=superdupermodel,\n", - " select=select,\n", - " key=key,\n", - " identifier=\"features\"\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "3d9329cd-1ef3-4997-ba2f-9353091907a8", - "metadata": {}, - "source": [ - "## Choose features key from feature listener" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9651e3a6-89f3-41db-80e6-afc294f4daa1", - "metadata": {}, - "outputs": [], - "source": [ - "input_key = listener.outputs\n", - "training_select = select.outputs(listener.predict_id)" - ] - }, - { - "cell_type": "markdown", - "id": "ea4ddf88-468b-4ca5-b78b-37f8c3231ef7", - "metadata": {}, - "source": [ - "We can find the calculated feature data from the database." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "aa1b85e7-a562-4efe-8af1-16889bd35bf7", - "metadata": {}, - "outputs": [], - "source": [ - "feature = list(training_select.limit(1).execute())[0][input_key]\n", - "feature_size = len(feature)" - ] - }, - { - "cell_type": "markdown", - "id": "c2da0ab6-8fc0-41fc-b8c9-0f8a127d9e8d", - "metadata": {}, - "source": [ - "\n", - "## Build and train classifier" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d3b94fca-3a0b-433f-88cf-aab5b71b8596", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "from superduper_sklearn import Estimator, SklearnTrainer\n", - "from sklearn.svm import SVC\n", - "\n", - "model = Estimator(\n", - " identifier=\"my-model\",\n", - " object=SVC(),\n", - " trainer=SklearnTrainer(\n", - " \"my-trainer\",\n", - " key=(input_key, \"label\"),\n", - " select=training_select,\n", - " ),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5256e0fb-db16-411e-a1c1-8d44feb26c29", - "metadata": {}, - "outputs": [], - "source": [ - "# \n", - "import torch\n", - "from torch import nn\n", - "from superduper_torch.model import TorchModel\n", - "from superduper_torch.training import TorchTrainer\n", - "from torch.nn.functional import cross_entropy\n", - "\n", - "\n", - "class SimpleModel(nn.Module):\n", - " def __init__(self, input_size=16, hidden_size=32, num_classes=3):\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, num_classes)\n", - "\n", - " def forward(self, x):\n", - " out = self.fc1(x)\n", - " out = self.relu(out)\n", - " out = self.fc2(out)\n", - " return out\n", - "\n", - "preprocess = lambda x: torch.tensor(x)\n", - "\n", - "# Postprocess function for the model output \n", - "def postprocess(x):\n", - " return int(x.topk(1)[1].item())\n", - "\n", - "def data_transform(features, label):\n", - " return torch.tensor(features), label\n", - "\n", - "# Create a Logistic Regression model\n", - "# feature_length is the input feature size\n", - "model = SimpleModel(feature_size, num_classes=num_classes)\n", - "model = TorchModel(\n", - " identifier='my-model',\n", - " object=model, \n", - " preprocess=preprocess,\n", - " postprocess=postprocess,\n", - " trainer=TorchTrainer(\n", - " key=(input_key, 'label'),\n", - " identifier='my_trainer',\n", - " objective=cross_entropy,\n", - " loader_kwargs={'batch_size': 10},\n", - " max_iterations=1000,\n", - " validation_interval=100,\n", - " select=select,\n", - " transform=data_transform,\n", - " ),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "1af37887-59bc-4e13-b3b1-fee7d6108473", - "metadata": {}, - "source": [ - "Define a validation for evaluating the effect after training." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "94fb7506-2abc-41fe-b259-8c4922d79516", - "metadata": {}, - "outputs": [], - "source": [ - "from superduper import Dataset, Metric, Validation\n", - "\n", - "\n", - "def acc(x, y):\n", - " return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n", - "\n", - "\n", - "accuracy = Metric(identifier=\"acc\", object=acc)\n", - "validation = Validation(\n", - " \"transfer_learning_performance\",\n", - " key=(input_key, \"label\"),\n", - " datasets=[\n", - " Dataset(identifier=\"my-valid\", select=training_select.add_fold('valid'))\n", - " ],\n", - " metrics=[accuracy],\n", - ")\n", - "model.validation = validation" - ] - }, - { - "cell_type": "markdown", - "id": "513478b1-2736-4fa5-bc2a-6fdb9c8e232d", - "metadata": {}, - "source": [ - "If we execute the apply function, then the model will be added to the database, and because the model has a Trainer, it will perform training tasks." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "79a39054-aef2-480a-a57e-7180914e6f7f", - "metadata": {}, - "outputs": [], - "source": [ - "db.apply(model)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee4cd992-fd5e-4fa7-9464-ab36cea57c11", - "metadata": {}, - "outputs": [], - "source": [ - "model.encode()" - ] - }, - { - "cell_type": "markdown", - "id": "52ab9838-9e5e-4402-a572-bd8339020963", - "metadata": {}, - "source": [ - "Get the training metrics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "b7478a2a-3071-4d71-9ab8-95d7d7dd3d32", - "metadata": {}, - "outputs": [], - "source": [ - "model = db.load('model', model.identifier)\n", - "model.metric_values" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "00e5cd40-d5f5-4408-8f3b-857f1d4dd81e", - "metadata": {}, - "outputs": [], - "source": [ - "from superduper import Template\n", - "\n", - "t = Template('transfer-learner', template=model, substitutions={'docs': 'table'})" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "d9c5253f-7b62-4a49-bbe4-b102375e6039", - "metadata": {}, - "outputs": [], - "source": [ - "t.export('.')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "cells": [ + { + "cell_type": "markdown", + "id": "c288025e-2326-4e8b-ab52-6fb8a5f9560f", + "metadata": {}, + "source": [ + "# Transfer learning" + ] + }, + { + "cell_type": "markdown", + "id": "32f8484d-2e35-472a-9b24-1a30ec1d144b", + "metadata": {}, + "source": [ + "\n", + "## Connect to superduper" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d23a4f09-03f8-478b-a62b-37c541c2e86b", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext autoreload\n", + "%autoreload 2" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "31135e11-42f2-4ca7-b2ed-491eb7d074ae", + "metadata": {}, + "outputs": [], + "source": [ + "APPLY = True\n", + "COLLECTION_NAME = '' if not APPLY else 'transfer_learning'\n", + "ID_FIELD = '' if not APPLY else '_id'\n", + "MODALITY = 'text'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cb029a5e-fedf-4f07-8a31-d220cfbfbb3d", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper import superduper, CFG\n", + "CFG.force_apply = True\n", + "\n", + "db = superduper('mongomock:///test_db')" + ] + }, + { + "cell_type": "markdown", + "id": "032c2e7b-3f54-4263-b778-0fef60596efb", + "metadata": {}, + "source": [ + "\n", + "## Get useful sample data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "547751e5", + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "num_classes = 2\n", + "if MODALITY == 'text:\n", + " !curl -O https://superduperdb-public-demo.s3.amazonaws.com/text_classification.json\n", + " import json\n", + " \n", + " with open(\"text_classification.json\", \"r\") as f:\n", + " data = json.load(f)\n", + "else:\n", + " !curl -O https://superduperdb-public-demo.s3.amazonaws.com/images_classification.zip && unzip images_classification.zip\n", + " import json\n", + " from PIL import Image\n", + " \n", + " with open('images/images.json', 'r') as f:\n", + " data = json.load(f)\n", + " \n", + " data = [{'x': Image.open(d['image_path']), 'y': d['label']} for d in data]" + ] + }, + { + "cell_type": "markdown", + "id": "eedb0bc4-826f-43fe-bd34-869bf69f2db0", + "metadata": {}, + "source": [ + "After obtaining the data, we insert it into the database." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7598ec1a-4f23-46f0-ae9f-617bce855e65", + "metadata": {}, + "outputs": [], + "source": [ + "datas = [{'data': d['x'], 'label': d['y']} for d in data]" + ] + }, + { + "cell_type": "markdown", + "id": "944ebee5", + "metadata": {}, + "source": [ + "\n", + "## Insert simple data\n", + "\n", + "After turning on auto_schema, we can directly insert data, and superduper will automatically analyze the data type, and match the construction of the table and datatype." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "64d0f3b5", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper import Document\n", + "\n", + "table_or_collection = db[COLLECTION_NAME]\n", + "\n", + "ids = db.execute(table_or_collection.insert([Document(data) for data in datas]))\n", + "select = table_or_collection.select()" + ] + }, + { + "cell_type": "markdown", + "id": "9e703b58-a46d-4b1f-98fd-f50d46b168fe", + "metadata": {}, + "source": [ + "\n", + "## Compute features" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae2e1588-fec8-45a6-b678-fef05fc7b57f", + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "import sentence_transformers\n", + "from superduper import vector, Listener\n", + "from superduper_sentence_transformers import SentenceTransformer\n", + "\n", + "\n", + "superdupermodel_text = SentenceTransformer(\n", + " identifier=\"embedding\",\n", + " object=sentence_transformers.SentenceTransformer(\"sentence-transformers/all-MiniLM-L6-v2\"),\n", + " postprocess=lambda x: x.tolist(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "17de589c-4d75-4483-b2ca-77d5c25c2fb8", + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "import torchvision.models as models\n", + "from torchvision import transforms\n", + "from superduper_torch import TorchModel\n", + "from superduper import Listener\n", + "from PIL import Image\n", + "\n", + "class TorchVisionEmbedding:\n", + " def __init__(self):\n", + " # Load the pre-trained ResNet-18 model\n", + " self.resnet = models.resnet18(pretrained=True)\n", + " \n", + " # Set the model to evaluation mode\n", + " self.resnet.eval()\n", + " \n", + " def preprocess(self, image):\n", + " # Preprocess the image\n", + " preprocess = preprocess = transforms.Compose([\n", + " transforms.Resize(256),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(),\n", + " transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),\n", + " ])\n", + " tensor_image = preprocess(image)\n", + " return tensor_image\n", + " \n", + "model = TorchVisionEmbedding()\n", + "superdupermodel_image = TorchModel(identifier='my-vision-model-torch', object=model.resnet, preprocess=model.preprocess, postprocess=lambda x: x.numpy().tolist())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f095265c-769f-4720-9ac7-92a87ea88cd2", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper.components.model import ModelRouter\n", + "feature_extractor = ModelRouter(\n", + " 'feature_extractor',\n", + " models={\n", + " 'text': superdupermodel_text,\n", + " 'image': superdupermodel_image,\n", + " },\n", + " model='' if not APPLY else MODALITY,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4e4b0c27-d78c-4f2d-a45f-0ebd08cb2d61", + "metadata": {}, + "outputs": [], + "source": [ + "feature_extractor_listener = Listener(\n", + " model=feature_extractor,\n", + " select=select,\n", + " key='data',\n", + " identifier=\"features\"\n", + " )\n", + "\n", + "if APPLY:\n", + " feature_extractor_listener = db.apply(\n", + " feature_extractor_listener\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "3d9329cd-1ef3-4997-ba2f-9353091907a8", + "metadata": {}, + "source": [ + "## Choose features key from feature listener" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "df667f3d-d475-4184-b788-70c499db4891", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "225f5a0e-5464-4ef8-ac1f-2c6b6da9552a", + "metadata": {}, + "outputs": [], + "source": [ + "x.unpack().keys()" + ] + }, + { + "cell_type": "markdown", + "id": "c2da0ab6-8fc0-41fc-b8c9-0f8a127d9e8d", + "metadata": {}, + "source": [ + "\n", + "## Build and train classifier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6deee370-b9b4-4c1a-924e-2f637333f565", + "metadata": {}, + "outputs": [], + "source": [ + "input_key = feature_extractor_listener.outputs\n", + "training_select = select.outputs(feature_extractor_listener.predict_id)\n", + "print(input_key)\n", + "x = next(training_select.execute())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2e306be-e544-4a97-bf68-4e7d3a55f2ee", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d3b94fca-3a0b-433f-88cf-aab5b71b8596", + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "from superduper_sklearn import Estimator, SklearnTrainer\n", + "from sklearn.svm import SVC\n", + "\n", + "scikit_model = Estimator(\n", + " identifier=\"my-model-scikit\",\n", + " object=SVC(),\n", + " trainer=SklearnTrainer(\n", + " \"my-trainer\",\n", + " key=(input_key, \"label\"),\n", + " select=training_select,\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5256e0fb-db16-411e-a1c1-8d44feb26c29", + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "import torch\n", + "from torch import nn\n", + "from superduper_torch.model import TorchModel\n", + "from superduper_torch.training import TorchTrainer\n", + "from torch.nn.functional import cross_entropy\n", + "\n", + "\n", + "class SimpleModel(nn.Module):\n", + " def __init__(self, input_size=16, hidden_size=32, num_classes=3):\n", + " super(SimpleModel, self).__init__()\n", + " self.hidden_size = hidden_size\n", + " self.fc1 = None #nn.Linear(in_features=None, out_features=hidden_size)\n", + " self.relu = nn.ReLU()\n", + " self.fc2 = nn.Linear(hidden_size, num_classes)\n", + "\n", + " def forward(self, x):\n", + " input_size = x.size(1)\n", + " if self.fc1 is None:\n", + " self.fc1 = nn.Linear(input_size, self.hidden_size)\n", + " \n", + " out = self.fc1(x)\n", + " out = self.relu(out)\n", + " out = self.fc2(out)\n", + " return out\n", + "\n", + "preprocess = lambda x: torch.tensor(x)\n", + "\n", + "# Postprocess function for the model output \n", + "def postprocess(x):\n", + " return int(x.topk(1)[1].item())\n", + "\n", + "def data_transform(features, label):\n", + " return torch.tensor(features), label\n", + "\n", + "# Create a Logistic Regression model\n", + "# feature_length is the input feature size\n", + "model = SimpleModel( num_classes=num_classes)\n", + "torch_model = TorchModel(\n", + " identifier='my-model-torch',\n", + " object=model, \n", + " preprocess=preprocess,\n", + " postprocess=postprocess,\n", + " trainer=TorchTrainer(\n", + " key=(input_key, 'label'),\n", + " identifier='my_trainer',\n", + " objective=cross_entropy,\n", + " loader_kwargs={'batch_size': 10},\n", + " max_iterations=1000,\n", + " validation_interval=100,\n", + " select=select,\n", + " transform=data_transform,\n", + " ),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "1af37887-59bc-4e13-b3b1-fee7d6108473", + "metadata": {}, + "source": [ + "Define a validation for evaluating the effect after training." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "94fb7506-2abc-41fe-b259-8c4922d79516", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper import Dataset, Metric, Validation\n", + "\n", + "\n", + "def acc(x, y):\n", + " return sum([xx == yy for xx, yy in zip(x, y)]) / len(x)\n", + "\n", + "\n", + "accuracy = Metric(identifier=\"acc\", object=acc)\n", + "validation = Validation(\n", + " \"transfer_learning_performance\",\n", + " key=(input_key, \"label\"),\n", + " datasets=[\n", + " Dataset(identifier=\"my-valid\", select=training_select.add_fold('valid'))\n", + " ],\n", + " metrics=[accuracy],\n", + ")\n", + "scikit_model.validation = validation\n", + "torch_model.validation = validation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9bb69ac4-ed34-4fce-80eb-fba6802058ea", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "id": "513478b1-2736-4fa5-bc2a-6fdb9c8e232d", + "metadata": {}, + "source": [ + "If we execute the apply function, then the model will be added to the database, and because the model has a Trainer, it will perform training tasks." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e8d92e3b-372d-4006-be0f-e4e61aec25f7", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "052d13a9-b7f2-486c-a910-d55b8bb29a7b", + "metadata": {}, + "outputs": [], + "source": [ + "trainer = ModelRouter(\n", + " 'trainer',\n", + " models={\n", + " 'scikit': scikit_model,\n", + " 'torch': torch_model,\n", + " },\n", + " model='' if not APPLY else 'torch',\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "79a39054-aef2-480a-a57e-7180914e6f7f", + "metadata": {}, + "outputs": [], + "source": [ + "if APPLY:\n", + " db.apply(trainer)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee4cd992-fd5e-4fa7-9464-ab36cea57c11", + "metadata": {}, + "outputs": [], + "source": [ + "trainer.encode()" + ] + }, + { + "cell_type": "markdown", + "id": "52ab9838-9e5e-4402-a572-bd8339020963", + "metadata": {}, + "source": [ + "Get the training metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "58e35893-a040-4c42-a7aa-cea0ed54f55d", + "metadata": {}, + "outputs": [], + "source": [ + "db.show('model')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b7478a2a-3071-4d71-9ab8-95d7d7dd3d32", + "metadata": {}, + "outputs": [], + "source": [ + "model = db.load('model', 'my-model-scikit')\n", + "model.metric_values" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d3ac98a-88d9-4812-a715-cfc62c5efe20", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper import Application\n", + "\n", + "application = Application(identifier='transfer-learning', components=[feature_extractor_listener, trainer])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "00e5cd40-d5f5-4408-8f3b-857f1d4dd81e", + "metadata": {}, + "outputs": [], + "source": [ + "from superduper import Template\n", + "\n", + "t = Template('transfer-learner', data=data, template=application, template_variables=['trainer', 'embedding_model', 'table_name'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d9c5253f-7b62-4a49-bbe4-b102375e6039", + "metadata": {}, + "outputs": [], + "source": [ + "t.export('.')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/templates/transfer_learning/component.json b/templates/transfer_learning/component.json index fdde1e6ad..a667270a2 100644 --- a/templates/transfer_learning/component.json +++ b/templates/transfer_learning/component.json @@ -3,73 +3,145 @@ "_builds": { "transfer-learner": { "_path": "superduper.components.template.Template", + "upstream": null, + "plugins": null, + "cache": false, + "status": null, "template": { "_base": "?my-model", "_builds": { - "-select-outputs-features": { - "_path": "superduper_mongodb.query.parse_query", - "documents": [], - "query": ".select().outputs(\"features\")" - }, - "my-trainer": { - "_path": "superduper_sklearn.model.SklearnTrainer", - "key": [ - "_outputs__features", - "label" - ], - "select": "?-select-outputs-features" - }, - "dill": { + "datatype:dill": { "_path": "superduper.components.datatype.get_serializer", "method": "dill", "encodable": "artifact" }, - "85f40a9ab4d99d2e5423f6d53af04361677af2f3": { + "ea7281291bdbac227aa133cd3c0e6a6eda5af840": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?dill", - "blob": "&:blob:85f40a9ab4d99d2e5423f6d53af04361677af2f3" + "datatype": "?datatype:dill", + "uri": null, + "blob": "&:blob:ea7281291bdbac227aa133cd3c0e6a6eda5af840" }, - "acc": { + "metric:acc": { "_path": "superduper.components.metric.Metric", - "object": "?85f40a9ab4d99d2e5423f6d53af04361677af2f3" + "upstream": null, + "plugins": null, + "cache": false, + "status": "ready", + "object": "?ea7281291bdbac227aa133cd3c0e6a6eda5af840" }, - "my-valid": { - "_path": "superduper.components.dataset.Dataset" + "-select-outputs-features-c7963b93f0234f3298b40286906971cf-filter-fold-eq-valid": { + "_path": "superduper_mongodb.query.parse_query", + "documents": [ + { + "_fold": { + "<$>eq": "valid" + } + } + ], + "query": ".select().outputs(\"features__c7963b93f0234f3298b40286906971cf\").filter(documents[0])" }, - "transfer_learning_performance": { + "dataset:my-valid": { + "_path": "superduper.components.dataset.Dataset", + "upstream": null, + "plugins": null, + "cache": false, + "status": "ready", + "select": "?-select-outputs-features-c7963b93f0234f3298b40286906971cf-filter-fold-eq-valid", + "sample_size": null, + "random_seed": null, + "creation_date": null, + "raw_data": null, + "pin": false + }, + "validation:transfer_learning_performance": { "_path": "superduper.components.model.Validation", + "upstream": null, + "plugins": null, + "cache": false, + "status": "ready", "metrics": [ - "?acc" + "?metric:acc" ], "key": [ - "_outputs__features", + "_outputs__features__c7963b93f0234f3298b40286906971cf", "label" ], "datasets": [ - "?my-valid" + "?dataset:my-valid" ] }, - "pickle": { + "-select-outputs-features-c7963b93f0234f3298b40286906971cf": { + "_path": "superduper_mongodb.query.parse_query", + "documents": [], + "query": ".select().outputs(\"features__c7963b93f0234f3298b40286906971cf\")" + }, + "trainer:my-trainer": { + "_path": "superduper_sklearn.model.SklearnTrainer", + "upstream": null, + "plugins": null, + "cache": false, + "status": "ready", + "key": [ + "_outputs__features__c7963b93f0234f3298b40286906971cf", + "label" + ], + "select": "?-select-outputs-features-c7963b93f0234f3298b40286906971cf", + "transform": null, + "metric_values": {}, + "signature": "*args", + "data_prefetch": false, + "prefetch_size": 1000, + "prefetch_factor": 100, + "in_memory": true, + "compute_kwargs": {}, + "validation": null, + "fit_params": {}, + "predict_params": {}, + "y_preprocess": null + }, + "datatype:pickle": { "_path": "superduper.components.datatype.get_serializer", "method": "pickle", "encodable": "artifact" }, - "11f4c3e68e30071c92163ece040096ea80e23755": { + "b2fb772b6860a8d71d4dfe3115263984aadc447b": { "_path": "superduper.components.datatype.Artifact", - "datatype": "?pickle", - "blob": "&:blob:11f4c3e68e30071c92163ece040096ea80e23755" + "datatype": "?datatype:pickle", + "uri": null, + "blob": "&:blob:b2fb772b6860a8d71d4dfe3115263984aadc447b" }, "my-model": { "_path": "superduper_sklearn.model.Estimator", - "trainer": "?my-trainer", - "validation": "?transfer_learning_performance", - "object": "?11f4c3e68e30071c92163ece040096ea80e23755" + "upstream": null, + "plugins": null, + "cache": false, + "status": "ready", + "signature": "singleton", + "datatype": null, + "output_schema": null, + "model_update_kwargs": {}, + "predict_kwargs": {}, + "compute_kwargs": {}, + "validation": "?validation:transfer_learning_performance", + "metric_values": { + "my-valid/acc": 0.7647058823529411 + }, + "num_workers": 0, + "serve": false, + "trainer": "?trainer:my-trainer", + "object": "?b2fb772b6860a8d71d4dfe3115263984aadc447b", + "preprocess": null, + "postprocess": null } } }, "template_variables": [ "table" ], + "types": {}, + "blobs": null, + "files": null, + "data": null, "_literals": [ "template" ] diff --git a/templates/transfer_learning/requirements.txt b/templates/transfer_learning/requirements.txt index 5c080290d..6499b8871 100644 --- a/templates/transfer_learning/requirements.txt +++ b/templates/transfer_learning/requirements.txt @@ -1,3 +1,5 @@ -superduper==0.3.0 +superduper==0.0.4.dev +torch>=2.0.0 +pillow>=10.2.0 sentence-transformers>=2.2.2 scikit-learn>=1.2.2 \ No newline at end of file