diff --git a/Experiments/clip_expt.ipynb b/Experiments/clip_expt.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..25c9252a64d66306b25eb8adfd2227a7761e8416 --- /dev/null +++ b/Experiments/clip_expt.ipynb @@ -0,0 +1,840 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "9fe51ce7-4c87-4186-9fd3-0fb18ac43e56", + "metadata": {}, + "outputs": [], + "source": [ + "from PIL import Image\n", + "import requests\n", + "from transformers import AutoProcessor, CLIPVisionModel" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0f4c21dd-4258-461d-8511-5be089d068a8", + "metadata": {}, + "outputs": [], + "source": [ + "model = CLIPVisionModel.from_pretrained(\"openai/clip-vit-base-patch32\", device_map=\"cuda:0\")\n", + "processor = AutoProcessor.from_pretrained(\"openai/clip-vit-base-patch32\", device_map=\"cuda:0\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "98b9f906-ffaa-4be4-8671-4ecf65f12c49", + "metadata": {}, + "outputs": [], + "source": [ + "# url = \"http://images.cocodataset.org/val2017/000000039769.jpg\"\n", + "# image = Image.open(requests.get(url, stream=True).raw)\n", + "image = Image.open(\"002579.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "54b2e4ce-b77b-4314-87f6-ca2a1970fc79", + "metadata": {}, + "outputs": [], + "source": [ + "# image" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "cdd65c58-007f-450b-8deb-f8b4f372a823", + "metadata": {}, + "outputs": [], + "source": [ + "# image = None" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "e9066c2e-c78b-49d1-979b-10d0f4f09441", + "metadata": {}, + "outputs": [], + "source": [ + "inputs = processor(images=image, return_tensors=\"pt\", device_map=\"cuda:0\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e98b211d-29d9-4662-be0b-e011e89b0101", + "metadata": {}, + "outputs": [], + "source": [ + "# inputs" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b030bd3d-4282-4074-98fe-97e658bd0f50", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 3, 224, 224])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inputs[\"pixel_values\"].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "0ce68f11-1c88-4dd7-8b17-0d1de5811fe6", + "metadata": {}, + "outputs": [], + "source": [ + "outputs = model(inputs[\"pixel_values\"].to(\"cuda:0\"))\n", + "last_hidden_state = outputs.last_hidden_state\n", + "pooled_output = outputs.pooler_output # pooled CLS states" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "30cb0918-a30e-4246-b540-6b8e0d876807", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 768])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pooled_output.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "6399543a-f23f-426d-8289-3bb52d293ece", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 50, 768])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "last_hidden_state.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "19a70443-5942-4937-b3ea-6a52d76e2b08", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 768])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outputs[1].shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fa13903f-a94a-4839-ae5a-8df4f55c68b6", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from torch import nn\n", + "from transformers import CLIPVisionConfig,CLIPPreTrainedModel" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "b2bd9198-42f0-40c3-80e1-d167c0b038fb", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'Optional' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mclass\u001b[39;00m \u001b[38;5;21;01mCLIPVisionModelWithProjection\u001b[39;00m(CLIPPreTrainedModel):\n\u001b[1;32m 2\u001b[0m config_class \u001b[38;5;241m=\u001b[39m CLIPVisionConfig\n\u001b[1;32m 3\u001b[0m main_input_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpixel_values\u001b[39m\u001b[38;5;124m\"\u001b[39m\n", + "Cell \u001b[0;32mIn[9], line 20\u001b[0m, in \u001b[0;36mCLIPVisionModelWithProjection\u001b[0;34m()\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mget_input_embeddings\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m nn\u001b[38;5;241m.\u001b[39mModule:\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvision_model\u001b[38;5;241m.\u001b[39membeddings\u001b[38;5;241m.\u001b[39mpatch_embedding\n\u001b[1;32m 18\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m---> 20\u001b[0m pixel_values: \u001b[43mOptional\u001b[49m[torch\u001b[38;5;241m.\u001b[39mFloatTensor] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 21\u001b[0m output_attentions: Optional[\u001b[38;5;28mbool\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 22\u001b[0m output_hidden_states: Optional[\u001b[38;5;28mbool\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 23\u001b[0m return_dict: Optional[\u001b[38;5;28mbool\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 24\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Union[Tuple, CLIPVisionModelOutput]:\n\u001b[1;32m 25\u001b[0m return_dict \u001b[38;5;241m=\u001b[39m return_dict \u001b[38;5;28;01mif\u001b[39;00m return_dict \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39muse_return_dict\n\u001b[1;32m 27\u001b[0m vision_outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvision_model(\n\u001b[1;32m 28\u001b[0m pixel_values\u001b[38;5;241m=\u001b[39mpixel_values,\n\u001b[1;32m 29\u001b[0m output_attentions\u001b[38;5;241m=\u001b[39moutput_attentions,\n\u001b[1;32m 30\u001b[0m output_hidden_states\u001b[38;5;241m=\u001b[39moutput_hidden_states,\n\u001b[1;32m 31\u001b[0m return_dict\u001b[38;5;241m=\u001b[39mreturn_dict,\n\u001b[1;32m 32\u001b[0m )\n", + "\u001b[0;31mNameError\u001b[0m: name 'Optional' is not defined" + ] + } + ], + "source": [ + "class CLIPVisionModelWithProjection(CLIPPreTrainedModel):\n", + " config_class = CLIPVisionConfig\n", + " main_input_name = \"pixel_values\"\n", + "\n", + " def __init__(self, config: CLIPVisionConfig):\n", + " super().__init__(config)\n", + "\n", + " self.vision_model = CLIPVisionTransformer(config)\n", + "\n", + " self.visual_projection = nn.Linear(config.hidden_size, config.projection_dim, bias=False)\n", + "\n", + " # Initialize weights and apply final processing\n", + " self.post_init()\n", + "\n", + " def get_input_embeddings(self) -> nn.Module:\n", + " return self.vision_model.embeddings.patch_embedding\n", + "\n", + " def forward(\n", + " self,\n", + " pixel_values: Optional[torch.FloatTensor] = None,\n", + " output_attentions: Optional[bool] = None,\n", + " output_hidden_states: Optional[bool] = None,\n", + " return_dict: Optional[bool] = None,\n", + " ) -> Union[Tuple, CLIPVisionModelOutput]:\n", + " return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n", + "\n", + " vision_outputs = self.vision_model(\n", + " pixel_values=pixel_values,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " pooled_output = vision_outputs[1] # pooled_output\n", + "\n", + " image_embeds = self.visual_projection(pooled_output)\n", + "\n", + " if not return_dict:\n", + " outputs = (image_embeds, vision_outputs[0]) + vision_outputs[2:]\n", + " return tuple(output for output in outputs if output is not None)\n", + "\n", + " return CLIPVisionModelOutput(\n", + " image_embeds=image_embeds,\n", + " last_hidden_state=vision_outputs.last_hidden_state,\n", + " hidden_states=vision_outputs.hidden_states,\n", + " attentions=vision_outputs.attentions,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "68a9ee4a-d977-4725-842d-e64e0dd2f61d", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "`text_config` is `None`. Initializing the `CLIPTextConfig` with default values.\n", + "`vision_config` is `None`. initializing the `CLIPVisionConfig` with default values.\n", + "Model config CLIPConfig {\n", + " \"_name_or_path\": \"openai/clip-vit-base-patch32\",\n", + " \"architectures\": [\n", + " \"CLIPModel\"\n", + " ],\n", + " \"initializer_factor\": 1.0,\n", + " \"logit_scale_init_value\": 2.6592,\n", + " \"model_type\": \"clip\",\n", + " \"projection_dim\": 512,\n", + " \"text_config\": {\n", + " \"bos_token_id\": 0,\n", + " \"dropout\": 0.0,\n", + " \"eos_token_id\": 2,\n", + " \"model_type\": \"clip_text_model\"\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"dropout\": 0.0,\n", + " \"model_type\": \"clip_vision_model\"\n", + " }\n", + "}\n", + "\n", + "loading weights file pytorch_model.bin from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/pytorch_model.bin\n", + "All model checkpoint weights were used when initializing CLIPModel.\n", + "\n", + "All the weights of CLIPModel were initialized from the model checkpoint at openai/clip-vit-base-patch32.\n", + "If your task is similar to the task the model of the checkpoint was trained on, you can already use CLIPModel for predictions without further training.\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "`text_config` is `None`. Initializing the `CLIPTextConfig` with default values.\n", + "`vision_config` is `None`. initializing the `CLIPVisionConfig` with default values.\n", + "Model config CLIPConfig {\n", + " \"_name_or_path\": \"openai/clip-vit-base-patch32\",\n", + " \"architectures\": [\n", + " \"CLIPModel\"\n", + " ],\n", + " \"initializer_factor\": 1.0,\n", + " \"logit_scale_init_value\": 2.6592,\n", + " \"model_type\": \"clip\",\n", + " \"projection_dim\": 512,\n", + " \"text_config\": {\n", + " \"bos_token_id\": 0,\n", + " \"dropout\": 0.0,\n", + " \"eos_token_id\": 2,\n", + " \"model_type\": \"clip_text_model\"\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"dropout\": 0.0,\n", + " \"model_type\": \"clip_vision_model\"\n", + " }\n", + "}\n", + "\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "size should be a dictionary on of the following set of keys: ({'width', 'height'}, {'shortest_edge'}, {'longest_edge', 'shortest_edge'}, {'longest_edge'}), got 224. Converted to {'shortest_edge': 224}.\n", + "crop_size should be a dictionary on of the following set of keys: ({'width', 'height'}, {'shortest_edge'}, {'longest_edge', 'shortest_edge'}, {'longest_edge'}), got 224. Converted to {'height': 224, 'width': 224}.\n", + "Image processor CLIPImageProcessor {\n", + " \"crop_size\": {\n", + " \"height\": 224,\n", + " \"width\": 224\n", + " },\n", + " \"do_center_crop\": true,\n", + " \"do_convert_rgb\": true,\n", + " \"do_normalize\": true,\n", + " \"do_rescale\": true,\n", + " \"do_resize\": true,\n", + " \"feature_extractor_type\": \"CLIPFeatureExtractor\",\n", + " \"image_mean\": [\n", + " 0.48145466,\n", + " 0.4578275,\n", + " 0.40821073\n", + " ],\n", + " \"image_processor_type\": \"CLIPImageProcessor\",\n", + " \"image_std\": [\n", + " 0.26862954,\n", + " 0.26130258,\n", + " 0.27577711\n", + " ],\n", + " \"resample\": 3,\n", + " \"rescale_factor\": 0.00392156862745098,\n", + " \"size\": {\n", + " \"shortest_edge\": 224\n", + " }\n", + "}\n", + "\n", + "loading file vocab.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/vocab.json\n", + "loading file merges.txt from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/merges.txt\n", + "loading file tokenizer.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/tokenizer.json\n", + "loading file added_tokens.json from cache at None\n", + "loading file special_tokens_map.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/special_tokens_map.json\n", + "loading file tokenizer_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/tokenizer_config.json\n", + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "`text_config` is `None`. Initializing the `CLIPTextConfig` with default values.\n", + "`vision_config` is `None`. initializing the `CLIPVisionConfig` with default values.\n", + "Model config CLIPConfig {\n", + " \"_name_or_path\": \"openai/clip-vit-base-patch32\",\n", + " \"architectures\": [\n", + " \"CLIPModel\"\n", + " ],\n", + " \"initializer_factor\": 1.0,\n", + " \"logit_scale_init_value\": 2.6592,\n", + " \"model_type\": \"clip\",\n", + " \"projection_dim\": 512,\n", + " \"text_config\": {\n", + " \"bos_token_id\": 0,\n", + " \"dropout\": 0.0,\n", + " \"eos_token_id\": 2,\n", + " \"model_type\": \"clip_text_model\"\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"dropout\": 0.0,\n", + " \"model_type\": \"clip_vision_model\"\n", + " }\n", + "}\n", + "\n" + ] + } + ], + "source": [ + "from PIL import Image\n", + "import requests\n", + "from transformers import AutoProcessor, CLIPModel\n", + "\n", + "model = CLIPModel.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + "processor = AutoProcessor.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + "\n", + "url = \"http://images.cocodataset.org/val2017/000000039769.jpg\"\n", + "image = Image.open(requests.get(url, stream=True).raw)\n", + "\n", + "inputs = processor(images=image, return_tensors=\"pt\")\n", + "\n", + "image_features = model.get_image_features(**inputs)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "9ff63766-b706-452b-b735-bf9000fb9c20", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 512])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image_features.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "82566e7b-3c91-421a-94c5-f1e2b3e91c8c", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "Model config CLIPVisionConfig {\n", + " \"attention_dropout\": 0.0,\n", + " \"dropout\": 0.0,\n", + " \"hidden_act\": \"quick_gelu\",\n", + " \"hidden_size\": 768,\n", + " \"image_size\": 224,\n", + " \"initializer_factor\": 1.0,\n", + " \"initializer_range\": 0.02,\n", + " \"intermediate_size\": 3072,\n", + " \"layer_norm_eps\": 1e-05,\n", + " \"model_type\": \"clip_vision_model\",\n", + " \"num_attention_heads\": 12,\n", + " \"num_channels\": 3,\n", + " \"num_hidden_layers\": 12,\n", + " \"patch_size\": 32,\n", + " \"projection_dim\": 512,\n", + " \"transformers_version\": \"4.36.2\"\n", + "}\n", + "\n", + "loading weights file pytorch_model.bin from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/pytorch_model.bin\n", + "Some weights of the model checkpoint at openai/clip-vit-base-patch32 were not used when initializing CLIPVisionModel: ['text_model.encoder.layers.8.mlp.fc2.weight', 'text_model.encoder.layers.4.self_attn.v_proj.weight', 'text_model.encoder.layers.2.mlp.fc2.bias', 'text_model.encoder.layers.2.self_attn.q_proj.bias', 'text_model.encoder.layers.4.self_attn.v_proj.bias', 'text_model.encoder.layers.6.self_attn.k_proj.bias', 'text_model.encoder.layers.9.self_attn.k_proj.weight', 'text_model.encoder.layers.11.self_attn.q_proj.bias', 'text_model.encoder.layers.3.self_attn.out_proj.bias', 'text_model.encoder.layers.11.self_attn.k_proj.bias', 'text_model.encoder.layers.7.self_attn.k_proj.bias', 'text_model.encoder.layers.1.self_attn.q_proj.weight', 'text_model.encoder.layers.11.layer_norm1.bias', 'text_model.encoder.layers.11.mlp.fc2.bias', 'text_model.encoder.layers.10.layer_norm1.bias', 'text_model.encoder.layers.7.self_attn.q_proj.bias', 'text_model.encoder.layers.11.self_attn.k_proj.weight', 'text_model.encoder.layers.5.self_attn.q_proj.bias', 'text_model.encoder.layers.0.self_attn.v_proj.bias', 'logit_scale', 'text_model.encoder.layers.8.mlp.fc1.bias', 'text_model.encoder.layers.6.layer_norm1.bias', 'text_model.encoder.layers.5.self_attn.out_proj.weight', 'text_model.encoder.layers.7.self_attn.out_proj.bias', 'text_model.embeddings.token_embedding.weight', 'text_model.encoder.layers.8.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.v_proj.weight', 'text_model.encoder.layers.1.mlp.fc1.weight', 'text_model.encoder.layers.0.layer_norm1.weight', 'text_model.encoder.layers.6.self_attn.k_proj.weight', 'text_model.encoder.layers.3.self_attn.q_proj.weight', 'text_model.encoder.layers.2.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.v_proj.weight', 'text_model.encoder.layers.7.self_attn.q_proj.weight', 'text_model.encoder.layers.1.layer_norm2.weight', 'text_model.encoder.layers.2.self_attn.out_proj.weight', 'text_model.encoder.layers.3.self_attn.k_proj.weight', 'text_model.encoder.layers.7.mlp.fc2.bias', 'text_model.encoder.layers.10.self_attn.out_proj.weight', 'text_model.encoder.layers.2.self_attn.q_proj.weight', 'text_model.encoder.layers.1.self_attn.k_proj.weight', 'text_model.encoder.layers.4.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.q_proj.weight', 'text_model.encoder.layers.0.self_attn.out_proj.bias', 'text_model.encoder.layers.4.self_attn.out_proj.bias', 'text_model.encoder.layers.5.self_attn.k_proj.weight', 'visual_projection.weight', 'text_model.encoder.layers.6.layer_norm2.bias', 'text_model.encoder.layers.6.layer_norm1.weight', 'text_model.encoder.layers.4.self_attn.out_proj.weight', 'text_model.encoder.layers.10.mlp.fc2.bias', 'text_model.encoder.layers.10.mlp.fc1.weight', 'text_model.encoder.layers.6.self_attn.out_proj.weight', 'text_model.encoder.layers.9.layer_norm1.weight', 'text_model.encoder.layers.11.layer_norm2.weight', 'text_model.encoder.layers.6.self_attn.q_proj.bias', 'text_model.encoder.layers.5.mlp.fc1.weight', 'text_model.encoder.layers.2.mlp.fc1.weight', 'text_model.encoder.layers.11.self_attn.out_proj.weight', 'text_model.encoder.layers.0.self_attn.out_proj.weight', 'text_model.encoder.layers.11.mlp.fc2.weight', 'text_model.encoder.layers.7.layer_norm2.weight', 'text_model.encoder.layers.10.self_attn.v_proj.bias', 'text_model.encoder.layers.9.mlp.fc1.bias', 'text_model.encoder.layers.8.self_attn.v_proj.weight', 'text_model.encoder.layers.3.layer_norm1.bias', 'text_model.encoder.layers.6.self_attn.v_proj.bias', 'text_model.encoder.layers.1.self_attn.v_proj.bias', 'text_model.encoder.layers.9.self_attn.q_proj.weight', 'text_model.encoder.layers.4.self_attn.k_proj.weight', 'text_model.encoder.layers.7.layer_norm1.weight', 'text_model.encoder.layers.10.self_attn.k_proj.weight', 'text_model.encoder.layers.7.self_attn.v_proj.bias', 'text_model.encoder.layers.7.mlp.fc1.bias', 'text_model.encoder.layers.11.mlp.fc1.weight', 'text_model.encoder.layers.2.mlp.fc1.bias', 'text_model.encoder.layers.3.mlp.fc2.bias', 'text_model.encoder.layers.8.self_attn.q_proj.weight', 'text_model.encoder.layers.0.mlp.fc1.weight', 'text_model.encoder.layers.11.self_attn.out_proj.bias', 'text_model.encoder.layers.1.self_attn.v_proj.weight', 'text_model.encoder.layers.0.self_attn.k_proj.weight', 'text_model.encoder.layers.9.layer_norm1.bias', 'text_model.final_layer_norm.weight', 'text_model.encoder.layers.3.layer_norm1.weight', 'text_model.encoder.layers.4.mlp.fc1.bias', 'text_model.encoder.layers.1.layer_norm1.weight', 'text_model.encoder.layers.10.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.v_proj.bias', 'text_model.encoder.layers.10.self_attn.k_proj.bias', 'text_model.encoder.layers.8.mlp.fc2.bias', 'text_model.encoder.layers.5.mlp.fc2.bias', 'text_model.encoder.layers.6.self_attn.q_proj.weight', 'text_model.encoder.layers.5.self_attn.out_proj.bias', 'text_model.encoder.layers.9.mlp.fc2.bias', 'text_model.encoder.layers.5.layer_norm2.weight', 'text_model.encoder.layers.2.mlp.fc2.weight', 'text_model.encoder.layers.3.self_attn.out_proj.weight', 'text_model.encoder.layers.6.mlp.fc2.weight', 'text_model.encoder.layers.1.self_attn.out_proj.weight', 'text_model.encoder.layers.1.mlp.fc2.bias', 'text_model.encoder.layers.7.mlp.fc2.weight', 'text_model.encoder.layers.10.self_attn.v_proj.weight', 'text_model.encoder.layers.11.self_attn.v_proj.bias', 'text_model.encoder.layers.4.layer_norm1.bias', 'text_model.encoder.layers.4.layer_norm2.bias', 'text_model.encoder.layers.8.self_attn.q_proj.bias', 'text_model.embeddings.position_ids', 'text_model.encoder.layers.10.layer_norm2.weight', 'text_model.encoder.layers.1.self_attn.out_proj.bias', 'text_model.encoder.layers.2.layer_norm2.weight', 'text_model.encoder.layers.10.self_attn.q_proj.weight', 'text_model.encoder.layers.4.mlp.fc1.weight', 'text_model.encoder.layers.8.layer_norm1.bias', 'text_model.encoder.layers.2.self_attn.k_proj.weight', 'text_model.encoder.layers.5.mlp.fc1.bias', 'text_model.encoder.layers.9.self_attn.out_proj.bias', 'text_model.encoder.layers.7.self_attn.v_proj.weight', 'text_model.encoder.layers.2.self_attn.k_proj.bias', 'text_model.encoder.layers.5.self_attn.k_proj.bias', 'text_model.encoder.layers.8.self_attn.out_proj.bias', 'text_model.encoder.layers.7.self_attn.k_proj.weight', 'text_model.encoder.layers.6.mlp.fc1.weight', 'text_model.encoder.layers.6.mlp.fc1.bias', 'text_model.encoder.layers.3.self_attn.v_proj.weight', 'text_model.encoder.layers.3.self_attn.q_proj.bias', 'text_model.encoder.layers.9.self_attn.out_proj.weight', 'text_model.encoder.layers.3.mlp.fc1.bias', 'text_model.encoder.layers.0.self_attn.q_proj.bias', 'text_model.encoder.layers.1.layer_norm2.bias', 'text_model.encoder.layers.8.layer_norm2.weight', 'text_model.encoder.layers.5.self_attn.q_proj.weight', 'text_model.encoder.layers.4.layer_norm2.weight', 'text_model.encoder.layers.4.mlp.fc2.bias', 'text_model.encoder.layers.9.mlp.fc2.weight', 'text_model.encoder.layers.8.self_attn.k_proj.weight', 'text_model.encoder.layers.10.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.k_proj.bias', 'text_model.encoder.layers.8.self_attn.k_proj.bias', 'text_model.encoder.layers.9.layer_norm2.weight', 'text_model.encoder.layers.4.self_attn.k_proj.bias', 'text_model.encoder.layers.6.layer_norm2.weight', 'text_model.encoder.layers.0.layer_norm2.weight', 'text_model.encoder.layers.5.self_attn.v_proj.bias', 'text_model.encoder.layers.3.layer_norm2.bias', 'text_model.encoder.layers.8.mlp.fc1.weight', 'text_model.encoder.layers.4.self_attn.q_proj.bias', 'text_model.encoder.layers.8.layer_norm1.weight', 'text_model.encoder.layers.2.self_attn.v_proj.weight', 'text_model.encoder.layers.3.self_attn.v_proj.bias', 'text_model.encoder.layers.11.mlp.fc1.bias', 'text_model.encoder.layers.6.mlp.fc2.bias', 'text_model.encoder.layers.1.mlp.fc1.bias', 'text_model.encoder.layers.2.self_attn.v_proj.bias', 'text_model.encoder.layers.5.mlp.fc2.weight', 'text_model.encoder.layers.8.self_attn.v_proj.bias', 'text_model.encoder.layers.10.self_attn.out_proj.bias', 'text_model.encoder.layers.5.layer_norm1.bias', 'text_model.encoder.layers.5.self_attn.v_proj.weight', 'text_model.encoder.layers.10.self_attn.q_proj.bias', 'text_model.encoder.layers.2.layer_norm2.bias', 'text_model.encoder.layers.7.layer_norm1.bias', 'text_model.encoder.layers.4.mlp.fc2.weight', 'text_model.encoder.layers.10.mlp.fc2.weight', 'text_model.encoder.layers.3.mlp.fc1.weight', 'text_model.encoder.layers.5.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.q_proj.bias', 'text_model.encoder.layers.1.self_attn.k_proj.bias', 'text_model.encoder.layers.7.self_attn.out_proj.weight', 'text_model.encoder.layers.0.mlp.fc2.weight', 'text_model.encoder.layers.11.self_attn.v_proj.weight', 'text_model.encoder.layers.1.layer_norm1.bias', 'text_model.encoder.layers.1.mlp.fc2.weight', 'text_model.encoder.layers.9.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.k_proj.bias', 'text_model.encoder.layers.11.layer_norm1.weight', 'text_model.encoder.layers.8.self_attn.out_proj.weight', 'text_model.encoder.layers.0.layer_norm1.bias', 'text_model.encoder.layers.7.mlp.fc1.weight', 'text_model.encoder.layers.0.mlp.fc1.bias', 'text_model.encoder.layers.0.layer_norm2.bias', 'text_model.encoder.layers.3.self_attn.k_proj.bias', 'text_model.encoder.layers.5.layer_norm1.weight', 'text_model.encoder.layers.3.layer_norm2.weight', 'text_model.encoder.layers.1.self_attn.q_proj.bias', 'text_model.encoder.layers.2.self_attn.out_proj.bias', 'text_model.encoder.layers.3.mlp.fc2.weight', 'text_model.encoder.layers.11.self_attn.q_proj.weight', 'text_model.final_layer_norm.bias', 'text_model.encoder.layers.6.self_attn.v_proj.weight', 'text_model.encoder.layers.0.mlp.fc2.bias', 'text_model.encoder.layers.7.layer_norm2.bias', 'text_model.encoder.layers.10.mlp.fc1.bias', 'text_model.embeddings.position_embedding.weight', 'text_model.encoder.layers.6.self_attn.out_proj.bias', 'text_model.encoder.layers.2.layer_norm1.bias', 'text_model.encoder.layers.9.mlp.fc1.weight', 'text_projection.weight', 'text_model.encoder.layers.11.layer_norm2.bias', 'text_model.encoder.layers.4.self_attn.q_proj.weight']\n", + "- This IS expected if you are initializing CLIPVisionModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n", + "- This IS NOT expected if you are initializing CLIPVisionModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n", + "All the weights of CLIPVisionModel were initialized from the model checkpoint at openai/clip-vit-base-patch32.\n", + "If your task is similar to the task the model of the checkpoint was trained on, you can already use CLIPVisionModel for predictions without further training.\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "`text_config` is `None`. Initializing the `CLIPTextConfig` with default values.\n", + "`vision_config` is `None`. initializing the `CLIPVisionConfig` with default values.\n", + "Model config CLIPConfig {\n", + " \"_name_or_path\": \"openai/clip-vit-base-patch32\",\n", + " \"architectures\": [\n", + " \"CLIPModel\"\n", + " ],\n", + " \"initializer_factor\": 1.0,\n", + " \"logit_scale_init_value\": 2.6592,\n", + " \"model_type\": \"clip\",\n", + " \"projection_dim\": 512,\n", + " \"text_config\": {\n", + " \"bos_token_id\": 0,\n", + " \"dropout\": 0.0,\n", + " \"eos_token_id\": 2,\n", + " \"model_type\": \"clip_text_model\"\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"dropout\": 0.0,\n", + " \"model_type\": \"clip_vision_model\"\n", + " }\n", + "}\n", + "\n", + "loading configuration file preprocessor_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/preprocessor_config.json\n", + "size should be a dictionary on of the following set of keys: ({'width', 'height'}, {'shortest_edge'}, {'longest_edge', 'shortest_edge'}, {'longest_edge'}), got 224. Converted to {'shortest_edge': 224}.\n", + "crop_size should be a dictionary on of the following set of keys: ({'width', 'height'}, {'shortest_edge'}, {'longest_edge', 'shortest_edge'}, {'longest_edge'}), got 224. Converted to {'height': 224, 'width': 224}.\n", + "Image processor CLIPImageProcessor {\n", + " \"crop_size\": {\n", + " \"height\": 224,\n", + " \"width\": 224\n", + " },\n", + " \"do_center_crop\": true,\n", + " \"do_convert_rgb\": true,\n", + " \"do_normalize\": true,\n", + " \"do_rescale\": true,\n", + " \"do_resize\": true,\n", + " \"feature_extractor_type\": \"CLIPFeatureExtractor\",\n", + " \"image_mean\": [\n", + " 0.48145466,\n", + " 0.4578275,\n", + " 0.40821073\n", + " ],\n", + " \"image_processor_type\": \"CLIPImageProcessor\",\n", + " \"image_std\": [\n", + " 0.26862954,\n", + " 0.26130258,\n", + " 0.27577711\n", + " ],\n", + " \"resample\": 3,\n", + " \"rescale_factor\": 0.00392156862745098,\n", + " \"size\": {\n", + " \"shortest_edge\": 224\n", + " }\n", + "}\n", + "\n", + "loading file vocab.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/vocab.json\n", + "loading file merges.txt from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/merges.txt\n", + "loading file tokenizer.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/tokenizer.json\n", + "loading file added_tokens.json from cache at None\n", + "loading file special_tokens_map.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/special_tokens_map.json\n", + "loading file tokenizer_config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/tokenizer_config.json\n", + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "`text_config` is `None`. Initializing the `CLIPTextConfig` with default values.\n", + "`vision_config` is `None`. initializing the `CLIPVisionConfig` with default values.\n", + "Model config CLIPConfig {\n", + " \"_name_or_path\": \"openai/clip-vit-base-patch32\",\n", + " \"architectures\": [\n", + " \"CLIPModel\"\n", + " ],\n", + " \"initializer_factor\": 1.0,\n", + " \"logit_scale_init_value\": 2.6592,\n", + " \"model_type\": \"clip\",\n", + " \"projection_dim\": 512,\n", + " \"text_config\": {\n", + " \"bos_token_id\": 0,\n", + " \"dropout\": 0.0,\n", + " \"eos_token_id\": 2,\n", + " \"model_type\": \"clip_text_model\"\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"dropout\": 0.0,\n", + " \"model_type\": \"clip_vision_model\"\n", + " }\n", + "}\n", + "\n" + ] + } + ], + "source": [ + "from PIL import Image\n", + "import requests\n", + "from transformers import AutoProcessor, CLIPVisionModel\n", + "\n", + "model = CLIPVisionModel.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + "processor = AutoProcessor.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + "\n", + "url = \"http://images.cocodataset.org/val2017/000000039769.jpg\"\n", + "image = Image.open(requests.get(url, stream=True).raw)\n", + "\n", + "inputs = processor(images=image, return_tensors=\"pt\")\n", + "\n", + "outputs = model(**inputs)\n", + "last_hidden_state = outputs.last_hidden_state\n", + "pooled_output = outputs.pooler_output # pooled CLS states" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "bcf0a7b3-6cbb-492e-bc2c-42e3edbe6a0c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 768])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pooled_output.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "67240294-c7a0-4e94-a8c1-86bfe1b21977", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import CLIPPreTrainedModel\n", + "from transformers.models.clip.modeling_clip import CLIPVisionModelOutput, CLIPVisionTransformer\n", + "from typing import Optional, Union, Tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "cc9b20db-7f84-44c3-9c78-e84164ccc192", + "metadata": {}, + "outputs": [], + "source": [ + "class VisionLanguageConnector(nn.Module):\n", + " def __init__(self, hidden_size, projection_dim):\n", + " super().__init__()\n", + " self.mlp = nn.Sequential(\n", + " nn.Linear(hidden_size, hidden_size, bias=False),\n", + " nn.GELU(),\n", + " nn.Linear(hidden_size, projection_dim, bias=False)\n", + " )\n", + "\n", + " def forward(self, x):\n", + " return self.mlp(x)\n", + " \n", + "class ClipWithProjection(CLIPPreTrainedModel):\n", + " config_class = CLIPVisionConfig\n", + " main_input_name = \"pixel_values\"\n", + "\n", + " def __init__(self, config: CLIPVisionConfig):\n", + " super().__init__(config)\n", + "\n", + " self.vision_model = CLIPVisionTransformer(config)\n", + " self.vision_model.\n", + " self.vision_language_connector = VisionLanguageConnector(config.hidden_size, config.projection_dim)\n", + "\n", + " # Initialize weights and apply final processing\n", + " self.post_init()\n", + "\n", + " def forward(\n", + " self,\n", + " pixel_values: Optional[torch.FloatTensor] = None,\n", + " output_attentions: Optional[bool] = None,\n", + " output_hidden_states: Optional[bool] = None,\n", + " return_dict: Optional[bool] = None,\n", + " ) -> Union[Tuple, CLIPVisionModelOutput]:\n", + " return_dict = return_dict if return_dict is not None else self.config.use_return_dict\n", + "\n", + " vision_outputs = self.vision_model(\n", + " pixel_values=pixel_values,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " pooled_output = vision_outputs[1] # pooled_output\n", + "\n", + " image_embeds = self.vision_language_connector(pooled_output)\n", + "\n", + " if not return_dict:\n", + " outputs = (image_embeds, vision_outputs[0]) + vision_outputs[2:]\n", + " return tuple(output for output in outputs if output is not None)\n", + "\n", + " return CLIPVisionModelOutput(\n", + " image_embeds=image_embeds,\n", + " last_hidden_state=vision_outputs.last_hidden_state,\n", + " hidden_states=vision_outputs.hidden_states,\n", + " attentions=vision_outputs.attentions,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "a4892ab8-39d2-41c9-ad2a-04711c22b95f", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "loading configuration file config.json from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/config.json\n", + "Model config CLIPVisionConfig {\n", + " \"attention_dropout\": 0.0,\n", + " \"dropout\": 0.0,\n", + " \"hidden_act\": \"quick_gelu\",\n", + " \"hidden_size\": 768,\n", + " \"image_size\": 224,\n", + " \"initializer_factor\": 1.0,\n", + " \"initializer_range\": 0.02,\n", + " \"intermediate_size\": 3072,\n", + " \"layer_norm_eps\": 1e-05,\n", + " \"model_type\": \"clip_vision_model\",\n", + " \"num_attention_heads\": 12,\n", + " \"num_channels\": 3,\n", + " \"num_hidden_layers\": 12,\n", + " \"patch_size\": 32,\n", + " \"projection_dim\": 512,\n", + " \"transformers_version\": \"4.36.2\"\n", + "}\n", + "\n", + "loading weights file pytorch_model.bin from cache at /home/ravi.naik/.cache/huggingface/hub/models--openai--clip-vit-base-patch32/snapshots/e6a30b603a447e251fdaca1c3056b2a16cdfebeb/pytorch_model.bin\n", + "Some weights of the model checkpoint at openai/clip-vit-base-patch32 were not used when initializing ClipWithProjection: ['text_model.encoder.layers.8.mlp.fc2.weight', 'text_model.encoder.layers.4.self_attn.v_proj.weight', 'text_model.encoder.layers.2.mlp.fc2.bias', 'text_model.encoder.layers.2.self_attn.q_proj.bias', 'text_model.encoder.layers.4.self_attn.v_proj.bias', 'text_model.encoder.layers.6.self_attn.k_proj.bias', 'text_model.encoder.layers.9.self_attn.k_proj.weight', 'text_model.encoder.layers.11.self_attn.q_proj.bias', 'text_model.encoder.layers.3.self_attn.out_proj.bias', 'text_model.encoder.layers.11.self_attn.k_proj.bias', 'text_model.encoder.layers.7.self_attn.k_proj.bias', 'text_model.encoder.layers.1.self_attn.q_proj.weight', 'text_model.encoder.layers.11.layer_norm1.bias', 'text_model.encoder.layers.11.mlp.fc2.bias', 'text_model.encoder.layers.10.layer_norm1.bias', 'text_model.encoder.layers.7.self_attn.q_proj.bias', 'text_model.encoder.layers.11.self_attn.k_proj.weight', 'text_model.encoder.layers.5.self_attn.q_proj.bias', 'text_model.encoder.layers.0.self_attn.v_proj.bias', 'logit_scale', 'text_model.encoder.layers.8.mlp.fc1.bias', 'text_model.encoder.layers.6.layer_norm1.bias', 'text_model.encoder.layers.5.self_attn.out_proj.weight', 'text_model.encoder.layers.7.self_attn.out_proj.bias', 'text_model.embeddings.token_embedding.weight', 'text_model.encoder.layers.8.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.v_proj.weight', 'text_model.encoder.layers.1.mlp.fc1.weight', 'text_model.encoder.layers.0.layer_norm1.weight', 'text_model.encoder.layers.6.self_attn.k_proj.weight', 'text_model.encoder.layers.3.self_attn.q_proj.weight', 'text_model.encoder.layers.2.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.v_proj.weight', 'text_model.encoder.layers.7.self_attn.q_proj.weight', 'text_model.encoder.layers.1.layer_norm2.weight', 'text_model.encoder.layers.2.self_attn.out_proj.weight', 'text_model.encoder.layers.3.self_attn.k_proj.weight', 'text_model.encoder.layers.7.mlp.fc2.bias', 'text_model.encoder.layers.10.self_attn.out_proj.weight', 'text_model.encoder.layers.2.self_attn.q_proj.weight', 'text_model.encoder.layers.1.self_attn.k_proj.weight', 'text_model.encoder.layers.4.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.q_proj.weight', 'text_model.encoder.layers.0.self_attn.out_proj.bias', 'text_model.encoder.layers.4.self_attn.out_proj.bias', 'text_model.encoder.layers.5.self_attn.k_proj.weight', 'visual_projection.weight', 'text_model.encoder.layers.6.layer_norm2.bias', 'text_model.encoder.layers.6.layer_norm1.weight', 'text_model.encoder.layers.4.self_attn.out_proj.weight', 'text_model.encoder.layers.10.mlp.fc2.bias', 'text_model.encoder.layers.10.mlp.fc1.weight', 'text_model.encoder.layers.6.self_attn.out_proj.weight', 'text_model.encoder.layers.9.layer_norm1.weight', 'text_model.encoder.layers.11.layer_norm2.weight', 'text_model.encoder.layers.6.self_attn.q_proj.bias', 'text_model.encoder.layers.5.mlp.fc1.weight', 'text_model.encoder.layers.2.mlp.fc1.weight', 'text_model.encoder.layers.11.self_attn.out_proj.weight', 'text_model.encoder.layers.0.self_attn.out_proj.weight', 'text_model.encoder.layers.11.mlp.fc2.weight', 'text_model.encoder.layers.7.layer_norm2.weight', 'text_model.encoder.layers.10.self_attn.v_proj.bias', 'text_model.encoder.layers.9.mlp.fc1.bias', 'text_model.encoder.layers.8.self_attn.v_proj.weight', 'text_model.encoder.layers.3.layer_norm1.bias', 'text_model.encoder.layers.6.self_attn.v_proj.bias', 'text_model.encoder.layers.1.self_attn.v_proj.bias', 'text_model.encoder.layers.9.self_attn.q_proj.weight', 'text_model.encoder.layers.4.self_attn.k_proj.weight', 'text_model.encoder.layers.7.layer_norm1.weight', 'text_model.encoder.layers.10.self_attn.k_proj.weight', 'text_model.encoder.layers.7.self_attn.v_proj.bias', 'text_model.encoder.layers.7.mlp.fc1.bias', 'text_model.encoder.layers.11.mlp.fc1.weight', 'text_model.encoder.layers.2.mlp.fc1.bias', 'text_model.encoder.layers.3.mlp.fc2.bias', 'text_model.encoder.layers.8.self_attn.q_proj.weight', 'text_model.encoder.layers.0.mlp.fc1.weight', 'text_model.encoder.layers.11.self_attn.out_proj.bias', 'text_model.encoder.layers.1.self_attn.v_proj.weight', 'text_model.encoder.layers.0.self_attn.k_proj.weight', 'text_model.encoder.layers.9.layer_norm1.bias', 'text_model.final_layer_norm.weight', 'text_model.encoder.layers.3.layer_norm1.weight', 'text_model.encoder.layers.4.mlp.fc1.bias', 'text_model.encoder.layers.1.layer_norm1.weight', 'text_model.encoder.layers.10.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.v_proj.bias', 'text_model.encoder.layers.10.self_attn.k_proj.bias', 'text_model.encoder.layers.8.mlp.fc2.bias', 'text_model.encoder.layers.5.mlp.fc2.bias', 'text_model.encoder.layers.6.self_attn.q_proj.weight', 'text_model.encoder.layers.5.self_attn.out_proj.bias', 'text_model.encoder.layers.9.mlp.fc2.bias', 'text_model.encoder.layers.5.layer_norm2.weight', 'text_model.encoder.layers.2.mlp.fc2.weight', 'text_model.encoder.layers.3.self_attn.out_proj.weight', 'text_model.encoder.layers.6.mlp.fc2.weight', 'text_model.encoder.layers.1.self_attn.out_proj.weight', 'text_model.encoder.layers.1.mlp.fc2.bias', 'text_model.encoder.layers.7.mlp.fc2.weight', 'text_model.encoder.layers.10.self_attn.v_proj.weight', 'text_model.encoder.layers.11.self_attn.v_proj.bias', 'text_model.encoder.layers.4.layer_norm1.bias', 'text_model.encoder.layers.4.layer_norm2.bias', 'text_model.encoder.layers.8.self_attn.q_proj.bias', 'text_model.embeddings.position_ids', 'text_model.encoder.layers.10.layer_norm2.weight', 'text_model.encoder.layers.1.self_attn.out_proj.bias', 'text_model.encoder.layers.2.layer_norm2.weight', 'text_model.encoder.layers.10.self_attn.q_proj.weight', 'text_model.encoder.layers.4.mlp.fc1.weight', 'text_model.encoder.layers.8.layer_norm1.bias', 'text_model.encoder.layers.2.self_attn.k_proj.weight', 'text_model.encoder.layers.5.mlp.fc1.bias', 'text_model.encoder.layers.9.self_attn.out_proj.bias', 'text_model.encoder.layers.7.self_attn.v_proj.weight', 'text_model.encoder.layers.2.self_attn.k_proj.bias', 'text_model.encoder.layers.5.self_attn.k_proj.bias', 'text_model.encoder.layers.8.self_attn.out_proj.bias', 'text_model.encoder.layers.7.self_attn.k_proj.weight', 'text_model.encoder.layers.6.mlp.fc1.weight', 'text_model.encoder.layers.6.mlp.fc1.bias', 'text_model.encoder.layers.3.self_attn.v_proj.weight', 'text_model.encoder.layers.3.self_attn.q_proj.bias', 'text_model.encoder.layers.9.self_attn.out_proj.weight', 'text_model.encoder.layers.3.mlp.fc1.bias', 'text_model.encoder.layers.0.self_attn.q_proj.bias', 'text_model.encoder.layers.1.layer_norm2.bias', 'text_model.encoder.layers.8.layer_norm2.weight', 'text_model.encoder.layers.5.self_attn.q_proj.weight', 'text_model.encoder.layers.4.layer_norm2.weight', 'text_model.encoder.layers.4.mlp.fc2.bias', 'text_model.encoder.layers.9.mlp.fc2.weight', 'text_model.encoder.layers.8.self_attn.k_proj.weight', 'text_model.encoder.layers.10.layer_norm1.weight', 'text_model.encoder.layers.0.self_attn.k_proj.bias', 'text_model.encoder.layers.8.self_attn.k_proj.bias', 'text_model.encoder.layers.9.layer_norm2.weight', 'text_model.encoder.layers.4.self_attn.k_proj.bias', 'text_model.encoder.layers.6.layer_norm2.weight', 'text_model.encoder.layers.0.layer_norm2.weight', 'text_model.encoder.layers.5.self_attn.v_proj.bias', 'text_model.encoder.layers.3.layer_norm2.bias', 'text_model.encoder.layers.8.mlp.fc1.weight', 'text_model.encoder.layers.4.self_attn.q_proj.bias', 'text_model.encoder.layers.8.layer_norm1.weight', 'text_model.encoder.layers.2.self_attn.v_proj.weight', 'text_model.encoder.layers.3.self_attn.v_proj.bias', 'text_model.encoder.layers.11.mlp.fc1.bias', 'text_model.encoder.layers.6.mlp.fc2.bias', 'text_model.encoder.layers.1.mlp.fc1.bias', 'text_model.encoder.layers.2.self_attn.v_proj.bias', 'text_model.encoder.layers.5.mlp.fc2.weight', 'text_model.encoder.layers.8.self_attn.v_proj.bias', 'text_model.encoder.layers.10.self_attn.out_proj.bias', 'text_model.encoder.layers.5.layer_norm1.bias', 'text_model.encoder.layers.5.self_attn.v_proj.weight', 'text_model.encoder.layers.10.self_attn.q_proj.bias', 'text_model.encoder.layers.2.layer_norm2.bias', 'text_model.encoder.layers.7.layer_norm1.bias', 'text_model.encoder.layers.4.mlp.fc2.weight', 'text_model.encoder.layers.10.mlp.fc2.weight', 'text_model.encoder.layers.3.mlp.fc1.weight', 'text_model.encoder.layers.5.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.q_proj.bias', 'text_model.encoder.layers.1.self_attn.k_proj.bias', 'text_model.encoder.layers.7.self_attn.out_proj.weight', 'text_model.encoder.layers.0.mlp.fc2.weight', 'text_model.encoder.layers.11.self_attn.v_proj.weight', 'text_model.encoder.layers.1.layer_norm1.bias', 'text_model.encoder.layers.1.mlp.fc2.weight', 'text_model.encoder.layers.9.layer_norm2.bias', 'text_model.encoder.layers.9.self_attn.k_proj.bias', 'text_model.encoder.layers.11.layer_norm1.weight', 'text_model.encoder.layers.8.self_attn.out_proj.weight', 'text_model.encoder.layers.0.layer_norm1.bias', 'text_model.encoder.layers.7.mlp.fc1.weight', 'text_model.encoder.layers.0.mlp.fc1.bias', 'text_model.encoder.layers.0.layer_norm2.bias', 'text_model.encoder.layers.3.self_attn.k_proj.bias', 'text_model.encoder.layers.5.layer_norm1.weight', 'text_model.encoder.layers.3.layer_norm2.weight', 'text_model.encoder.layers.1.self_attn.q_proj.bias', 'text_model.encoder.layers.2.self_attn.out_proj.bias', 'text_model.encoder.layers.3.mlp.fc2.weight', 'text_model.encoder.layers.11.self_attn.q_proj.weight', 'text_model.final_layer_norm.bias', 'text_model.encoder.layers.6.self_attn.v_proj.weight', 'text_model.encoder.layers.0.mlp.fc2.bias', 'text_model.encoder.layers.7.layer_norm2.bias', 'text_model.encoder.layers.10.mlp.fc1.bias', 'text_model.embeddings.position_embedding.weight', 'text_model.encoder.layers.6.self_attn.out_proj.bias', 'text_model.encoder.layers.2.layer_norm1.bias', 'text_model.encoder.layers.9.mlp.fc1.weight', 'text_projection.weight', 'text_model.encoder.layers.11.layer_norm2.bias', 'text_model.encoder.layers.4.self_attn.q_proj.weight']\n", + "- This IS expected if you are initializing ClipWithProjection from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n", + "- This IS NOT expected if you are initializing ClipWithProjection from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n", + "Some weights of ClipWithProjection were not initialized from the model checkpoint at openai/clip-vit-base-patch32 and are newly initialized: ['vision_language_connector.mlp.2.weight', 'vision_language_connector.mlp.0.weight']\n", + "You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n" + ] + } + ], + "source": [ + "model = ClipWithProjection.from_pretrained(\"openai/clip-vit-base-patch32\")" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "588ef914-5be9-49e1-b68d-b899e0e74edd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "768" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.config.hidden_size" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "05d95b9e-9831-4415-860e-94793e29d210", + "metadata": {}, + "outputs": [], + "source": [ + "outputs = model(**inputs)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "185b1bff-6ffe-4cce-9255-ee7629feba54", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 512])" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "outputs[0].shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "04414a35-c7b3-4986-a79e-1d363916caa4", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "485dbbcb-06df-4926-b257-dfd1a4081d44", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'outputs' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[1], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43moutputs\u001b[49m[\u001b[38;5;241m0\u001b[39m]\n", + "\u001b[0;31mNameError\u001b[0m: name 'outputs' is not defined" + ] + } + ], + "source": [ + "outputs[0]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f983313c-8e0f-4805-af14-25bb69afd04c", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/eval.ipynb b/Experiments/eval.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..cea293198184da308ccc5806f7189ed460f13d98 --- /dev/null +++ b/Experiments/eval.ipynb @@ -0,0 +1,782 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "id": "215cfd2f-62b0-4a86-a407-777a1d32597f", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2024-01-24 15:18:49,948] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)\n" + ] + } + ], + "source": [ + "from PIL import Image\n", + "import requests\n", + "\n", + "import torch\n", + "from torch import nn\n", + "from transformers import AutoProcessor, CLIPVisionModel, CLIPVisionConfig, CLIPPreTrainedModel\n", + "from transformers.models.clip.modeling_clip import CLIPVisionModelOutput, CLIPVisionTransformer\n", + "from transformers import WhisperProcessor, WhisperForConditionalGeneration\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoTokenizer" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "2244e8f3-fcc7-4309-9d4d-fea557f89f79", + "metadata": {}, + "outputs": [], + "source": [ + "from llava_phi import LlavaPhiForCausalLM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "587883e1-3419-4b14-b16b-38fabbc8bfaa", + "metadata": {}, + "outputs": [], + "source": [ + "# model = LlavaPhiForCausalLM.from_pretrained(\"./llava-phi/checkpoints/llavaPhi-v0-3b-finetune/checkpoint-4000\")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0e27a7db-e2ab-4d65-b21d-497222e318ad", + "metadata": {}, + "outputs": [], + "source": [ + "# processor = AutoProcessor.from_pretrained(\"./llava-phi/checkpoints/llavaPhi-v0-3b-finetune/checkpoint-4000\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "663efdd8-ea21-4231-a2ae-bcc0fb47b46a", + "metadata": {}, + "outputs": [], + "source": [ + "# prompt = \"\\nUSER: What's the content of the image?\\nASSISTANT:\"\n", + "# url = \"https://www.ilankelman.org/stopsigns/australia.jpg\"\n", + "# image = Image.open(requests.get(url, stream=True).raw)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f622609f-f6a7-4ec1-ac35-c1d33d9436ca", + "metadata": {}, + "outputs": [], + "source": [ + "# # Generate\n", + "# generate_ids = model.generate(**inputs, max_length=30)\n", + "# processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "45f5ba72-2e41-4ccc-84c1-97d542ebee63", + "metadata": {}, + "outputs": [], + "source": [ + "from llava_phi.model.builder import load_pretrained_model\n", + "from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path\n", + "from llava_phi.utils import disable_torch_init\n", + "from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN\n", + "from llava_phi.conversation import conv_templates, SeparatorStyle" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b98ac5d3-5503-4430-81d1-19a4f8d6bd75", + "metadata": {}, + "outputs": [], + "source": [ + "model_path = \"checkpoints/llavaPhi-v0-3b-finetune/checkpoint-4000\"\n", + "model_name = get_model_name_from_path(model_path)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "42fd5721-75a7-475b-bd30-5ee23aeaac64", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'llavaPhi-v0-3b-finetune_checkpoint-4000'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_name" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "8c2076b5-3bfc-48fd-917b-5dfd06fc532f", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is ignored.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load llaVA-Phi MLLM!!!\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "20b86f2c01744081b537620c8780f12e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/2 [00:00\\nWhat's the content of the image? ASSISTANT:\"" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "prompt" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "a89cc181-2214-4844-b966-164a41744e54", + "metadata": {}, + "outputs": [], + "source": [ + "url = \"https://www.ilankelman.org/stopsigns/australia.jpg\"\n", + "image = Image.open(requests.get(url, stream=True).raw)\n", + "image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'].cuda()\n", + "\n", + "input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()\n", + "\n", + "stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0d519851-64d4-4cf5-b2eb-19474f9aa260", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 55])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_ids.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "1694ff36-f214-4ed3-b2f3-d3dbd0a1a25b", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + } + ], + "source": [ + "from datasets import load_dataset\n", + "audio_ds = load_dataset(\"hf-internal-testing/librispeech_asr_dummy\", \"clean\", split=\"validation\")\n", + "audio = audio_ds[0][\"audio\"]\n", + "\n", + "whisper_w_proj = WhisperWithProjection(projection_dim=512)\n", + "audio_embed = whisper_w_proj(audio)[\"input_ids\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "9c4a9fae-d6ed-4fc2-ba02-97df64cddd93", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(torch.Size([1, 33]), device(type='cpu'))" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "audio_embed.shape, audio_embed.device" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "c3fffe29-98fb-4f4b-ac51-4bdda9e46752", + "metadata": {}, + "outputs": [], + "source": [ + "input_ids = torch.concat([input_ids, audio_embed.to(\"cuda:0\")], dim=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "5dee1ec8-2db2-4f65-99e8-d34bd2735c9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 88])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_ids.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "96033b43-4f57-4f0c-bcf7-37b57ca02e47", + "metadata": {}, + "outputs": [], + "source": [ + "with torch.inference_mode():\n", + " output_ids = model.generate(\n", + " input_ids,\n", + " images=image_tensor,\n", + " do_sample=True,\n", + " temperature=0.2,\n", + " max_new_tokens=1024,\n", + " eos_token_id=tokenizer.eos_token_id, # End of sequence token\n", + " pad_token_id=tokenizer.eos_token_id, # Pad token\n", + " use_cache=True,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "741e8da5-0d18-4c11-b559-76054ce4ca3a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "is a Japanese character from the story of Jesus, who is a Chinese monk who is also known for his teachings. The story is based on the story of the story of Jesus Christ, and it is a representation of the story of Jesus and the story of Jesus Christ.\n" + ] + } + ], + "source": [ + "input_token_len = input_ids.shape[1]\n", + "n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item()\n", + "if n_diff_input_output > 0:\n", + " print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids')\n", + "outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0]\n", + "outputs = outputs.strip()\n", + "if outputs.endswith(stop_str):\n", + " outputs = outputs[:-len(stop_str)]\n", + "outputs = outputs.strip()\n", + "print(outputs)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "69d494d4-d768-4645-b4d6-5c455791b50d", + "metadata": {}, + "outputs": [], + "source": [ + "# image" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8a340856-a13f-4b18-9911-126a4ba37816", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3c56fdea-c7a1-4e67-9832-e2ed077d8704", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "89e84d39-8ed8-45db-ae82-27c156ee6dd1", + "metadata": {}, + "outputs": [], + "source": [ + "class AudioLanguageConnector:\n", + " def __init__(self, projection_dim):\n", + " model_name = \"microsoft/phi-2\"\n", + " self.phi2_tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\n", + " self.phi2_tokenizer.pad_token = self.phi2_tokenizer.eos_token\n", + " self.phi2_tokenizer.max_length = projection_dim\n", + "\n", + " def __call__(self, text):\n", + " text = f\" {text} \"\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens\n", + " \n", + "\n", + "class WhisperWithProjection:\n", + " def __init__(self, projection_dim, device):\n", + " self.device = device\n", + " self.processor = WhisperProcessor.from_pretrained(\"openai/whisper-tiny\", device_map=device)\n", + " self.model = WhisperForConditionalGeneration.from_pretrained(\"openai/whisper-tiny\", device_map=device)\n", + " self.model.config.forced_decoder_ids = None\n", + " self.audio_language_connector = AudioLanguageConnector(projection_dim)\n", + " \n", + " def __call__(self, audio):\n", + " input_features = self.processor(audio[\"array\"],\n", + " sampling_rate=audio[\"sampling_rate\"],\n", + " return_tensors=\"pt\").input_features\n", + " # generate token ids\n", + " predicted_ids = self.model.generate(input_features.to(self.device))\n", + " # decode token ids to text \n", + " transcription = self.processor.batch_decode(predicted_ids, skip_special_tokens=True)\n", + "\n", + " audio_embeddings = self.audio_language_connector(transcription)\n", + " return audio_embeddings.to(self.device)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "75e24be0-b236-4047-83ef-5c344e262476", + "metadata": {}, + "outputs": [], + "source": [ + "class MultiModalPhi2:\n", + " def __init__(self, model_path=\"checkpoints/llavaPhi-v0-3b-finetune/checkpoint-4000\",\n", + " temperature=0.2,\n", + " max_new_tokens=1024,\n", + " device=\"cuda\"):\n", + " self.temperature = temperature\n", + " self.max_new_tokens = max_new_tokens\n", + " self.device = device\n", + " model_name = get_model_name_from_path(model_path)\n", + " self.tokenizer, self.model, self.image_processor, self.context_len = load_pretrained_model(model_path, None, model_name, device_map=device)\n", + " self.whisper_w_proj = WhisperWithProjection(projection_dim=512, device=device)\n", + " \n", + " \n", + " def __call__(self, text, audio, image):\n", + " qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\\n' + text\n", + " conv = conv_templates[\"default\"].copy()\n", + " conv.append_message(conv.roles[0], qs)\n", + " conv.append_message(conv.roles[1], None)\n", + " prompt = conv.get_prompt()\n", + "\n", + " image_tensor = self.image_processor.preprocess(image, return_tensors='pt')['pixel_values'].cuda()\n", + " \n", + " input_ids = tokenizer_image_token(prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda()\n", + "\n", + " audio_embed = self.whisper_w_proj(audio)[\"input_ids\"]\n", + " \n", + " stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2\n", + "\n", + " input_ids = torch.concat([input_ids, audio_embed], dim=1)\n", + "\n", + " with torch.inference_mode():\n", + " output_ids = self.model.generate(\n", + " input_ids,\n", + " images=image_tensor,\n", + " do_sample=True,\n", + " temperature=self.temperature,\n", + " max_new_tokens=self.max_new_tokens,\n", + " eos_token_id=tokenizer.eos_token_id, # End of sequence token\n", + " pad_token_id=tokenizer.eos_token_id, # Pad token\n", + " use_cache=True,\n", + " )\n", + "\n", + " input_token_len = input_ids.shape[1]\n", + " n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item()\n", + " if n_diff_input_output > 0:\n", + " print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids')\n", + " outputs = self.tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0]\n", + " outputs = outputs.strip()\n", + " if outputs.endswith(stop_str):\n", + " outputs = outputs[:-len(stop_str)]\n", + " outputs = outputs.strip()\n", + " return outputs" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "4efdbad4-d88a-4477-a3a0-f5591cd0b172", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "The argument `trust_remote_code` is to be used with Auto classes. It has no effect here and is ignored.\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "load llaVA-Phi MLLM!!!\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "492c17cf54f34d4d9e4f288fc9e72e79", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/2 [00:00 1\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msave_pretrained\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mLlava-Phi-Checkpoint\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/transformers/modeling_utils.py:2376\u001b[0m, in \u001b[0;36mPreTrainedModel.save_pretrained\u001b[0;34m(self, save_directory, is_main_process, state_dict, save_function, push_to_hub, max_shard_size, safe_serialization, variant, token, save_peft_format, **kwargs)\u001b[0m\n\u001b[1;32m 2372\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m shard_file, shard \u001b[38;5;129;01min\u001b[39;00m shards\u001b[38;5;241m.\u001b[39mitems():\n\u001b[1;32m 2373\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m safe_serialization:\n\u001b[1;32m 2374\u001b[0m \u001b[38;5;66;03m# At some point we will need to deal better with save_function (used for TPU and other distributed\u001b[39;00m\n\u001b[1;32m 2375\u001b[0m \u001b[38;5;66;03m# joyfulness), but for now this enough.\u001b[39;00m\n\u001b[0;32m-> 2376\u001b[0m \u001b[43msafe_save_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43mshard\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mos\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjoin\u001b[49m\u001b[43m(\u001b[49m\u001b[43msave_directory\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mshard_file\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mformat\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpt\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2377\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 2378\u001b[0m save_function(shard, os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39mjoin(save_directory, shard_file))\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/safetensors/torch.py:281\u001b[0m, in \u001b[0;36msave_file\u001b[0;34m(tensors, filename, metadata)\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msave_file\u001b[39m(\n\u001b[1;32m 251\u001b[0m tensors: Dict[\u001b[38;5;28mstr\u001b[39m, torch\u001b[38;5;241m.\u001b[39mTensor],\n\u001b[1;32m 252\u001b[0m filename: Union[\u001b[38;5;28mstr\u001b[39m, os\u001b[38;5;241m.\u001b[39mPathLike],\n\u001b[1;32m 253\u001b[0m metadata: Optional[Dict[\u001b[38;5;28mstr\u001b[39m, \u001b[38;5;28mstr\u001b[39m]] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 254\u001b[0m ):\n\u001b[1;32m 255\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 256\u001b[0m \u001b[38;5;124;03m Saves a dictionary of tensors into raw bytes in safetensors format.\u001b[39;00m\n\u001b[1;32m 257\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 279\u001b[0m \u001b[38;5;124;03m ```\u001b[39;00m\n\u001b[1;32m 280\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 281\u001b[0m \u001b[43mserialize_file\u001b[49m\u001b[43m(\u001b[49m\u001b[43m_flatten\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmetadata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmetadata\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "model.save_pretrained(\"Llava-Phi-Checkpoint\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "fa0bec34-a148-4340-a30c-6f09dd5e71ca", + "metadata": {}, + "outputs": [], + "source": [ + "model.push_to_hub(\"RaviNaik/Llava-Phi2\")" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "382f74b0-2967-408a-badc-a90918810d74", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "CommitInfo(commit_url='https://huggingface.co/RaviNaik/Llava-Phi2/commit/fa8f7240058241243f6bdc3d6ab44bb691f76e39', commit_message='Upload tokenizer', commit_description='', oid='fa8f7240058241243f6bdc3d6ab44bb691f76e39', pr_url=None, pr_revision=None, pr_num=None)" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tokenizer.push_to_hub(\"RaviNaik/Llava-Phi2\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b851459b-d3ac-4fb8-99b6-17a648adc41f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/instruct_150k_data.ipynb b/Experiments/instruct_150k_data.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..8af4e590a77bf7e3b4bdd09a2e3af6b8cb380a76 --- /dev/null +++ b/Experiments/instruct_150k_data.ipynb @@ -0,0 +1,591 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "8047332f-86d6-4812-b271-98786ecd470f", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5aa32b98-e5f2-4ebd-abb6-4f60f1f6f997", + "metadata": {}, + "outputs": [], + "source": [ + "# dataset = load_dataset(\"liuhaotian/LLaVA-Instruct-150K\", split=\"train\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c82d99ca-9ca6-4643-9611-9ec9996608d2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2024-01-19 17:09:33-- https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K/resolve/main/llava_instruct_150k.json\n", + "Resolving huggingface.co (huggingface.co)... 13.225.131.94, 13.225.131.6, 13.225.131.93, ...\n", + "Connecting to huggingface.co (huggingface.co)|13.225.131.94|:443... connected.\n", + "HTTP request sent, awaiting response... 302 Found\n", + "Location: https://cdn-lfs.huggingface.co/repos/4d/41/4d41ea1e2709f0e68e9e361e4218192b9620c5a3f2cb8055bc625942b6cd3039/6b68bc5ca2bfd8a71119af0e8454929668ccda6a334955ccc95d114fc8d082fa?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llava_instruct_150k.json%3B+filename%3D%22llava_instruct_150k.json%22%3B&response-content-type=application%2Fjson&Expires=1705923573&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwNTkyMzU3M319LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy80ZC80MS80ZDQxZWExZTI3MDlmMGU2OGU5ZTM2MWU0MjE4MTkyYjk2MjBjNWEzZjJjYjgwNTViYzYyNTk0MmI2Y2QzMDM5LzZiNjhiYzVjYTJiZmQ4YTcxMTE5YWYwZTg0NTQ5Mjk2NjhjY2RhNmEzMzQ5NTVjY2M5NWQxMTRmYzhkMDgyZmE%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qJnJlc3BvbnNlLWNvbnRlbnQtdHlwZT0qIn1dfQ__&Signature=f59rV0KoQ-7MJrgwl8uYXAJe5XqFuGBU2ukhEcGTXx965zA3Qv5N7Rv6uDoeeqaow7SamaAzy%7E8Ley7-YeLXeJ43ui%7EdzUpQROAhxfxS8IpSQ7IN4eCpgcBCZYfGMOaB1MzmtmTziBZfy9ElgeHU%7EEe7ixiiNnPb2Fm66N-GkKzCIqmmzUBXxz6QBc8z7lFrccpct%7EnqFbZN7rFzo3%7EClPUM6%7EZ1C5RQ2v3pgID9wE0YG82xlaxOaJg6XOSuDpDHXDuY3fKwphEZENwEVJHPX%7EW9yTldb4BNjxY%7EEwCT9KHqLMH-VVXLw5rnuU9OdWYOntEOuTFg-B2Ru3c-EQlNMA__&Key-Pair-Id=KVTP0A1DKRTAX [following]\n", + "--2024-01-19 17:09:33-- https://cdn-lfs.huggingface.co/repos/4d/41/4d41ea1e2709f0e68e9e361e4218192b9620c5a3f2cb8055bc625942b6cd3039/6b68bc5ca2bfd8a71119af0e8454929668ccda6a334955ccc95d114fc8d082fa?response-content-disposition=attachment%3B+filename*%3DUTF-8%27%27llava_instruct_150k.json%3B+filename%3D%22llava_instruct_150k.json%22%3B&response-content-type=application%2Fjson&Expires=1705923573&Policy=eyJTdGF0ZW1lbnQiOlt7IkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTcwNTkyMzU3M319LCJSZXNvdXJjZSI6Imh0dHBzOi8vY2RuLWxmcy5odWdnaW5nZmFjZS5jby9yZXBvcy80ZC80MS80ZDQxZWExZTI3MDlmMGU2OGU5ZTM2MWU0MjE4MTkyYjk2MjBjNWEzZjJjYjgwNTViYzYyNTk0MmI2Y2QzMDM5LzZiNjhiYzVjYTJiZmQ4YTcxMTE5YWYwZTg0NTQ5Mjk2NjhjY2RhNmEzMzQ5NTVjY2M5NWQxMTRmYzhkMDgyZmE%7EcmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj0qJnJlc3BvbnNlLWNvbnRlbnQtdHlwZT0qIn1dfQ__&Signature=f59rV0KoQ-7MJrgwl8uYXAJe5XqFuGBU2ukhEcGTXx965zA3Qv5N7Rv6uDoeeqaow7SamaAzy%7E8Ley7-YeLXeJ43ui%7EdzUpQROAhxfxS8IpSQ7IN4eCpgcBCZYfGMOaB1MzmtmTziBZfy9ElgeHU%7EEe7ixiiNnPb2Fm66N-GkKzCIqmmzUBXxz6QBc8z7lFrccpct%7EnqFbZN7rFzo3%7EClPUM6%7EZ1C5RQ2v3pgID9wE0YG82xlaxOaJg6XOSuDpDHXDuY3fKwphEZENwEVJHPX%7EW9yTldb4BNjxY%7EEwCT9KHqLMH-VVXLw5rnuU9OdWYOntEOuTFg-B2Ru3c-EQlNMA__&Key-Pair-Id=KVTP0A1DKRTAX\n", + "Resolving cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)... 54.230.61.40, 54.230.61.44, 54.230.61.102, ...\n", + "Connecting to cdn-lfs.huggingface.co (cdn-lfs.huggingface.co)|54.230.61.40|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 228941895 (218M) [application/json]\n", + "Saving to: ‘llava_instruct_150k.json’\n", + "\n", + "llava_instruct_150k 100%[===================>] 218.34M 14.8MB/s in 15s \n", + "\n", + "2024-01-19 17:09:49 (15.0 MB/s) - ‘llava_instruct_150k.json’ saved [228941895/228941895]\n", + "\n" + ] + } + ], + "source": [ + "!wget -c https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K/resolve/main/llava_instruct_150k.json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d70a4fb6-7e90-4cab-9fe3-2f1f47669fd1", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import Dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "4e158361-58b0-4205-9da5-4944eee72509", + "metadata": {}, + "outputs": [], + "source": [ + "ds = Dataset.from_json(\"llava_instruct_150k.json\", split=\"train\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "0c7e48fe-b38b-4e78-bdc7-6944fd68574b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset({\n", + " features: ['id', 'image', 'conversations'],\n", + " num_rows: 157712\n", + "})" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "f0c1305c-d79c-4762-bfe2-137c8069300d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '000000033471',\n", + " 'image': '000000033471.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': '\\nWhat are the colors of the bus in the image?'},\n", + " {'from': 'gpt', 'value': 'The bus in the image is white and red.'},\n", + " {'from': 'human',\n", + " 'value': 'What feature can be seen on the back of the bus?'},\n", + " {'from': 'gpt', 'value': 'The back of the bus features an advertisement.'},\n", + " {'from': 'human',\n", + " 'value': 'Is the bus driving down the street or pulled off to the side?'},\n", + " {'from': 'gpt',\n", + " 'value': 'The bus is driving down the street, which is crowded with people and other vehicles.'}]}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "5a92d586-af5a-4a94-8b46-1570cb04bbfe", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '000000033471',\n", + " 'image': '000000033471.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': '\\nWhat are the colors of the bus in the image?'},\n", + " {'from': 'gpt', 'value': 'The bus in the image is white and red.'},\n", + " {'from': 'human',\n", + " 'value': 'What feature can be seen on the back of the bus?'},\n", + " {'from': 'gpt', 'value': 'The back of the bus features an advertisement.'},\n", + " {'from': 'human',\n", + " 'value': 'Is the bus driving down the street or pulled off to the side?'},\n", + " {'from': 'gpt',\n", + " 'value': 'The bus is driving down the street, which is crowded with people and other vehicles.'}]}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ds[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "019d6657-0862-456f-a4d4-fd8cb9550abd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "157712" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(ds)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d6ab0727-a569-4dd1-a5da-8b45ba41ef08", + "metadata": {}, + "outputs": [], + "source": [ + "df = ds.to_pandas()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "68591d5b-dfd9-482b-afe4-589bcc111efb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(81479,)" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.image.unique().shape" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "998c8fe8-2dff-4c18-8e08-05a596d0506b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2024-01-19 18:56:07-- http://images.cocodataset.org/zips/train2014.zip\n", + "Resolving images.cocodataset.org (images.cocodataset.org)... 16.182.65.17, 52.216.208.17, 52.217.227.193, ...\n", + "Connecting to images.cocodataset.org (images.cocodataset.org)|16.182.65.17|:80... connected.\n", + "HTTP request sent, awaiting response... 416 Requested Range Not Satisfiable\n", + "\n", + " The file is already fully retrieved; nothing to do.\n", + "\n" + ] + } + ], + "source": [ + "!wget -c http://images.cocodataset.org/zips/train2014.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "5ed46437-c059-4283-8619-9d1dd9546509", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# !unzip train2014.zip" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "49bfa1a0-1633-48fc-952c-c07aacab9544", + "metadata": {}, + "outputs": [], + "source": [ + "ds_stream = ds.to_iterable_dataset()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "b00259e9-87c1-4b86-b43c-96eab4f16c3e", + "metadata": {}, + "outputs": [], + "source": [ + "from PIL import Image" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "0b02934a-6842-46d3-a1fe-3fd3d104f574", + "metadata": {}, + "outputs": [], + "source": [ + "def get_image(image_path):\n", + " image_path = f\"train2014/COCO_train2014_{image_path}\"\n", + " img = Image.open(image_path)\n", + " return img" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "c370617f-cbe8-4809-9b76-6fe071940a13", + "metadata": {}, + "outputs": [], + "source": [ + "chat_template = \"\"\"<|im_start|>system\n", + "You are a helpful assistant who always respond to user queries. For context you can use image data enclosed between and tags and you can use audio data enclosed between and tags<|im_end|>\n", + "user\n", + "{prompt}<|im_end|>\n", + "<|im_start|>assistant\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "d000e78c-737b-45c5-8f7a-7ec933c894ac", + "metadata": {}, + "outputs": [], + "source": [ + "from PIL import Image" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "8252cd0e-8e57-4ec4-a557-9a89d3502aa8", + "metadata": {}, + "outputs": [], + "source": [ + "img = Image.open(\"train2014/COCO_train2014_000000334872.jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "7a2a4dc2-4b7a-4e18-adcb-ac112c12a4f0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "img" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "60745c20-7ab3-4e5f-8225-9319fe5e786c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7f08eb8b-f02f-4556-8019-7430af46d06c", + "metadata": {}, + "outputs": [], + "source": [ + "{'id': '000000334872',\n", + " 'image': '000000334872.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': '\\nAre the people in the image skiing downhill or cross-country skiing?'},\n", + " {'from': 'gpt',\n", + " 'value': 'The people in the image are cross-country skiing in the woods, as they are skiing on a trail rather than a steep slope.'},\n", + " {'from': 'human', 'value': 'How many people are in the image?'},\n", + " {'from': 'gpt',\n", + " 'value': 'There are two people in the image, both on skis in the snow.'},\n", + " {'from': 'human', 'value': 'What kind of environment are they skiing in?'},\n", + " {'from': 'gpt',\n", + " 'value': 'They are skiing in a wooded environment, following a trail through the trees while surrounded by snow.'},\n", + " {'from': 'human',\n", + " 'value': 'Do the skiers have any additional gear with them besides their skis and poles?'},\n", + " {'from': 'gpt',\n", + " 'value': 'Yes, the two male skiers are carrying backpacks while they ski through the woods. The backpacks might contain essentials for their skiing adventure, such as food, water, extra clothing, or safety equipment.'}]}" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "4db5a263-fbc1-4273-b190-6f0eccfcb25b", + "metadata": {}, + "outputs": [], + "source": [ + "# ChatML format\n", + "templates = {\n", + " \"assistant\": \"<|im_start|>assistant\\n{msg}<|im_end|>\", # message by assistant\n", + " \"user\": \"<|im_start|>user\\n{msg}<|im_end|>\" # message by user\n", + "}\n", + "def get_chatml_text(conversations):\n", + " chatml_text = \"\"\n", + " for conversation in conversations:\n", + " role = conversation[\"from\"]\n", + " role = \"user\" if role == \"human\" else \"assistant\"\n", + " content = conversation[\"value\"]\n", + "\n", + " formatted_text = templates[role].format(msg=content)\n", + " chatml_text += formatted_text + \"\\n\"\n", + " return chatml_text" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "b1f13d00-2c33-4d76-9925-4977fd074a60", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'<|im_start|>user\\n\\nWhat are the colors of the bus in the image?<|im_end|>\\n<|im_start|>assistant\\nThe bus in the image is white and red.<|im_end|>\\n<|im_start|>user\\nWhat feature can be seen on the back of the bus?<|im_end|>\\n<|im_start|>assistant\\nThe back of the bus features an advertisement.<|im_end|>\\n<|im_start|>user\\nIs the bus driving down the street or pulled off to the side?<|im_end|>\\n<|im_start|>assistant\\nThe bus is driving down the street, which is crowded with people and other vehicles.<|im_end|>\\n'" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_chatml_text(ds[0][\"conversations\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "6195c324-9ccf-4aa5-9257-d1b882178e01", + "metadata": {}, + "outputs": [], + "source": [ + "def instruct_data_generator():\n", + " for sample in ds_stream:\n", + " image_path = sample[\"image\"]\n", + " conversations = sample[\"conversations\"]\n", + " \n", + " image = get_image(image_path)\n", + " text = get_chatml_text(conversations)\n", + " yield {\"text\": text, \"image\": image}" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "id": "30325ee4-70e3-4e1b-82be-dbffc6b233cd", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import IterableDataset" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "76f5f8e6-aefc-4289-924e-162ae94abe92", + "metadata": {}, + "outputs": [], + "source": [ + "instruct_ds = IterableDataset.from_generator(generator=instruct_data_generator)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "cba24c67-5e97-45d0-a177-b0f810657656", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'text': '<|im_start|>user\\n\\nWhat are the colors of the bus in the image?<|im_end|>\\n<|im_start|>assistant\\nThe bus in the image is white and red.<|im_end|>\\n<|im_start|>user\\nWhat feature can be seen on the back of the bus?<|im_end|>\\n<|im_start|>assistant\\nThe back of the bus features an advertisement.<|im_end|>\\n<|im_start|>user\\nIs the bus driving down the street or pulled off to the side?<|im_end|>\\n<|im_start|>assistant\\nThe bus is driving down the street, which is crowded with people and other vehicles.<|im_end|>\\n', 'image': }\n" + ] + } + ], + "source": [ + "for sample in instruct_ds:\n", + " print(sample)\n", + " break" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "b40567bb-a52c-4cb2-b5f9-83e402f5b4ae", + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "with open(\"llava_v1_5_mix665k.json\", \"rb\") as f:\n", + " data = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "02c22086-29d9-4c2c-85df-e9948704a791", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '000000033471',\n", + " 'image': 'coco/train2017/000000033471.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': '\\nWhat are the colors of the bus in the image?'},\n", + " {'from': 'gpt', 'value': 'The bus in the image is white and red.'},\n", + " {'from': 'human',\n", + " 'value': 'What feature can be seen on the back of the bus?'},\n", + " {'from': 'gpt', 'value': 'The back of the bus features an advertisement.'},\n", + " {'from': 'human',\n", + " 'value': 'Is the bus driving down the street or pulled off to the side?'},\n", + " {'from': 'gpt',\n", + " 'value': 'The bus is driving down the street, which is crowded with people and other vehicles.'}]}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "3cd97403-8508-47ec-8377-2c51ce3750e5", + "metadata": {}, + "outputs": [], + "source": [ + "import os" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2d46cb56-9441-4c84-af71-5f66f7b58dca", + "metadata": {}, + "outputs": [], + "source": [ + "for image_file in os.listdir(\"./train2014/\"):\n", + " os.rename(f\"./train2014/{image_file}\", f\"./train2014/{image_file.split('_')[2]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "98d8c2c9-4184-4169-b57f-e3fccdc07924", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'000000472880.jpg'" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "61c47758-87b4-4cef-b48e-d9d0490d296f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/instruct_data.py b/Experiments/instruct_data.py new file mode 100644 index 0000000000000000000000000000000000000000..ad781ab430b708d0421c6047ae72898681b0040e --- /dev/null +++ b/Experiments/instruct_data.py @@ -0,0 +1,39 @@ +from datasets import Dataset, IterableDataset +from PIL import Image + +# ChatML format +templates = { + "assistant": "<|im_start|>assistant\n{msg}<|im_end|>", # message by assistant + "user": "<|im_start|>user\n{msg}<|im_end|>" # message by user +} + +ds = Dataset.from_json("llava_instruct_150k.json", split="train") +ds_stream = ds.to_iterable_dataset() + + +def get_image(image_path): + image_path = f"train2014/COCO_train2014_{image_path}" + img = Image.open(image_path) + return img + +def get_chatml_text(conversations): + chatml_text = "" + for conversation in conversations: + role = conversation["from"] + role = "user" if role == "human" else "assistant" + content = conversation["value"] + + formatted_text = templates[role].format(msg=content) + chatml_text += formatted_text + "\n" + return chatml_text + +def instruct_data_generator(): + for sample in ds_stream: + image_path = sample["image"] + conversations = sample["conversations"] + + image = get_image(image_path) + text = get_chatml_text(conversations) + yield {"text": text, "image": image} + +instruct_ds = IterableDataset.from_generator(generator=instruct_data_generator) \ No newline at end of file diff --git a/Experiments/llava_exp.ipynb b/Experiments/llava_exp.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..c2b38c972b162aad3d1665cdc79b03b276c880b7 --- /dev/null +++ b/Experiments/llava_exp.ipynb @@ -0,0 +1,145 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "99576983-f881-47c8-8b5e-c6f561a93e71", + "metadata": {}, + "outputs": [], + "source": [ + "import transformers" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "58ba19f2-4b91-4f90-a33d-4c1ed17e202a", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import LlavaForConditionalGeneration, LlavaConfig, CLIPVisionConfig, PhiConfig\n", + "\n", + "# Initializing a CLIP-vision config\n", + "vision_config = CLIPVisionConfig()\n", + "\n", + "# Initializing a Llama config\n", + "text_config = PhiConfig()\n", + "\n", + "# Initializing a Llava llava-1.5-7b style configuration\n", + "configuration = LlavaConfig(vision_config, text_config)\n", + "\n", + "# Initializing a model from the llava-1.5-7b style configuration\n", + "model = LlavaForConditionalGeneration(configuration)\n", + "\n", + "# Accessing the model configuration\n", + "configuration = model.config" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a806a07a-fe72-45a3-8ceb-8e942c6c845d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LlavaConfig {\n", + " \"ignore_index\": -100,\n", + " \"image_token_index\": 32000,\n", + " \"model_type\": \"llava\",\n", + " \"projector_hidden_act\": \"gelu\",\n", + " \"text_config\": {\n", + " \"embd_pdrop\": 0.0,\n", + " \"hidden_act\": \"gelu_new\",\n", + " \"hidden_size\": 2048,\n", + " \"intermediate_size\": 8192,\n", + " \"layer_norm_eps\": 1e-05,\n", + " \"model_type\": \"phi\",\n", + " \"num_hidden_layers\": 24,\n", + " \"partial_rotary_factor\": 0.5,\n", + " \"qk_layernorm\": false,\n", + " \"resid_pdrop\": 0.0,\n", + " \"vocab_size\": 51200\n", + " },\n", + " \"transformers_version\": \"4.36.2\",\n", + " \"vision_config\": {\n", + " \"hidden_size\": 768,\n", + " \"image_size\": 224,\n", + " \"intermediate_size\": 3072,\n", + " \"model_type\": \"clip_vision_model\",\n", + " \"num_attention_heads\": 12,\n", + " \"num_hidden_layers\": 12,\n", + " \"patch_size\": 32,\n", + " \"projection_dim\": 512\n", + " },\n", + " \"vision_feature_layer\": -2,\n", + " \"vision_feature_select_strategy\": \"default\",\n", + " \"vocab_size\": 32000\n", + "}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.config" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "79efbc6b-f005-4a5c-82a1-112fa37f1904", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cloning into 'llava-phi'...\n", + "remote: Enumerating objects: 151, done.\u001b[K\n", + "remote: Counting objects: 100% (151/151), done.\u001b[K\n", + "remote: Compressing objects: 100% (116/116), done.\u001b[K\n", + "remote: Total 151 (delta 36), reused 133 (delta 25), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (151/151), 333.89 KiB | 112.00 KiB/s, done.\n", + "Resolving deltas: 100% (36/36), done.\n" + ] + } + ], + "source": [ + "!git clone https://github.com/zhuyiche/llava-phi.git" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cf827184-f334-4d86-ace1-fe9c92f84d66", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/multimodal_exp.ipynb b/Experiments/multimodal_exp.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2c97e877071a619e54aa2838501e0b604e590373 --- /dev/null +++ b/Experiments/multimodal_exp.ipynb @@ -0,0 +1,362 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 23, + "id": "d4bed9ef-4bff-4d61-a4f9-a585f377f136", + "metadata": {}, + "outputs": [], + "source": [ + "from PIL import Image\n", + "import requests\n", + "\n", + "import torch\n", + "from torch import nn\n", + "from transformers import AutoProcessor, CLIPVisionModel, CLIPVisionConfig, CLIPPreTrainedModel\n", + "from transformers.models.clip.modeling_clip import CLIPVisionModelOutput, CLIPVisionTransformer\n", + "from transformers import WhisperProcessor, WhisperForConditionalGeneration\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoTokenizer\n", + "from typing import Optional, Union, Tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "952314f0-ee9d-45e7-85b8-1e3e44c1a2fd", + "metadata": {}, + "outputs": [], + "source": [ + "class VisionLanguageConnector(nn.Module):\n", + " def __init__(self, hidden_size, projection_dim):\n", + " super().__init__()\n", + " self.mlp = nn.Sequential(\n", + " nn.Linear(hidden_size, hidden_size, bias=False),\n", + " nn.GELU(),\n", + " nn.Linear(hidden_size, projection_dim, bias=False)\n", + " )\n", + "\n", + " def forward(self, x):\n", + " return self.mlp(x)\n", + " \n", + "class ClipWithProjection():\n", + " config_class = CLIPVisionConfig\n", + " main_input_name = \"pixel_values\"\n", + "\n", + " def __init__(self, hidden_size, projection_dim):\n", + " super().__init__()\n", + " \n", + " self.processor = AutoProcessor.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + " self.vision_model = CLIPVisionModel.from_pretrained(\"openai/clip-vit-base-patch32\")\n", + " self.vision_language_connector = VisionLanguageConnector(hidden_size, projection_dim)\n", + "\n", + " def forward(\n", + " self,\n", + " image = None,\n", + " output_attentions: Optional[bool] = None,\n", + " output_hidden_states: Optional[bool] = None,\n", + " return_dict: Optional[bool] = None,\n", + " ) -> Union[Tuple, CLIPVisionModelOutput]:\n", + " \n", + " pixel_values = self.processor(images=image, return_tensors=\"pt\")[\"pixel_values\"]\n", + " vision_outputs = self.vision_model(\n", + " pixel_values=pixel_values,\n", + " output_attentions=output_attentions,\n", + " output_hidden_states=output_hidden_states,\n", + " return_dict=return_dict,\n", + " )\n", + "\n", + " pooled_output = vision_outputs[1] # pooled_output\n", + "\n", + " image_embeds = self.vision_language_connector(pooled_output)\n", + "\n", + " return CLIPVisionModelOutput(\n", + " image_embeds=image_embeds,\n", + " last_hidden_state=vision_outputs.last_hidden_state,\n", + " hidden_states=vision_outputs.hidden_states,\n", + " attentions=vision_outputs.attentions,\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "bd2889fe-be85-44a3-afe8-65b47f7a93c3", + "metadata": {}, + "outputs": [], + "source": [ + "url = \"http://images.cocodataset.org/val2017/000000039769.jpg\"\n", + "image = Image.open(requests.get(url, stream=True).raw)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "17c72699-fe98-4b96-b63c-5c8ab7c1a65f", + "metadata": {}, + "outputs": [], + "source": [ + "# model = ClipWithProjection(768, 512)\n", + "# model.forward(image)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "70806156-38a9-45a2-bf9f-e72047a0173f", + "metadata": {}, + "outputs": [], + "source": [ + "class AudioLanguageConnector:\n", + " def __init__(self, projection_dim):\n", + " model_name = \"microsoft/phi-2\"\n", + " self.phi2_tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\n", + " self.phi2_tokenizer.pad_token = self.phi2_tokenizer.eos_token\n", + " self.phi2_tokenizer.max_length = projection_dim\n", + "\n", + " def __call__(self, text):\n", + " text = f\" {text} \"\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens\n", + " \n", + "\n", + "class WhisperWithProjection:\n", + " def __init__(self, projection_dim):\n", + " self.processor = WhisperProcessor.from_pretrained(\"openai/whisper-tiny\")\n", + " self.model = WhisperForConditionalGeneration.from_pretrained(\"openai/whisper-tiny\")\n", + " self.model.config.forced_decoder_ids = None\n", + " self.audio_language_connector = AudioLanguageConnector(projection_dim)\n", + " \n", + " def forward(self, audio):\n", + " input_features = self.processor(audio[\"array\"],\n", + " sampling_rate=audio[\"sampling_rate\"],\n", + " return_tensors=\"pt\").input_features\n", + " # generate token ids\n", + " predicted_ids = self.model.generate(input_features)\n", + " # decode token ids to text \n", + " transcription = self.processor.batch_decode(predicted_ids, skip_special_tokens=True)\n", + "\n", + " audio_embeddings = self.audio_language_connector(transcription)\n", + " return audio_embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "79cc4d98-498b-4042-bd71-143b2477733d", + "metadata": {}, + "outputs": [], + "source": [ + "class TextModality:\n", + " def __init__(self, projection_dim):\n", + " model_name = \"microsoft/phi-2\"\n", + " self.phi2_tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\n", + " self.phi2_tokenizer.pad_token = self.phi2_tokenizer.eos_token\n", + " self.phi2_tokenizer.max_length = projection_dim\n", + "\n", + "\n", + " def __call__(self, text):\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "ba4c4772-923f-48e8-a4af-b7d9c192dd4b", + "metadata": {}, + "outputs": [], + "source": [ + "class MultiModalPhi2:\n", + " def __init__(self):\n", + " self.text_modality = TextModality(projection_dim=768)\n", + " self.whisper_w_proj = WhisperWithProjection(projection_dim=512)\n", + " self.clip_w_proj = ClipWithProjection(hidden_size=768, projection_dim=768)\n", + " self.llm = self.load_llm()\n", + "\n", + " def load_llm(self):\n", + " model_name = \"microsoft/phi-2\"\n", + " \n", + " bnb_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_quant_type=\"nf4\",\n", + " bnb_4bit_compute_dtype=torch.float16)\n", + " \n", + " model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " quantization_config=bnb_config,\n", + " trust_remote_code=True,\n", + " device_map=\"cuda:0\"\n", + " )\n", + " model.config.use_cache = False\n", + " return model\n", + "\n", + " def forward(self, audio, image, text):\n", + " if text is not None:\n", + " text_embed = self.text_modality(text)[\"input_ids\"]\n", + " if audio is not None:\n", + " audio_embed = self.whisper_w_proj.forward(audio)[\"input_ids\"]\n", + " if image is not None:\n", + " image_embed = self.clip_w_proj.forward(image)[0]\n", + " print(text_embed.shape, text_embed.dtype)\n", + " print(audio_embed.shape, audio_embed.dtype)\n", + " print(image_embed.shape, image_embed.dtype)\n", + " \n", + " inputs = torch.concat([text_embed, audio_embed, image_embed], dim=1)\n", + " print(inputs.shape, inputs.dtype)\n", + " outputs = self.llm(inputs)\n", + "\n", + " return outputs \n", + " \n", + "\n", + " def generate(self, audio, text):\n", + " text_embeddings = self.text_modality(text)\n", + " audio_embeddings = self.whisper_w_proj.forward(audio)\n", + " inputs = torch.concat([text_embed[\"input_ids\"], audio_embed[\"input_ids\"]], dim=1)\n", + " \n", + " outputs = self.llm.generate(inputs, max_length=200)\n", + " text = self.text_modality.phi2_tokenizer.batch_decode(outputs)[0]\n", + " print(text)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "7ca694eb-8009-4eb9-9a4c-eac406ab9584", + "metadata": {}, + "outputs": [], + "source": [ + "from datasets import load_dataset\n", + "audio_ds = load_dataset(\"hf-internal-testing/librispeech_asr_dummy\", \"clean\", split=\"validation\")\n", + "audio = audio_ds[0][\"audio\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "37be28c5-4cc3-4471-b394-032c7602accc", + "metadata": {}, + "outputs": [], + "source": [ + "text = \"explain about the audio\"" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "id": "c0705114-1670-4937-bc3e-3660e5a5d2c5", + "metadata": {}, + "outputs": [], + "source": [ + "# image" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "0d7e5b49-b4bd-477c-87b8-91ef70857677", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "733dc7b2208b4853a89aea49bff9a55c", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/2 [00:00 1\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mforward\u001b[49m\u001b[43m(\u001b[49m\u001b[43maudio\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mimage\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtext\u001b[49m\u001b[43m)\u001b[49m\n", + "Cell \u001b[0;32mIn[77], line 38\u001b[0m, in \u001b[0;36mMultiModalPhi2.forward\u001b[0;34m(self, audio, image, text)\u001b[0m\n\u001b[1;32m 36\u001b[0m inputs \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mconcat([text_embed, audio_embed, image_embed], dim\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28mprint\u001b[39m(inputs\u001b[38;5;241m.\u001b[39mshape, inputs\u001b[38;5;241m.\u001b[39mdtype)\n\u001b[0;32m---> 38\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mllm\u001b[49m\u001b[43m(\u001b[49m\u001b[43minputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 40\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m outputs\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/accelerate/hooks.py:165\u001b[0m, in \u001b[0;36madd_hook_to_module..new_forward\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 163\u001b[0m output \u001b[38;5;241m=\u001b[39m old_forward(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 165\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mold_forward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m module\u001b[38;5;241m.\u001b[39m_hf_hook\u001b[38;5;241m.\u001b[39mpost_forward(module, output)\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/85d00b03fee509307549d823fdd095473ba5197c/modeling_phi.py:1049\u001b[0m, in \u001b[0;36mPhiForCausalLM.forward\u001b[0;34m(self, input_ids, attention_mask, position_ids, past_key_values, inputs_embeds, labels, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 1046\u001b[0m return_dict \u001b[38;5;241m=\u001b[39m return_dict \u001b[38;5;28;01mif\u001b[39;00m return_dict \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39muse_return_dict\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;66;03m# decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)\u001b[39;00m\n\u001b[0;32m-> 1049\u001b[0m outputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1050\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1051\u001b[0m \u001b[43m \u001b[49m\u001b[43mattention_mask\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_mask\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1052\u001b[0m \u001b[43m \u001b[49m\u001b[43mposition_ids\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mposition_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1053\u001b[0m \u001b[43m \u001b[49m\u001b[43mpast_key_values\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpast_key_values\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1054\u001b[0m \u001b[43m \u001b[49m\u001b[43minputs_embeds\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs_embeds\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1055\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_cache\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43muse_cache\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1056\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_attentions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_attentions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1057\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_hidden_states\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_hidden_states\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1058\u001b[0m \u001b[43m \u001b[49m\u001b[43mreturn_dict\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreturn_dict\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1059\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1061\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m outputs[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m 1062\u001b[0m logits \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mlm_head(hidden_states)\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/accelerate/hooks.py:165\u001b[0m, in \u001b[0;36madd_hook_to_module..new_forward\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 163\u001b[0m output \u001b[38;5;241m=\u001b[39m old_forward(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 165\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mold_forward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m module\u001b[38;5;241m.\u001b[39m_hf_hook\u001b[38;5;241m.\u001b[39mpost_forward(module, output)\n", + "File \u001b[0;32m~/.cache/huggingface/modules/transformers_modules/microsoft/phi-2/85d00b03fee509307549d823fdd095473ba5197c/modeling_phi.py:893\u001b[0m, in \u001b[0;36mPhiModel.forward\u001b[0;34m(self, input_ids, attention_mask, position_ids, past_key_values, inputs_embeds, use_cache, output_attentions, output_hidden_states, return_dict)\u001b[0m\n\u001b[1;32m 890\u001b[0m position_ids \u001b[38;5;241m=\u001b[39m position_ids\u001b[38;5;241m.\u001b[39munsqueeze(\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 892\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inputs_embeds \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 893\u001b[0m inputs_embeds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43membed_tokens\u001b[49m\u001b[43m(\u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 895\u001b[0m inputs_embeds \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39membed_dropout(inputs_embeds)\n\u001b[1;32m 897\u001b[0m \u001b[38;5;66;03m# Attention mask.\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1518\u001b[0m, in \u001b[0;36mModule._wrapped_call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1516\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_compiled_call_impl(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[1;32m 1517\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 1518\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_call_impl\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/module.py:1527\u001b[0m, in \u001b[0;36mModule._call_impl\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1522\u001b[0m \u001b[38;5;66;03m# If we don't have any hooks, we want to skip the rest of the logic in\u001b[39;00m\n\u001b[1;32m 1523\u001b[0m \u001b[38;5;66;03m# this function, and just call forward.\u001b[39;00m\n\u001b[1;32m 1524\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_forward_pre_hooks\n\u001b[1;32m 1525\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_backward_pre_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_backward_hooks\n\u001b[1;32m 1526\u001b[0m \u001b[38;5;129;01mor\u001b[39;00m _global_forward_hooks \u001b[38;5;129;01mor\u001b[39;00m _global_forward_pre_hooks):\n\u001b[0;32m-> 1527\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mforward_call\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1529\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1530\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/accelerate/hooks.py:165\u001b[0m, in \u001b[0;36madd_hook_to_module..new_forward\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 163\u001b[0m output \u001b[38;5;241m=\u001b[39m old_forward(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 164\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 165\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[43mold_forward\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m module\u001b[38;5;241m.\u001b[39m_hf_hook\u001b[38;5;241m.\u001b[39mpost_forward(module, output)\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/modules/sparse.py:162\u001b[0m, in \u001b[0;36mEmbedding.forward\u001b[0;34m(self, input)\u001b[0m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mforward\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;28minput\u001b[39m: Tensor) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Tensor:\n\u001b[0;32m--> 162\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mF\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43membedding\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 163\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpadding_idx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_norm\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 164\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnorm_type\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mscale_grad_by_freq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msparse\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/torchenv/lib/python3.10/site-packages/torch/nn/functional.py:2233\u001b[0m, in \u001b[0;36membedding\u001b[0;34m(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)\u001b[0m\n\u001b[1;32m 2227\u001b[0m \u001b[38;5;66;03m# Note [embedding_renorm set_grad_enabled]\u001b[39;00m\n\u001b[1;32m 2228\u001b[0m \u001b[38;5;66;03m# XXX: equivalent to\u001b[39;00m\n\u001b[1;32m 2229\u001b[0m \u001b[38;5;66;03m# with torch.no_grad():\u001b[39;00m\n\u001b[1;32m 2230\u001b[0m \u001b[38;5;66;03m# torch.embedding_renorm_\u001b[39;00m\n\u001b[1;32m 2231\u001b[0m \u001b[38;5;66;03m# remove once script supports set_grad_enabled\u001b[39;00m\n\u001b[1;32m 2232\u001b[0m _no_grad_embedding_renorm_(weight, \u001b[38;5;28minput\u001b[39m, max_norm, norm_type)\n\u001b[0;32m-> 2233\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43membedding\u001b[49m\u001b[43m(\u001b[49m\u001b[43mweight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpadding_idx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mscale_grad_by_freq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msparse\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mRuntimeError\u001b[0m: Expected tensor for argument #1 'indices' to have one of the following scalar types: Long, Int; but got torch.cuda.FloatTensor instead (while checking arguments for embedding)" + ] + } + ], + "source": [ + "model.forward(audio, image, text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4ca96caf-82e2-4f07-87b3-8654dfdc89aa", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/pretrain_data_check.ipynb b/Experiments/pretrain_data_check.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2cdc9a93c26180847e661498ebdf1241b19aed72 --- /dev/null +++ b/Experiments/pretrain_data_check.ipynb @@ -0,0 +1,304 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 5, + "id": "61c272f2-edbe-4b7d-8fec-3ab431400cd3", + "metadata": {}, + "outputs": [], + "source": [ + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "e9dfd7d7-1685-4fc7-bbb9-3905c32d8ba1", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"metadata.json\", \"rb\") as f:\n", + " metadata = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "70bdba48-db01-42ac-8d89-edc69d7d7672", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "595375" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(metadata)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "59e193cc-0dd8-4f7e-959a-fbad0133d76c", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"blip_laion_cc_sbu_558k.jsonblip_laion_cc_sbu_558k.json\", \"rb\") as f:\n", + " data = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f3157f41-269b-4f7a-b3ba-9be711babe02", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '004539375',\n", + " 'image': '00453/004539375.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': 'Render a clear and concise summary of the photo.\\n'},\n", + " {'from': 'gpt',\n", + " 'value': 'select luxury furniture 3 - inch gel memory foam mattress topper'}]}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "50d8a051-1526-47dd-ad71-d3c66f7bd34e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '004374662',\n", + " 'image': '00437/004374662.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': 'Give a brief description of the image.\\n'},\n", + " {'from': 'gpt', 'value': 'the north face duffel bag camo large'}]}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[234]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "2e6d5664-4583-49a6-93cc-079ee2d1ff6c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "558128" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "11ed106d-6bef-482c-a456-5eaaf2025534", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': 'GCC_train_001749371',\n", + " 'image': 'GCC_train_001749371.jpg',\n", + " 'caption': 'if you are dreaming of simpler or off - the - grid living , a yurt is a fantastic option',\n", + " 'blip_caption': 'a white and tan yurt sitting on a dirt road',\n", + " 'url': 'https://i.pinimg.com/736x/14/7b/64/147b64467ee966d9a578097bb70475ad--yurt-kits-small-space-living.jpg'}" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "metadata[67]" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "ce8adcec-2499-4be3-be1d-7313fe54e96a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'id': '000466761',\n", + " 'image': '00046/000466761.jpg',\n", + " 'conversations': [{'from': 'human',\n", + " 'value': '\\nProvide a brief description of the given image.'},\n", + " {'from': 'gpt',\n", + " 'value': 'a clipboard and a pen with the words public health emergency next to it on a white table'}]}" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data[67]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "068313b6-6379-4ca2-892c-682634d3581e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "list" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "9ec33b51-4a0b-4a1e-81f7-2fda7cddb25f", + "metadata": {}, + "outputs": [], + "source": [ + "sample_data = data[:200000]" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "095685e5-40f1-4d84-8280-ef74fa56c5a2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "200000" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(sample_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "ffbad552-23fd-475f-8e9a-7118bcc4f51e", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"llava-phi/pretrain_data/blip_sample.json\", \"w\") as f:\n", + " json.dump(sample_data, f)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "69a05d25-6f3b-40c0-a3b5-e185ff526471", + "metadata": {}, + "outputs": [], + "source": [ + "with open(\"llava-phi/pretrain_data/blip_sample.json\", \"rb\") as f:\n", + " sample = json.load(f)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "200eea06-dfd6-4b3a-bb91-82af7d363951", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "200000" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(sample)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f86caa1e-edea-4a9c-934f-5420ede80d0d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/whispher_exp.ipynb b/Experiments/whispher_exp.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..fbf5a52a2e46bd8b25555c93649d5dc6b11c9701 --- /dev/null +++ b/Experiments/whispher_exp.ipynb @@ -0,0 +1,500 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 9, + "id": "bb4dd66b-0c17-48d4-9d34-f48cece2feb5", + "metadata": {}, + "outputs": [], + "source": [ + "# !pip install soundfile\n", + "# !pip install librosa" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "6e9386ea-4862-4f5b-a02f-d656e1a5ab9e", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import WhisperProcessor, WhisperForConditionalGeneration\n", + "from datasets import load_dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "914ab2b4-389d-4c48-8d1d-1250356646ac", + "metadata": {}, + "outputs": [], + "source": [ + "# load model and processor\n", + "processor = WhisperProcessor.from_pretrained(\"openai/whisper-tiny\")\n", + "model = WhisperForConditionalGeneration.from_pretrained(\"openai/whisper-tiny\")\n", + "model.config.forced_decoder_ids = None\n", + "\n", + "# load dummy dataset and read audio files\n", + "ds = load_dataset(\"hf-internal-testing/librispeech_asr_dummy\", \"clean\", split=\"validation\")\n", + "sample = ds[0][\"audio\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "2b299bab-1228-48d9-a8a5-3d5b6c52162d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'path': '/home/ravi.naik/.cache/huggingface/datasets/downloads/extracted/431c2c946d216530b2666a0e7ffa5ac3f5b3da89dd28858a9de6c78fae7caa4a/dev_clean/1272/128104/1272-128104-0000.flac',\n", + " 'array': array([0.00238037, 0.0020752 , 0.00198364, ..., 0.00042725, 0.00057983,\n", + " 0.0010376 ]),\n", + " 'sampling_rate': 16000}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sample" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b7e570a1-cf5c-450c-a7b6-49b45a10d2df", + "metadata": {}, + "outputs": [], + "source": [ + "input_features = processor(sample[\"array\"], sampling_rate=sample[\"sampling_rate\"], return_tensors=\"pt\").input_features " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "584e920b-a7fd-402d-95dd-3b9128cd34bb", + "metadata": {}, + "outputs": [], + "source": [ + "# generate token ids\n", + "predicted_ids = model.generate(input_features)\n", + "# decode token ids to text\n", + "transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)\n", + "\n", + "transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b27ab660-861b-49d1-81f9-f51cb7f9d8d8", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[' Mr. Quilter is the apostle of the middle classes and we are glad to welcome his gospel.']" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "transcription" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "eca553b8-68f6-493d-b567-3d526b49ae1b", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from torch import nn" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "c619a4cf-9068-4e4d-8139-e16d15345f4f", + "metadata": {}, + "outputs": [], + "source": [ + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoTokenizer" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47d5b1ff-ab0f-4d11-af64-d2fa2be39286", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + } + ], + "source": [ + "model_name = \"microsoft/phi-2\"\n", + "phi2_tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\n", + "phi2_tokenizer.pad_token = phi2_tokenizer.eos_token" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0b36b3f0-db5b-4029-9072-0a53bcab315a", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'transcription' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[6], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m tokens \u001b[38;5;241m=\u001b[39m phi2_tokenizer(\u001b[38;5;241m*\u001b[39m\u001b[43mtranscription\u001b[49m, return_tensors\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpt\u001b[39m\u001b[38;5;124m\"\u001b[39m, return_attention_mask\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\n", + "\u001b[0;31mNameError\u001b[0m: name 'transcription' is not defined" + ] + } + ], + "source": [ + "tokens = phi2_tokenizer(*transcription, return_tensors=\"pt\", return_attention_mask=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "91f6d3d3-bb00-434f-a91e-6952375890d0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'input_ids': tensor([[ 1770, 13, 2264, 346, 353, 318, 262, 46329, 286, 262,\n", + " 3504, 6097, 290, 356, 389, 9675, 284, 7062, 465, 21443,\n", + " 13]])}" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tokens" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "533191d9-4b3b-417a-918d-6fe854f24b50", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "A new version of the following files was downloaded from https://huggingface.co/microsoft/phi-2:\n", + "- configuration_phi.py\n", + ". Make sure to double-check they do not contain any added malicious code. To avoid downloading new versions of the code file, you can pin a revision.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2a65a119388b4cb4b123b532176e786e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "modeling_phi.py: 0%| | 0.00/62.7k [00:00 {text} \"\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens\n", + " \n", + "\n", + "class WhisperWithProjection:\n", + " def __init__(self):\n", + " self.processor = WhisperProcessor.from_pretrained(\"openai/whisper-tiny\")\n", + " self.model = WhisperForConditionalGeneration.from_pretrained(\"openai/whisper-tiny\")\n", + " self.model.config.forced_decoder_ids = None\n", + " self.audio_language_connector = AudioLanguageConnector()\n", + " \n", + " def forward(self, audio):\n", + " input_features = self.processor(audio[\"array\"],\n", + " sampling_rate=audio[\"sampling_rate\"],\n", + " return_tensors=\"pt\").input_features\n", + " # generate token ids\n", + " predicted_ids = self.model.generate(input_features)\n", + " # decode token ids to text \n", + " transcription = self.processor.batch_decode(predicted_ids, skip_special_tokens=True)\n", + "\n", + " audio_embeddings = self.audio_language_connector(transcription)\n", + " return audio_embeddings" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2b1f8f44-bfe6-413c-9e32-c38fa5517981", + "metadata": {}, + "outputs": [], + "source": [ + "class TextModality:\n", + " def __init__(self):\n", + " model_name = \"microsoft/phi-2\"\n", + " self.phi2_tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)\n", + " self.phi2_tokenizer.pad_token = self.phi2_tokenizer.eos_token\n", + "\n", + " def __call__(self, text):\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "21c51648-abb6-4bbd-b4c1-509967a69337", + "metadata": {}, + "outputs": [], + "source": [ + "class MultiModalPhi2:\n", + " def __init__(self):\n", + " self.text_modality = TextModality()\n", + " self.whisper_w_proj = WhisperWithProjection()\n", + " self.llm = self.load_llm()\n", + "\n", + " def load_llm(self):\n", + " bnb_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_quant_type=\"nf4\",\n", + " bnb_4bit_compute_dtype=torch.float16)\n", + " \n", + " model = AutoModelForCausalLM.from_pretrained(\n", + " model_name,\n", + " quantization_config=bnb_config,\n", + " trust_remote_code=True,\n", + " device_map=\"cuda:0\"\n", + " )\n", + " model.config.use_cache = False\n", + " return model\n", + "\n", + " def generate(self, audio, text):\n", + " text_embeddings = self.text_modality(text)\n", + " audio_embeddings = self.whisper_w_proj.forward(audio)\n", + " inputs = torch.concat([text_embeddings[\"input_ids\"], audio_embeddings[\"input_ids\"]], dim=1)\n", + " \n", + " # outputs = self.llm.generate(inputs, max_length=200)\n", + " outputs = self.llm(inputs)\n", + " return outputs\n", + " \n", + " # text = self.text_modality.phi2_tokenizer.batch_decode(outputs)[0]\n", + " # print(text)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "472a00cb-bae9-4c09-a0ef-bc57881b5e2c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n", + "Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "2236e6b1e26d444fa3d48181ba1a6cf9", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/2 [00:00)}, logits=tensor([[[ 6.9531, 9.9375, 7.0234, ..., 2.0020, 2.0020, 2.0000],\n", + " [ 8.9062, 12.1172, 7.5977, ..., -1.2012, -1.2012, -1.2012],\n", + " [ 7.0273, 5.3477, 3.6328, ..., -4.2070, -4.2070, -4.2070],\n", + " ...,\n", + " [ 7.0234, 7.4414, 9.1016, ..., 1.0117, 1.0127, 1.0117],\n", + " [ 9.4531, 10.0391, 9.7578, ..., 0.0776, 0.0775, 0.0764],\n", + " [ 8.0703, 6.6445, 5.5156, ..., -1.9268, -1.9268, -1.9277]]],\n", + " grad_fn=), past_key_values=None, hidden_states=None, attentions=None)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "audio = sample\n", + "text = \"explain about the audio\"\n", + "multi_modal_phi.generate(audio, text)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "46aa9c66-a5bb-4760-8895-92673f49345f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..527030da6c2403cdd583a6114fa2291ce329bba2 --- /dev/null +++ b/app.py @@ -0,0 +1,126 @@ +import gradio as gr +from PIL import Image +from inference.main import MultiModalPhi2 + +messages = [] + +multimodal_phi2 = MultiModalPhi2( + modelname_or_path="RaviNaik/Llava-Phi2", + temperature=0.2, + max_new_tokens=1024, + device="cpu", +) + + +def add_content(chatbot, text, image, audio_upload, audio_mic) -> gr.Chatbot: + textflag, imageflag, audioflag = False, False, False + if text not in ["", None]: + chatbot.append((text, None)) + textflag = True + if image is not None: + chatbot.append(((image,), None)) + imageflag = True + if audio_mic is not None: + chatbot.append(((audio_mic,), None)) + audioflag = True + else: + if audio_upload is not None: + chatbot.append(((audio_upload,), None)) + audioflag = True + if not any([textflag, imageflag, audioflag]): + # Raise an error if neither text nor file is provided + raise gr.Error("Enter a valid text, image or audio") + return chatbot + + +def clear_data(): + return {prompt: None, image: None, audio_upload: None, audio_mic: None, chatbot: []} + + +def run(history, text, image, audio_upload, audio_mic): + if text in [None, ""]: + text = None + + if audio_upload is not None: + audio = audio_upload + elif audio_mic is not None: + audio = audio_mic + else: + audio = None + + print("text", text) + print("image", image) + print("audio", audio) + + if image is not None: + image = Image.open(image) + outputs = multimodal_phi2(text, audio, image) + # outputs = "" + + history.append((None, outputs.title())) + return history, None, None, None, None + + +with gr.Blocks() as demo: + gr.Markdown("## MulitModal Phi2 Model Pretraining and Finetuning from Scratch") + gr.Markdown( + """This is a multimodal implementation of [Phi2](https://huggingface.co/microsoft/phi-2) model. + + Please find the source code and training details [here](https://github.com/RaviNaik/ERA-CAPSTONE/MultiModalPhi2). + + ### Details: + 1. LLM Backbone: [Phi2](https://huggingface.co/microsoft/phi-2) + 2. Vision Tower: [clip-vit-large-patch14-336](https://huggingface.co/openai/clip-vit-large-patch14-336) + 3. Audio Model: [Whisper Tiny](https://huggingface.co/openai/whisper-tiny) + 4. Pretraining Dataset: [LAION-CC-SBU dataset with BLIP captions(200k samples)](https://huggingface.co/datasets/liuhaotian/LLaVA-Pretrain) + 5. Finetuning Dataset: [Instruct 150k dataset based on COCO](https://huggingface.co/datasets/liuhaotian/LLaVA-Instruct-150K) + 6. Finetuned Model: [RaviNaik/Llava-Phi2](https://huggingface.co/RaviNaik/Llava-Phi2) + """ + ) + with gr.Row(): + with gr.Column(scale=4): + # Creating a column with a scale of 6 + with gr.Box(): + with gr.Row(): + # Adding a Textbox with a placeholder "write prompt" + prompt = gr.Textbox( + placeholder="Enter Prompt", lines=2, label="Query", value=None + ) + # Creating a column with a scale of 2 + with gr.Row(): + # Adding image + image = gr.Image(type="filepath", value=None) + # Creating a column with a scale of 2 + with gr.Row(): + # Add audio + audio_upload = gr.Audio(source="upload", type="filepath") + audio_mic = gr.Audio(source="microphone", type="filepath") + + with gr.Column(scale=8): + with gr.Box(): + with gr.Row(): + chatbot = gr.Chatbot( + avatar_images=("🧑", "🤖"), + height=550, + ) + with gr.Row(): + # Adding a Button + submit = gr.Button() + clear = gr.Button(value="Clear") + + submit.click( + add_content, + inputs=[chatbot, prompt, image, audio_upload, audio_mic], + outputs=[chatbot], + ).success( + run, + inputs=[chatbot, prompt, image, audio_upload, audio_mic], + outputs=[chatbot, prompt, image, audio_upload, audio_mic], + ) + + clear.click( + clear_data, + outputs=[prompt, image, audio_upload, audio_mic, chatbot], + ) + +demo.launch() diff --git a/inference/__init__.py b/inference/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/inference/conversation.py b/inference/conversation.py new file mode 100644 index 0000000000000000000000000000000000000000..be382e5dd601555b67ac59a3952871947037e3ab --- /dev/null +++ b/inference/conversation.py @@ -0,0 +1,224 @@ +import dataclasses +from enum import auto, Enum +from typing import List, Tuple + + +class SeparatorStyle(Enum): + """Different separator style.""" + SINGLE = auto() + TWO = auto() + MPT = auto() + PLAIN = auto() + LLAMA_2 = auto() + + +@dataclasses.dataclass +class Conversation: + """A class that keeps all conversation history.""" + system: str + roles: List[str] + messages: List[List[str]] + offset: int + sep_style: SeparatorStyle = SeparatorStyle.SINGLE + sep: str = "###" + sep2: str = None + version: str = "Unknown" + + skip_next: bool = False + + def get_prompt(self): + messages = self.messages + if len(messages) > 0 and type(messages[0][1]) is tuple: + messages = self.messages.copy() + init_role, init_msg = messages[0].copy() + init_msg = init_msg[0].replace("", "").strip() + if 'mmtag' in self.version: + messages[0] = (init_role, init_msg) + messages.insert(0, (self.roles[0], "")) + messages.insert(1, (self.roles[1], "Received.")) + else: + messages[0] = (init_role, "\n" + init_msg) + + if self.sep_style == SeparatorStyle.SINGLE: + ret = self.system + self.sep + for role, message in messages: + if message: + if type(message) is tuple: + message, _, _ = message + ret += role + ": " + message + self.sep + else: + ret += role + ":" + elif self.sep_style == SeparatorStyle.TWO: + seps = [self.sep, self.sep2] + ret = self.system + seps[0] + for i, (role, message) in enumerate(messages): + if message: + if type(message) is tuple: + message, _, _ = message + ret += role + ": " + message + seps[i % 2] + else: + ret += role + ":" + elif self.sep_style == SeparatorStyle.PLAIN: + seps = [self.sep, self.sep2] + ret = self.system + for i, (role, message) in enumerate(messages): + if message: + if type(message) is tuple: + message, _, _ = message + ret += message + seps[i % 2] + else: + ret += "" + else: + raise ValueError(f"Invalid style: {self.sep_style}") + + return ret + + def append_message(self, role, message): + self.messages.append([role, message]) + + def get_images(self, return_pil=False): + images = [] + for i, (role, msg) in enumerate(self.messages[self.offset:]): + if i % 2 == 0: + if type(msg) is tuple: + import base64 + from io import BytesIO + from PIL import Image + msg, image, image_process_mode = msg + if image_process_mode == "Pad": + def expand2square(pil_img, background_color=(122, 116, 104)): + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + image = expand2square(image) + elif image_process_mode in ["Default", "Crop"]: + pass + elif image_process_mode == "Resize": + image = image.resize((336, 336)) + else: + raise ValueError(f"Invalid image_process_mode: {image_process_mode}") + max_hw, min_hw = max(image.size), min(image.size) + aspect_ratio = max_hw / min_hw + max_len, min_len = 800, 400 + shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw)) + longest_edge = int(shortest_edge * aspect_ratio) + W, H = image.size + if longest_edge != max(image.size): + if H > W: + H, W = longest_edge, shortest_edge + else: + H, W = shortest_edge, longest_edge + image = image.resize((W, H)) + if return_pil: + images.append(image) + else: + buffered = BytesIO() + image.save(buffered, format="PNG") + img_b64_str = base64.b64encode(buffered.getvalue()).decode() + images.append(img_b64_str) + return images + + def to_gradio_chatbot(self): + ret = [] + for i, (role, msg) in enumerate(self.messages[self.offset:]): + if i % 2 == 0: + if type(msg) is tuple: + import base64 + from io import BytesIO + msg, image, image_process_mode = msg + max_hw, min_hw = max(image.size), min(image.size) + aspect_ratio = max_hw / min_hw + max_len, min_len = 800, 400 + shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw)) + longest_edge = int(shortest_edge * aspect_ratio) + W, H = image.size + if H > W: + H, W = longest_edge, shortest_edge + else: + H, W = shortest_edge, longest_edge + image = image.resize((W, H)) + buffered = BytesIO() + image.save(buffered, format="JPEG") + img_b64_str = base64.b64encode(buffered.getvalue()).decode() + img_str = f'user upload image' + msg = img_str + msg.replace('', '').strip() + ret.append([msg, None]) + else: + ret.append([msg, None]) + else: + ret[-1][-1] = msg + return ret + + def copy(self): + return Conversation( + system=self.system, + roles=self.roles, + messages=[[x, y] for x, y in self.messages], + offset=self.offset, + sep_style=self.sep_style, + sep=self.sep, + sep2=self.sep2, + version=self.version) + + def dict(self): + if len(self.get_images()) > 0: + return { + "system": self.system, + "roles": self.roles, + "messages": [[x, y[0] if type(y) is tuple else y] for x, y in self.messages], + "offset": self.offset, + "sep": self.sep, + "sep2": self.sep2, + } + return { + "system": self.system, + "roles": self.roles, + "messages": self.messages, + "offset": self.offset, + "sep": self.sep, + "sep2": self.sep2, + } + + +conv_phi_v0 = Conversation( + system="A chat between a curious user and an artificial intelligence assistant. " + "The assistant gives helpful, detailed, and polite answers to the user's questions.", + roles=("USER", "ASSISTANT"), + version="v0", + messages=(), + offset=0, + sep_style=SeparatorStyle.TWO, + sep=" ", + sep2="<|endoftext|>", +) + +conv_llava_plain = Conversation( + system="", + roles=("", ""), + messages=( + ), + offset=0, + sep_style=SeparatorStyle.PLAIN, + sep="\n", +) + +default_conversation = conv_phi_v0 +conv_templates = { + "default": conv_phi_v0, + "v0": conv_phi_v0, + "phi-2_v0": conv_phi_v0, + + "plain": conv_llava_plain, +} + + +if __name__ == "__main__": + print(default_conversation.get_prompt()) diff --git a/inference/inference.ipynb b/inference/inference.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0eac55d6929c1611e5fa3017792cfd59b8cbf253 --- /dev/null +++ b/inference/inference.ipynb @@ -0,0 +1,369 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "cdad6b21-030a-40d3-9b31-a229e5b6196d", + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig, AutoTokenizer, AutoConfig, CLIPImageProcessor" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "1f832710-0e8c-42ec-b581-1b15fd2a6acc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[2024-01-25 14:31:58,511] [INFO] [real_accelerator.py:110:get_accelerator] Setting ds_accelerator to cuda (auto detect)\n" + ] + } + ], + "source": [ + "from model import LlavaPhiForCausalLM" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "9e68f1d4-1ae3-4d45-b818-4600218d2215", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e5e13e666e3a43d4ad26cc70904abee8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/3 [00:00 {text} \"\n", + " tokens = self.phi2_tokenizer(text, return_tensors=\"pt\", return_attention_mask=False)\n", + " return tokens\n", + " \n", + "\n", + "class WhisperWithProjection:\n", + " def __init__(self, projection_dim, device):\n", + " self.device = device\n", + " self.processor = WhisperProcessor.from_pretrained(\"openai/whisper-tiny\", device_map=device)\n", + " self.model = WhisperForConditionalGeneration.from_pretrained(\"openai/whisper-tiny\", device_map=device)\n", + " self.model.config.forced_decoder_ids = None\n", + " # self.audio_language_connector = AudioLanguageConnector(projection_dim)\n", + " \n", + " def __call__(self, audio):\n", + " input_features = self.processor(audio[\"array\"],\n", + " sampling_rate=audio[\"sampling_rate\"],\n", + " return_tensors=\"pt\").input_features\n", + " # generate token ids\n", + " predicted_ids = self.model.generate(input_features.to(self.device))\n", + " # decode token ids to text \n", + " transcription = self.processor.batch_decode(predicted_ids, skip_special_tokens=True)\n", + "\n", + " # audio_embeddings = self.audio_language_connector(transcription)\n", + " return transcription" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "a2757c91-2ec1-4fe7-9216-03740bf80061", + "metadata": {}, + "outputs": [], + "source": [ + "IGNORE_INDEX = -100\n", + "IMAGE_TOKEN_INDEX = -200\n", + "DEFAULT_IMAGE_TOKEN = \"\"\n", + "DEFAULT_IMAGE_PATCH_TOKEN = \"\"\n", + "DEFAULT_IM_START_TOKEN = \"\"\n", + "DEFAULT_IM_END_TOKEN = \"\"\n", + "\n", + "from conversation import conv_templates, SeparatorStyle\n", + "\n", + "class MultiModalPhi2:\n", + " def __init__(self, modelname_or_path=\"RaviNaik/Llava-Phi2\",\n", + " temperature=0.2,\n", + " max_new_tokens=1024,\n", + " device=\"cuda:0\"):\n", + " self.model_name = modelname_or_path\n", + " self.temperature = temperature\n", + " self.max_new_tokens = max_new_tokens\n", + " self.device = device\n", + " self.disable_torch_init()\n", + " self.whisper_w_proj = WhisperWithProjection(projection_dim=512, device=device)\n", + " self.load_pretrained_model()\n", + " \n", + " def disable_torch_init(self):\n", + " \"\"\"\n", + " Disable the redundant torch default initialization to accelerate model creation.\n", + " \"\"\"\n", + " setattr(torch.nn.Linear, \"reset_parameters\", lambda self: None)\n", + " setattr(torch.nn.LayerNorm, \"reset_parameters\", lambda self: None)\n", + " \n", + " def load_pretrained_model(self):\n", + " self.model = LlavaPhiForCausalLM.from_pretrained(self.model_name, device_map=self.device)\n", + " self.tokenizer = AutoTokenizer.from_pretrained(self.model_name)\n", + " self.image_processor = CLIPImageProcessor.from_pretrained(self.model_name)\n", + " mm_use_im_start_end = getattr(self.model.config, \"mm_use_im_start_end\", False)\n", + " mm_use_im_patch_token = getattr(self.model.config, \"mm_use_im_patch_token\", True)\n", + " if mm_use_im_patch_token:\n", + " self.tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True)\n", + " if mm_use_im_start_end:\n", + " self.tokenizer.add_tokens([DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True)\n", + " \n", + " def tokenizer_image_token(self, prompt, tokenizer, image_token_index=IMAGE_TOKEN_INDEX, return_tensors=None):\n", + " prompt_chunks = [tokenizer(chunk).input_ids for chunk in prompt.split('')]\n", + " \n", + " def insert_separator(X, sep):\n", + " return [ele for sublist in zip(X, [sep]*len(X)) for ele in sublist][:-1]\n", + " \n", + " input_ids = []\n", + " offset = 0\n", + " if len(prompt_chunks) > 0 and len(prompt_chunks[0]) > 0 and prompt_chunks[0][0] == tokenizer.bos_token_id:\n", + " offset = 1\n", + " input_ids.append(prompt_chunks[0][0])\n", + " for x in insert_separator(prompt_chunks, [image_token_index] * (offset + 1)):\n", + " input_ids.extend(x[offset:])\n", + " \n", + " if return_tensors is not None:\n", + " if return_tensors == 'pt':\n", + " return torch.tensor(input_ids, dtype=torch.long)\n", + " raise ValueError(f'Unsupported tensor type: {return_tensors}')\n", + " return input_ids\n", + " \n", + " def __call__(self, text, audio, image):\n", + " qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\\n' + text\n", + " conv = conv_templates[\"phi-2_v0\"].copy()\n", + " conv.append_message(conv.roles[0], qs)\n", + " conv.append_message(conv.roles[1], None)\n", + " prompt = conv.get_prompt()\n", + "\n", + " image_tensor = self.image_processor.preprocess(image, return_tensors='pt')['pixel_values'].to(self.device)\n", + " \n", + " input_ids = self.tokenizer_image_token(prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0)\n", + " if audio is not None:\n", + " audio_transcript = self.whisper_w_proj(audio)\n", + " audio_embed = self.tokenizer(audio_transcript, return_tensors='pt')[\"input_ids\"]\n", + " input_ids = torch.concat([input_ids, audio_embed], dim=1)\n", + " input_ids = input_ids.to(self.device)\n", + " \n", + " stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2\n", + "\n", + " with torch.inference_mode():\n", + " output_ids = self.model.generate(\n", + " input_ids,\n", + " images=image_tensor,\n", + " do_sample=True,\n", + " temperature=self.temperature,\n", + " max_new_tokens=self.max_new_tokens,\n", + " eos_token_id=self.tokenizer.eos_token_id, # End of sequence token\n", + " pad_token_id=self.tokenizer.eos_token_id, # Pad token\n", + " use_cache=True,\n", + " )\n", + "\n", + " input_token_len = input_ids.shape[1]\n", + " n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item()\n", + " if n_diff_input_output > 0:\n", + " print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids')\n", + " outputs = self.tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0]\n", + " outputs = outputs.strip()\n", + " if outputs.endswith(stop_str):\n", + " outputs = outputs[:-len(stop_str)]\n", + " outputs = outputs.strip()\n", + " return outputs" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "cc47e6a0-3544-4a60-930f-ccae87ef945a", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "9ef56077307d4cef907e25b092061611", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/3 [00:00" +DEFAULT_IMAGE_PATCH_TOKEN = "" +DEFAULT_IM_START_TOKEN = "" +DEFAULT_IM_END_TOKEN = "" + + +class AudioLanguageConnector: + def __init__(self, projection_dim): + model_name = "microsoft/phi-2" + self.phi2_tokenizer = AutoTokenizer.from_pretrained( + model_name, trust_remote_code=True + ) + self.phi2_tokenizer.pad_token = self.phi2_tokenizer.eos_token + self.phi2_tokenizer.max_length = projection_dim + + def __call__(self, text): + text = f" {text} " + tokens = self.phi2_tokenizer( + text, return_tensors="pt", return_attention_mask=False + ) + return tokens + + +class WhisperWithProjection: + def __init__(self, projection_dim, device): + self.device = device + self.processor = WhisperProcessor.from_pretrained( + "openai/whisper-tiny", device_map=device + ) + self.model = WhisperForConditionalGeneration.from_pretrained( + "openai/whisper-tiny", device_map=device + ) + self.model.config.forced_decoder_ids = None + # self.audio_language_connector = AudioLanguageConnector(projection_dim) + + def __call__(self, audio): + input_features = self.processor( + audio["array"], sampling_rate=audio["sampling_rate"], return_tensors="pt" + ).input_features + # generate token ids + predicted_ids = self.model.generate(input_features.to(self.device)) + # decode token ids to text + transcription = self.processor.batch_decode( + predicted_ids, skip_special_tokens=True + ) + + # audio_embeddings = self.audio_language_connector(transcription) + return transcription + + +class MultiModalPhi2: + def __init__( + self, + modelname_or_path="RaviNaik/Llava-Phi2", + temperature=0.2, + max_new_tokens=1024, + device="cuda:0", + ): + self.model_name = modelname_or_path + self.temperature = temperature + self.max_new_tokens = max_new_tokens + self.device = device + self.disable_torch_init() + self.whisper_w_proj = WhisperWithProjection(projection_dim=512, device=device) + self.load_pretrained_model() + + def disable_torch_init(self): + """ + Disable the redundant torch default initialization to accelerate model creation. + """ + setattr(torch.nn.Linear, "reset_parameters", lambda self: None) + setattr(torch.nn.LayerNorm, "reset_parameters", lambda self: None) + + def load_pretrained_model(self): + self.model = LlavaPhiForCausalLM.from_pretrained( + self.model_name, device_map=self.device + ) + self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) + self.image_processor = CLIPImageProcessor.from_pretrained(self.model_name) + mm_use_im_start_end = getattr(self.model.config, "mm_use_im_start_end", False) + mm_use_im_patch_token = getattr( + self.model.config, "mm_use_im_patch_token", True + ) + if mm_use_im_patch_token: + self.tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True) + if mm_use_im_start_end: + self.tokenizer.add_tokens( + [DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True + ) + + def tokenizer_image_token( + self, + prompt, + tokenizer, + image_token_index=IMAGE_TOKEN_INDEX, + return_tensors=None, + ): + prompt_chunks = [ + tokenizer(chunk).input_ids for chunk in prompt.split("") + ] + + def insert_separator(X, sep): + return [ele for sublist in zip(X, [sep] * len(X)) for ele in sublist][:-1] + + input_ids = [] + offset = 0 + if ( + len(prompt_chunks) > 0 + and len(prompt_chunks[0]) > 0 + and prompt_chunks[0][0] == tokenizer.bos_token_id + ): + offset = 1 + input_ids.append(prompt_chunks[0][0]) + for x in insert_separator(prompt_chunks, [image_token_index] * (offset + 1)): + input_ids.extend(x[offset:]) + + if return_tensors is not None: + if return_tensors == "pt": + return torch.tensor(input_ids, dtype=torch.long) + raise ValueError(f"Unsupported tensor type: {return_tensors}") + return input_ids + + def __call__(self, text, audio, image): + if text is None: + text = "" + if image is not None: + qs = ( + DEFAULT_IM_START_TOKEN + + DEFAULT_IMAGE_TOKEN + + DEFAULT_IM_END_TOKEN + + "\n" + + text + ) + conv = conv_templates["phi-2_v0"].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + input_ids = self.tokenizer_image_token( + prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors="pt" + ).unsqueeze(0) + + image_tensor = self.image_processor.preprocess(image, return_tensors="pt")[ + "pixel_values" + ].to(self.device) + else: + qs = text + conv = conv_templates["phi-2_v0"].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + input_ids = self.tokenizer(prompt, return_tensors="pt")["input_ids"] + + image_tensor = None + + if audio is not None: + audio_transcript = self.whisper_w_proj(audio) + audio_embed = self.tokenizer(audio_transcript, return_tensors="pt")[ + "input_ids" + ] + input_ids = torch.concat([input_ids, audio_embed], dim=1) + input_ids = input_ids.to(self.device) + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + + with torch.inference_mode(): + if image is not None: + output_ids = self.model.generate( + input_ids, + images=image_tensor, + do_sample=True, + temperature=self.temperature, + max_new_tokens=self.max_new_tokens, + eos_token_id=self.tokenizer.eos_token_id, # End of sequence token + pad_token_id=self.tokenizer.eos_token_id, # Pad token + use_cache=True, + ) + else: + output_ids = self.model.generate( + input_ids, + do_sample=True, + temperature=self.temperature, + max_new_tokens=self.max_new_tokens, + eos_token_id=self.tokenizer.eos_token_id, # End of sequence token + pad_token_id=self.tokenizer.eos_token_id, # Pad token + use_cache=True, + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = ( + (input_ids != output_ids[:, :input_token_len]).sum().item() + ) + if n_diff_input_output > 0: + print( + f"[Warning] {n_diff_input_output} output_ids are not the same as the input_ids" + ) + outputs = self.tokenizer.batch_decode( + output_ids[:, input_token_len:], skip_special_tokens=True + )[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[: -len(stop_str)] + outputs = outputs.strip() + return outputs diff --git a/inference/model/__init__.py b/inference/model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1d17d5fccde9017fa4cbd8cd94d17ef3202017cd --- /dev/null +++ b/inference/model/__init__.py @@ -0,0 +1,2 @@ +from .language_model.llava_phi import LlavaPhiForCausalLM +from .language_model.configuration_llava_phi import LlavaPhiConfig, LlavaPhiVisionConfig, ProjectorConfig diff --git a/inference/model/builder.py b/inference/model/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..d873eaef35af085037a9bc8fefc5d20c49ae4029 --- /dev/null +++ b/inference/model/builder.py @@ -0,0 +1,121 @@ +import os +import warnings +import shutil + +from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig, BitsAndBytesConfig, CLIPImageProcessor +import torch +from llava_phi.model import * +from llava_phi.constants import DEFAULT_IMAGE_PATCH_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN + + +def load_pretrained_model(model_path, model_base, model_name, load_8bit=False, load_4bit=False, device_map="cuda", device="cuda"): + kwargs = {"device_map": device_map} + if load_8bit: + kwargs['load_in_8bit'] = True + elif load_4bit: + kwargs['load_in_4bit'] = True + kwargs['quantization_config'] = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=torch.float16, + bnb_4bit_use_double_quant=True, + bnb_4bit_quant_type='nf4' + ) + # else: # TODO: after fine-tuning LLava-Phi, load the model weights with fp16 will pose nan + # kwargs['torch_dtype'] = torch.float16 + + if 'phi' in model_name.lower(): + # Load LLaVA-Phi model + if 'lora' in model_name.lower() and model_base is None: + warnings.warn('There is `lora` in model name but no `model_base` is provided. If you are loading a LoRA model, please provide the `model_base` argument.') + if 'lora' in model_name.lower() and model_base is not None: + lora_cfg_pretrained = AutoConfig.from_pretrained(model_path) + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + print('Loading LLaVA-Phi from base model...') + model = LlavaPhiForCausalLM.from_pretrained(model_base, low_cpu_mem_usage=True, config=lora_cfg_pretrained, **kwargs) + token_num, tokem_dim = model.lm_head.out_features, model.lm_head.in_features + if model.lm_head.weight.shape[0] != token_num: + model.lm_head.weight = torch.nn.Parameter(torch.empty(token_num, tokem_dim, device=model.device, dtype=model.dtype)) + model.model.embed_tokens.weight = torch.nn.Parameter(torch.empty(token_num, tokem_dim, device=model.device, dtype=model.dtype)) + + print('Loading additional LLaVA-Phi weights...') + if os.path.exists(os.path.join(model_path, 'non_lora_trainables.bin')): + non_lora_trainables = torch.load(os.path.join(model_path, 'non_lora_trainables.bin'), map_location='cpu') + else: + # this is probably from HF Hub + from huggingface_hub import hf_hub_download + def load_from_hf(repo_id, filename, subfolder=None): + cache_file = hf_hub_download( + repo_id=repo_id, + filename=filename, + subfolder=subfolder) + return torch.load(cache_file, map_location='cpu') + non_lora_trainables = load_from_hf(model_path, 'non_lora_trainables.bin') + non_lora_trainables = {(k[11:] if k.startswith('base_model.') else k): v for k, v in non_lora_trainables.items()} + if any(k.startswith('model.model.') for k in non_lora_trainables): + non_lora_trainables = {(k[6:] if k.startswith('model.') else k): v for k, v in non_lora_trainables.items()} + model.load_state_dict(non_lora_trainables, strict=False) + + from peft import PeftModel + print('Loading LoRA weights...') + model = PeftModel.from_pretrained(model, model_path) + print('Merging LoRA weights...') + model = model.merge_and_unload() + print('Model is loaded...') + elif model_base is not None: + # this may be mm projector only + print('Loading LLaVA-Phi from base model...') + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + cfg_pretrained = AutoConfig.from_pretrained(model_path) + model = LlavaPhiForCausalLM.from_pretrained(model_base, low_cpu_mem_usage=True, config=cfg_pretrained, **kwargs) + + mm_projector_weights = torch.load(os.path.join(model_path, 'mm_projector.bin'), map_location='cpu') + mm_projector_weights = {k: v.to(torch.float16) for k, v in mm_projector_weights.items()} + model.load_state_dict(mm_projector_weights, strict=False) + else: + print("load llaVA-Phi MLLM!!!") + config = LlavaPhiConfig.from_pretrained(model_path, trust_remote_code=True) + tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + model = LlavaPhiForCausalLM.from_pretrained( + model_path, + config=config, + use_safetensors=True, + **kwargs).to("cuda") + else: + # Load language model + if model_base is not None: + # PEFT model + from peft import PeftModel + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + model = AutoModelForCausalLM.from_pretrained(model_base, torch_dtype=torch.float16, low_cpu_mem_usage=True, device_map="auto") + print(f"Loading LoRA weights from {model_path}") + model = PeftModel.from_pretrained(model, model_path) + print(f"Merging weights") + model = model.merge_and_unload() + print('Convert to FP16...') + model.to(torch.float16) + else: + tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False) + model = AutoModelForCausalLM.from_pretrained(model_path, low_cpu_mem_usage=True, **kwargs) + + image_processor = CLIPImageProcessor.from_pretrained(model_path) + + if 'phi' in model_name.lower(): + mm_use_im_start_end = getattr(model.config, "mm_use_im_start_end", False) + mm_use_im_patch_token = getattr(model.config, "mm_use_im_patch_token", True) + + # TODO: the tokenizer length of phi-2 is 50295, but the output class of lm_head is 51200 + if mm_use_im_patch_token: + tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True) + if mm_use_im_start_end: + tokenizer.add_tokens([DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True) + # model.resize_token_embeddings(len(tokenizer)) + else: + raise ValueError(f"Unsupported model name: {model_name}") + + if hasattr(model.config, "max_sequence_length"): + context_len = model.config.max_sequence_length + else: + context_len = 2048 + model.to(device="cuda") + print(kwargs) + return tokenizer, model, image_processor, context_len diff --git a/inference/model/language_model/configuration_llava_phi.py b/inference/model/language_model/configuration_llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..db16c71955328fdfc0f6ce0ed76f12fde583c034 --- /dev/null +++ b/inference/model/language_model/configuration_llava_phi.py @@ -0,0 +1,179 @@ +import os +from typing import Union +from transformers import PretrainedConfig, PhiConfig +from transformers.utils import logging + +logger = logging.get_logger(__name__) + + +class LlavaPhiVisionConfig(PretrainedConfig): + r""" + This is the configuration class to store the configuration of a [`CLIPVisionModel`]. It is used to instantiate a + CLIP vision encoder according to the specified arguments, defining the model architecture. Instantiating a + configuration with the defaults will yield a similar configuration to that of the vision encoder of the CLIP + [openai/clip-vit-base-patch32](https://huggingface.co/openai/clip-vit-base-patch32) architecture. + + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + + Args: + hidden_size (`int`, *optional*, defaults to 768): + Dimensionality of the encoder layers and the pooler layer. + intermediate_size (`int`, *optional*, defaults to 3072): + Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder. + projection_dim (`int`, *optional*, defaults to 512): + Dimentionality of text and vision projection layers. + num_hidden_layers (`int`, *optional*, defaults to 12): + Number of hidden layers in the Transformer encoder. + num_attention_heads (`int`, *optional*, defaults to 12): + Number of attention heads for each attention layer in the Transformer encoder. + num_channels (`int`, *optional*, defaults to 3): + The number of input channels. + image_size (`int`, *optional*, defaults to 224): + The size (resolution) of each image. + patch_size (`int`, *optional*, defaults to 32): + The size (resolution) of each patch. + hidden_act (`str` or `function`, *optional*, defaults to `"quick_gelu"`): + The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`, + `"relu"`, `"selu"` and `"gelu_new"` ``"quick_gelu"` are supported. + layer_norm_eps (`float`, *optional*, defaults to 1e-05): + The epsilon used by the layer normalization layers. + attention_dropout (`float`, *optional*, defaults to 0.0): + The dropout ratio for the attention probabilities. + initializer_range (`float`, *optional*, defaults to 0.02): + The standard deviation of the truncated_normal_initializer for initializing all weight matrices. + initializer_factor (`float`, *optional*, defaults to 1.0): + A factor for initializing all weight matrices (should be kept to 1, used internally for initialization + testing). + mm_vision_select_feature (`str`, *optional*, defaults to `"patch"`): + The feature to select from the vision encoder output. Can be one of `"patch"` or `"cls_patch"`. + mm_vision_select_layer (`int`, *optional*, defaults to `-2`): + The layer to select from the vision encoder output. + + Example: + + ```python + >>> from transformers import CLIPVisionConfig, CLIPVisionModel + + >>> # Initializing a CLIPVisionConfig with openai/clip-vit-base-patch32 style configuration + >>> configuration = CLIPVisionConfig() + + >>> # Initializing a CLIPVisionModel (with random weights) from the openai/clip-vit-base-patch32 style configuration + >>> model = CLIPVisionModel(configuration) + + >>> # Accessing the model configuration + >>> configuration = model.config + ```""" + + model_type = "llava_phi_clip_vision_model" + + def __init__( + self, + hidden_size=768, + intermediate_size=3072, + projection_dim=512, + num_hidden_layers=12, + num_attention_heads=12, + num_channels=3, + image_size=224, + patch_size=32, + hidden_act="quick_gelu", + layer_norm_eps=1e-5, + attention_dropout=0.0, + initializer_range=0.02, + initializer_factor=1.0, + mm_vision_select_feature="patch", + mm_vision_select_layer=-2, + **kwargs, + ): + super().__init__(**kwargs) + + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.projection_dim = projection_dim + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.num_channels = num_channels + self.patch_size = patch_size + self.image_size = image_size + self.initializer_range = initializer_range + self.initializer_factor = initializer_factor + self.attention_dropout = attention_dropout + self.layer_norm_eps = layer_norm_eps + self.hidden_act = hidden_act + self.mm_vision_select_feature = mm_vision_select_feature + self.mm_vision_select_layer = mm_vision_select_layer + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the vision config dict if we are loading from CLIPConfig + if config_dict.get("model_type") == "llava_phi-phi": + config_dict = config_dict["vision_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +class ProjectorConfig(PretrainedConfig): + model_type = "llava_phi_projector" + + def __init__( + self, + mm_projector_type="linear", + mm_hidden_size=768, + hidden_size=2560, + **kwargs + ): + self.mm_projector_type = mm_projector_type + self.mm_hidden_size = mm_hidden_size + self.hidden_size = hidden_size + super().__init__(**kwargs) + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the vision config dict if we are loading from CLIPConfig + if config_dict.get("model_type") == "llava_phi-phi": + config_dict = config_dict["projector_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +DEFAULT_VISUAL_CONFIG = { + "vision_tower": LlavaPhiVisionConfig().to_dict(), + "mm_projector": ProjectorConfig().to_dict() +} + + +class LlavaPhiConfig(PhiConfig): + model_type = "llava_phi" + + def __init__(self, vision_config=None, **kwargs): + if vision_config is None: + self.vision_config = DEFAULT_VISUAL_CONFIG + else: + self.vision_config = vision_config + + super().__init__(**kwargs) + + +if __name__ == "__main__": + print(LlavaPhiVisionConfig()) diff --git a/inference/model/language_model/llava_phi.py b/inference/model/language_model/llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..1c8b87121a0db29563d8ce0379c64746e1a2a5bf --- /dev/null +++ b/inference/model/language_model/llava_phi.py @@ -0,0 +1,126 @@ +import os +from typing import List, Optional, Tuple, Union + +import torch +import torch.nn as nn +from torch.nn import CrossEntropyLoss + +from transformers import AutoConfig, AutoModelForCausalLM, \ + PhiModel, PhiPreTrainedModel + +from transformers.modeling_outputs import CausalLMOutputWithPast +from ..llava_arch import LlavaMetaModel, LlavaMetaForCausalLM +from transformers.utils import logging +from .configuration_llava_phi import LlavaPhiConfig + +logger = logging.get_logger(__name__) + + +class LLavaPhiModel(LlavaMetaModel, PhiModel): + config_class = LlavaPhiConfig + + def __init__(self, config): + super(LLavaPhiModel, self).__init__(config) + + +class LlavaPhiForCausalLM(PhiPreTrainedModel, LlavaMetaForCausalLM): + config_class = LlavaPhiConfig + + def __init__(self, config): + super(PhiPreTrainedModel, self).__init__(config) + self.model = LLavaPhiModel(config) + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=True) + + # Initialize weights and apply final processing + self.post_init() + + def get_model(self): + return self.model + + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + images: Optional[torch.FloatTensor] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + input_ids, attention_mask, past_key_values, inputs_embeds, labels = self.prepare_inputs_labels_for_multimodal( + input_ids, attention_mask, past_key_values, labels, images) + + # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn) + outputs = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict + ) + + hidden_states = outputs[0] + logits = self.lm_head(hidden_states) + + loss = None + if labels is not None: + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + shift_logits = shift_logits.view(-1, self.config.vocab_size) + shift_labels = shift_labels.view(-1) + # Enable model/pipeline parallelism + shift_labels = shift_labels.to(shift_logits.device) + loss = loss_fct(shift_logits, shift_labels) + + if not return_dict: + output = (logits,) + outputs[1:] + return (loss,) + output if loss is not None else output + + return CausalLMOutputWithPast( + loss=loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + if past_key_values: + input_ids = input_ids[:, -1:] + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + + model_inputs.update( + { + "past_key_values": past_key_values, + "use_cache": kwargs.get("use_cache"), + "attention_mask": attention_mask, + "images": kwargs.get("images", None), + } + ) + return model_inputs + + +AutoConfig.register("llava_phi", LlavaPhiConfig) +AutoModelForCausalLM.register(LlavaPhiConfig, LlavaPhiForCausalLM) diff --git a/inference/model/llava_arch.py b/inference/model/llava_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..20df5b588d6d83437a32071ab428b82a14a85576 --- /dev/null +++ b/inference/model/llava_arch.py @@ -0,0 +1,208 @@ +# Copyright 2023 Haotian Liu +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from abc import ABC, abstractmethod + +import torch + +from .multimodal_encoder.clip_encoder import CLIPVisionTower +from .multimodal_projector.builder import build_vision_projector +from .language_model.configuration_llava_phi import LlavaPhiConfig, LlavaPhiVisionConfig, ProjectorConfig +from llava_phi.constants import IGNORE_INDEX, IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_PATCH_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN + + +class LlavaMetaModel: + def __init__(self, config): + super(LlavaMetaModel, self).__init__(config) + self.vision_tower = CLIPVisionTower( + LlavaPhiVisionConfig(**config.vision_config["vision_tower"]) + ) + self.mm_projector = build_vision_projector( + ProjectorConfig(**config.vision_config["mm_projector"]) + ) + + def get_vision_tower(self): + vision_tower = getattr(self, 'vision_tower', None) + if type(vision_tower) is list: + vision_tower = vision_tower[0] + return vision_tower + + +class LlavaMetaForCausalLM(ABC): + + @abstractmethod + def get_model(self): + pass + + def get_vision_tower(self): + return self.get_model().get_vision_tower() + + def encode_images(self, images): + image_features = self.get_model().get_vision_tower()(images) + image_features = self.get_model().mm_projector(image_features) + return image_features + + def prepare_inputs_labels_for_multimodal( + self, input_ids, attention_mask, past_key_values, labels, images + ): + vision_tower = self.get_vision_tower() + if vision_tower is None or images is None or input_ids.shape[1] == 1: + if past_key_values is not None and vision_tower is not None and images is not None and input_ids.shape[1] == 1: + attention_mask = torch.ones((attention_mask.shape[0], past_key_values[-1][-1].shape[-2] + 1), dtype=attention_mask.dtype, device=attention_mask.device) + return input_ids, attention_mask, past_key_values, None, labels + + if type(images) is list or images.ndim == 5: + concat_images = torch.cat([image for image in images], dim=0) + image_features = self.encode_images(concat_images) + split_sizes = [image.shape[0] for image in images] + image_features = torch.split(image_features, split_sizes, dim=0) + image_features = [x.flatten(0, 1) for x in image_features] + else: + image_features = self.encode_images(images) + + new_input_embeds = [] + new_labels = [] if labels is not None else None + cur_image_idx = 0 + for batch_idx, cur_input_ids in enumerate(input_ids): + if (cur_input_ids == IMAGE_TOKEN_INDEX).sum() == 0: + # multimodal LLM, but the current sample is not multimodal + # FIXME: this is a hacky fix, for deepspeed zero3 to work + half_len = cur_input_ids.shape[0] // 2 + cur_image_features = image_features[cur_image_idx] + cur_input_embeds_1 = self.get_model().embed_tokens(cur_input_ids[:half_len]) + cur_input_embeds_2 = self.get_model().embed_tokens(cur_input_ids[half_len:]) + cur_input_embeds = torch.cat([cur_input_embeds_1, cur_image_features[0:0], cur_input_embeds_2], dim=0) + new_input_embeds.append(cur_input_embeds) + if labels is not None: + new_labels.append(labels[batch_idx]) + cur_image_idx += 1 + continue + image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0] + cur_new_input_embeds = [] + if labels is not None: + cur_labels = labels[batch_idx] + cur_new_labels = [] + assert cur_labels.shape == cur_input_ids.shape + while image_token_indices.numel() > 0: + cur_image_features = image_features[cur_image_idx] + image_token_start = image_token_indices[0] + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[:image_token_start-1]).detach()) + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[image_token_start-1:image_token_start])) + cur_new_input_embeds.append(cur_image_features) + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[image_token_start+1:image_token_start+2])) + if labels is not None: + cur_new_labels.append(cur_labels[:image_token_start]) + cur_new_labels.append(torch.full((cur_image_features.shape[0],), IGNORE_INDEX, device=labels.device, dtype=labels.dtype)) + cur_new_labels.append(cur_labels[image_token_start:image_token_start+1]) + cur_labels = cur_labels[image_token_start+2:] + else: + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[:image_token_start])) + cur_new_input_embeds.append(cur_image_features) + if labels is not None: + cur_new_labels.append(cur_labels[:image_token_start]) + cur_new_labels.append(torch.full((cur_image_features.shape[0],), IGNORE_INDEX, device=labels.device, dtype=labels.dtype)) + cur_labels = cur_labels[image_token_start+1:] + cur_image_idx += 1 + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_input_ids = cur_input_ids[image_token_start+2:] + else: + cur_input_ids = cur_input_ids[image_token_start+1:] + image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0] + if cur_input_ids.numel() > 0: + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids).detach()) + else: + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids)) + if labels is not None: + cur_new_labels.append(cur_labels) + cur_new_input_embeds = [x.to(device=self.device) for x in cur_new_input_embeds] + cur_new_input_embeds = torch.cat(cur_new_input_embeds, dim=0) + new_input_embeds.append(cur_new_input_embeds) + if labels is not None: + cur_new_labels = torch.cat(cur_new_labels, dim=0) + new_labels.append(cur_new_labels) + + if any(x.shape != new_input_embeds[0].shape for x in new_input_embeds): + max_len = max(x.shape[0] for x in new_input_embeds) + + new_input_embeds_align = [] + for cur_new_embed in new_input_embeds: + cur_new_embed = torch.cat((cur_new_embed, torch.zeros((max_len - cur_new_embed.shape[0], cur_new_embed.shape[1]), dtype=cur_new_embed.dtype, device=cur_new_embed.device)), dim=0) + new_input_embeds_align.append(cur_new_embed) + new_input_embeds = torch.stack(new_input_embeds_align, dim=0) + + if labels is not None: + new_labels_align = [] + _new_labels = new_labels + for cur_new_label in new_labels: + cur_new_label = torch.cat((cur_new_label, torch.full((max_len - cur_new_label.shape[0],), IGNORE_INDEX, dtype=cur_new_label.dtype, device=cur_new_label.device)), dim=0) + new_labels_align.append(cur_new_label) + new_labels = torch.stack(new_labels_align, dim=0) + + if attention_mask is not None: + new_attention_mask = [] + for cur_attention_mask, cur_new_labels, cur_new_labels_align in zip(attention_mask, _new_labels, new_labels): + new_attn_mask_pad_left = torch.full((cur_new_labels.shape[0] - labels.shape[1],), True, dtype=attention_mask.dtype, device=attention_mask.device) + new_attn_mask_pad_right = torch.full((cur_new_labels_align.shape[0] - cur_new_labels.shape[0],), False, dtype=attention_mask.dtype, device=attention_mask.device) + cur_new_attention_mask = torch.cat((new_attn_mask_pad_left, cur_attention_mask, new_attn_mask_pad_right), dim=0) + new_attention_mask.append(cur_new_attention_mask) + attention_mask = torch.stack(new_attention_mask, dim=0) + assert attention_mask.shape == new_labels.shape + else: + new_input_embeds = torch.stack(new_input_embeds, dim=0) + if labels is not None: + new_labels = torch.stack(new_labels, dim=0) + + if attention_mask is not None: + new_attn_mask_pad_left = torch.full((attention_mask.shape[0], new_input_embeds.shape[1] - input_ids.shape[1]), True, dtype=attention_mask.dtype, device=attention_mask.device) + attention_mask = torch.cat((new_attn_mask_pad_left, attention_mask), dim=1) + assert attention_mask.shape == new_input_embeds.shape[:2] + + return None, attention_mask, past_key_values, new_input_embeds, new_labels + + def initialize_vision_tokenizer(self, model_args, tokenizer): + if model_args.mm_use_im_patch_token: + tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True) + self.resize_token_embeddings(len(tokenizer)) + + if model_args.mm_use_im_start_end: + num_new_tokens = tokenizer.add_tokens([DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True) + self.resize_token_embeddings(len(tokenizer)) + + if num_new_tokens > 0: + input_embeddings = self.get_input_embeddings().weight.data + output_embeddings = self.get_output_embeddings().weight.data + + input_embeddings_avg = input_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + output_embeddings_avg = output_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + + input_embeddings[-num_new_tokens:] = input_embeddings_avg + output_embeddings[-num_new_tokens:] = output_embeddings_avg + + if model_args.tune_mm_mlp_adapter: + for p in self.get_input_embeddings().parameters(): + p.requires_grad = True + for p in self.get_output_embeddings().parameters(): + p.requires_grad = False + + elif model_args.mm_use_im_patch_token: + if model_args.tune_mm_mlp_adapter: + for p in self.get_input_embeddings().parameters(): + p.requires_grad = False + for p in self.get_output_embeddings().parameters(): + p.requires_grad = False diff --git a/inference/model/multimodal_encoder/clip_encoder.py b/inference/model/multimodal_encoder/clip_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..5d7939d5ae0674fded20c52278b04dc2ef59936b --- /dev/null +++ b/inference/model/multimodal_encoder/clip_encoder.py @@ -0,0 +1,89 @@ +from abc import ABC + +import torch +import torch.nn as nn + +from transformers import CLIPPreTrainedModel, CLIPVisionConfig +from transformers.models.clip.modeling_clip import CLIPVisionTransformer +from llava_phi.model.language_model.configuration_llava_phi import LlavaPhiVisionConfig + + +class CLIPVisionTower(CLIPPreTrainedModel): + config_class = LlavaPhiVisionConfig + + def __init__(self, config): + super().__init__(config) + + self.vision_model = CLIPVisionTransformer(config) + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self) -> nn.Module: + return self.vision_model.embeddings.patch_embedding + + def feature_select(self, image_forward_outs): + image_features = image_forward_outs.hidden_states[ + self.config.mm_vision_select_layer + ] + if self.config.mm_vision_select_feature == "patch": + image_features = image_features[:, 1:] + elif self.config.mm_vision_select_feature == "cls_patch": + image_features = image_features + else: + raise ValueError( + f"Unexpected select feature: {self.config.mm_vision_select_feature}" + ) + return image_features + + def forward(self, images): + if type(images) is list: + image_features = [] + for image in images: + image_forward_out = self.vision_model( + image.to(device=self.device, dtype=self.dtype).unsqueeze(0), + output_hidden_states=True, + ) + image_feature = self.feature_select(image_forward_out).to(image.dtype) + image_features.append(image_feature) + else: + image_forward_outs = self.vision_model( + images.to(device=self.device, dtype=self.dtype), + output_hidden_states=True, + ) + image_features = self.feature_select(image_forward_outs).to(images.dtype) + + return image_features + + @property + def dummy_feature(self): + return torch.zeros(1, self.hidden_size, device=self.device, dtype=self.dtype) + + @property + def dtype(self): + return list(self.vision_model.parameters())[0].dtype + + @property + def device(self): + return list(self.vision_model.parameters())[0].device + + @property + def hidden_size(self): + return self.config.hidden_size + + @property + def num_patches(self): + return (self.config.image_size // self.config.patch_size) ** 2 + + +if __name__ == "__main__": + clip_config = CLIPVisionConfig.from_pretrained( + "/data/private/zhumj/GPTcode/mm-phi/openai/clip-vit-large-patch14-336" + ) + print("################ clip_config ##############") + print(clip_config) + phi_vis_config = LlavaPhiVisionConfig(**clip_config.to_dict()) + print("################ phi_vis_config ##############") + print(phi_vis_config) + + model = CLIPVisionTower(clip_config) + # print(list(model.vision_model.parameters())[0].dtype) diff --git a/inference/model/multimodal_projector/builder.py b/inference/model/multimodal_projector/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..a7cceb34ba8760709e81af0b21824502449fca63 --- /dev/null +++ b/inference/model/multimodal_projector/builder.py @@ -0,0 +1,50 @@ +import torch +import torch.nn as nn +import re + + +class IdentityMap(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x, *args, **kwargs): + return x + + @property + def config(self): + return {"mm_projector_type": "identity"} + + +class SimpleResBlock(nn.Module): + def __init__(self, channels): + super().__init__() + self.pre_norm = nn.LayerNorm(channels) + + self.proj = nn.Sequential( + nn.Linear(channels, channels), nn.GELU(), nn.Linear(channels, channels) + ) + + def forward(self, x): + x = self.pre_norm(x) + return x + self.proj(x) + + +def build_vision_projector(config): + projector_type = getattr(config, "mm_projector_type", "linear") + + if projector_type == "linear": + return nn.Linear(config.mm_hidden_size, config.hidden_size) + + mlp_gelu_match = re.match(r"^mlp(\d+)x_gelu$", projector_type) + if mlp_gelu_match: + mlp_depth = int(mlp_gelu_match.group(1)) + modules = [nn.Linear(config.mm_hidden_size, config.hidden_size)] + for _ in range(1, mlp_depth): + modules.append(nn.GELU()) + modules.append(nn.Linear(config.hidden_size, config.hidden_size)) + return nn.Sequential(*modules) + + if projector_type == "identity": + return IdentityMap() + + raise ValueError(f"Unknown projector type: {projector_type}") diff --git a/llava-phi/llava_phi/__init__.py b/llava-phi/llava_phi/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e6ad9ed7d7d323588accccee15cd69eae41eba04 --- /dev/null +++ b/llava-phi/llava_phi/__init__.py @@ -0,0 +1 @@ +from .model import LlavaPhiForCausalLM diff --git a/llava-phi/llava_phi/constants.py b/llava-phi/llava_phi/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..be8cf0204969a6c973f442b383d8e425d684e826 --- /dev/null +++ b/llava-phi/llava_phi/constants.py @@ -0,0 +1,12 @@ +CONTROLLER_HEART_BEAT_EXPIRATION = 30 +WORKER_HEART_BEAT_INTERVAL = 15 + +LOGDIR = "." + +# Model Constants +IGNORE_INDEX = -100 +IMAGE_TOKEN_INDEX = -200 +DEFAULT_IMAGE_TOKEN = "" +DEFAULT_IMAGE_PATCH_TOKEN = "" +DEFAULT_IM_START_TOKEN = "" +DEFAULT_IM_END_TOKEN = "" diff --git a/llava-phi/llava_phi/conversation.py b/llava-phi/llava_phi/conversation.py new file mode 100644 index 0000000000000000000000000000000000000000..be382e5dd601555b67ac59a3952871947037e3ab --- /dev/null +++ b/llava-phi/llava_phi/conversation.py @@ -0,0 +1,224 @@ +import dataclasses +from enum import auto, Enum +from typing import List, Tuple + + +class SeparatorStyle(Enum): + """Different separator style.""" + SINGLE = auto() + TWO = auto() + MPT = auto() + PLAIN = auto() + LLAMA_2 = auto() + + +@dataclasses.dataclass +class Conversation: + """A class that keeps all conversation history.""" + system: str + roles: List[str] + messages: List[List[str]] + offset: int + sep_style: SeparatorStyle = SeparatorStyle.SINGLE + sep: str = "###" + sep2: str = None + version: str = "Unknown" + + skip_next: bool = False + + def get_prompt(self): + messages = self.messages + if len(messages) > 0 and type(messages[0][1]) is tuple: + messages = self.messages.copy() + init_role, init_msg = messages[0].copy() + init_msg = init_msg[0].replace("", "").strip() + if 'mmtag' in self.version: + messages[0] = (init_role, init_msg) + messages.insert(0, (self.roles[0], "")) + messages.insert(1, (self.roles[1], "Received.")) + else: + messages[0] = (init_role, "\n" + init_msg) + + if self.sep_style == SeparatorStyle.SINGLE: + ret = self.system + self.sep + for role, message in messages: + if message: + if type(message) is tuple: + message, _, _ = message + ret += role + ": " + message + self.sep + else: + ret += role + ":" + elif self.sep_style == SeparatorStyle.TWO: + seps = [self.sep, self.sep2] + ret = self.system + seps[0] + for i, (role, message) in enumerate(messages): + if message: + if type(message) is tuple: + message, _, _ = message + ret += role + ": " + message + seps[i % 2] + else: + ret += role + ":" + elif self.sep_style == SeparatorStyle.PLAIN: + seps = [self.sep, self.sep2] + ret = self.system + for i, (role, message) in enumerate(messages): + if message: + if type(message) is tuple: + message, _, _ = message + ret += message + seps[i % 2] + else: + ret += "" + else: + raise ValueError(f"Invalid style: {self.sep_style}") + + return ret + + def append_message(self, role, message): + self.messages.append([role, message]) + + def get_images(self, return_pil=False): + images = [] + for i, (role, msg) in enumerate(self.messages[self.offset:]): + if i % 2 == 0: + if type(msg) is tuple: + import base64 + from io import BytesIO + from PIL import Image + msg, image, image_process_mode = msg + if image_process_mode == "Pad": + def expand2square(pil_img, background_color=(122, 116, 104)): + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + image = expand2square(image) + elif image_process_mode in ["Default", "Crop"]: + pass + elif image_process_mode == "Resize": + image = image.resize((336, 336)) + else: + raise ValueError(f"Invalid image_process_mode: {image_process_mode}") + max_hw, min_hw = max(image.size), min(image.size) + aspect_ratio = max_hw / min_hw + max_len, min_len = 800, 400 + shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw)) + longest_edge = int(shortest_edge * aspect_ratio) + W, H = image.size + if longest_edge != max(image.size): + if H > W: + H, W = longest_edge, shortest_edge + else: + H, W = shortest_edge, longest_edge + image = image.resize((W, H)) + if return_pil: + images.append(image) + else: + buffered = BytesIO() + image.save(buffered, format="PNG") + img_b64_str = base64.b64encode(buffered.getvalue()).decode() + images.append(img_b64_str) + return images + + def to_gradio_chatbot(self): + ret = [] + for i, (role, msg) in enumerate(self.messages[self.offset:]): + if i % 2 == 0: + if type(msg) is tuple: + import base64 + from io import BytesIO + msg, image, image_process_mode = msg + max_hw, min_hw = max(image.size), min(image.size) + aspect_ratio = max_hw / min_hw + max_len, min_len = 800, 400 + shortest_edge = int(min(max_len / aspect_ratio, min_len, min_hw)) + longest_edge = int(shortest_edge * aspect_ratio) + W, H = image.size + if H > W: + H, W = longest_edge, shortest_edge + else: + H, W = shortest_edge, longest_edge + image = image.resize((W, H)) + buffered = BytesIO() + image.save(buffered, format="JPEG") + img_b64_str = base64.b64encode(buffered.getvalue()).decode() + img_str = f'user upload image' + msg = img_str + msg.replace('', '').strip() + ret.append([msg, None]) + else: + ret.append([msg, None]) + else: + ret[-1][-1] = msg + return ret + + def copy(self): + return Conversation( + system=self.system, + roles=self.roles, + messages=[[x, y] for x, y in self.messages], + offset=self.offset, + sep_style=self.sep_style, + sep=self.sep, + sep2=self.sep2, + version=self.version) + + def dict(self): + if len(self.get_images()) > 0: + return { + "system": self.system, + "roles": self.roles, + "messages": [[x, y[0] if type(y) is tuple else y] for x, y in self.messages], + "offset": self.offset, + "sep": self.sep, + "sep2": self.sep2, + } + return { + "system": self.system, + "roles": self.roles, + "messages": self.messages, + "offset": self.offset, + "sep": self.sep, + "sep2": self.sep2, + } + + +conv_phi_v0 = Conversation( + system="A chat between a curious user and an artificial intelligence assistant. " + "The assistant gives helpful, detailed, and polite answers to the user's questions.", + roles=("USER", "ASSISTANT"), + version="v0", + messages=(), + offset=0, + sep_style=SeparatorStyle.TWO, + sep=" ", + sep2="<|endoftext|>", +) + +conv_llava_plain = Conversation( + system="", + roles=("", ""), + messages=( + ), + offset=0, + sep_style=SeparatorStyle.PLAIN, + sep="\n", +) + +default_conversation = conv_phi_v0 +conv_templates = { + "default": conv_phi_v0, + "v0": conv_phi_v0, + "phi-2_v0": conv_phi_v0, + + "plain": conv_llava_plain, +} + + +if __name__ == "__main__": + print(default_conversation.get_prompt()) diff --git a/llava-phi/llava_phi/eval/eval_gpt_review.py b/llava-phi/llava_phi/eval/eval_gpt_review.py new file mode 100644 index 0000000000000000000000000000000000000000..8af4559c65fc2728b11fd2097a109981ee1ef686 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_gpt_review.py @@ -0,0 +1,113 @@ +import argparse +import json +import os + +import openai +import tqdm +import ray +import time + +NUM_SECONDS_TO_SLEEP = 3 + +@ray.remote(num_cpus=4) +def get_eval(content: str, max_tokens: int): + while True: + try: + response = openai.ChatCompletion.create( + model='gpt-4', + messages=[{ + 'role': 'system', + 'content': 'You are a helpful and precise assistant for checking the quality of the answer.' + }, { + 'role': 'user', + 'content': content, + }], + temperature=0.2, # TODO: figure out which temperature is best for evaluation + max_tokens=max_tokens, + ) + break + except openai.error.RateLimitError: + pass + except Exception as e: + print(e) + time.sleep(NUM_SECONDS_TO_SLEEP) + + print('success!') + return response['choices'][0]['message']['content'] + + +def parse_score(review): + try: + score_pair = review.split('\n')[0] + score_pair = score_pair.replace(',', ' ') + sp = score_pair.split(' ') + if len(sp) == 2: + return [float(sp[0]), float(sp[1])] + else: + print('error', review) + return [-1, -1] + except Exception as e: + print(e) + print('error', review) + return [-1, -1] + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='ChatGPT-based QA evaluation.') + parser.add_argument('-q', '--question') + # parser.add_argument('-a', '--answer') + parser.add_argument('-a', '--answer-list', nargs='+', default=[]) + parser.add_argument('-r', '--rule') + parser.add_argument('-o', '--output') + parser.add_argument('--max-tokens', type=int, default=1024, help='maximum number of tokens produced in the output') + args = parser.parse_args() + + ray.init() + + f_q = open(os.path.expanduser(args.question)) + f_ans1 = open(os.path.expanduser(args.answer_list[0])) + f_ans2 = open(os.path.expanduser(args.answer_list[1])) + rule_dict = json.load(open(os.path.expanduser(args.rule), 'r')) + + review_file = open(f'{args.output}', 'w') + + js_list = [] + handles = [] + idx = 0 + for ques_js, ans1_js, ans2_js in zip(f_q, f_ans1, f_ans2): + # if idx == 1: + # break + + ques = json.loads(ques_js) + ans1 = json.loads(ans1_js) + ans2 = json.loads(ans2_js) + + category = json.loads(ques_js)['category'] + if category in rule_dict: + rule = rule_dict[category] + else: + rule = rule_dict['default'] + prompt = rule['prompt'] + role = rule['role'] + content = (f'[Question]\n{ques["text"]}\n\n' + f'[{role} 1]\n{ans1["text"]}\n\n[End of {role} 1]\n\n' + f'[{role} 2]\n{ans2["text"]}\n\n[End of {role} 2]\n\n' + f'[System]\n{prompt}\n\n') + js_list.append({ + 'id': idx+1, + 'question_id': ques['question_id'], + 'answer1_id': ans1['answer_id'], + 'answer2_id': ans2['answer_id'], + 'category': category}) + idx += 1 + handles.append(get_eval.remote(content, args.max_tokens)) + # To avoid the rate limit set by OpenAI + time.sleep(NUM_SECONDS_TO_SLEEP) + + reviews = ray.get(handles) + for idx, review in enumerate(reviews): + scores = parse_score(review) + js_list[idx]['content'] = review + js_list[idx]['tuple'] = scores + review_file.write(json.dumps(js_list[idx]) + '\n') + review_file.close() diff --git a/llava-phi/llava_phi/eval/eval_gpt_review_bench.py b/llava-phi/llava_phi/eval/eval_gpt_review_bench.py new file mode 100644 index 0000000000000000000000000000000000000000..06160f2422b5368f30fb967f7cae635208a1dc69 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_gpt_review_bench.py @@ -0,0 +1,121 @@ +import argparse +import json +import os + +import openai +import time + +NUM_SECONDS_TO_SLEEP = 0.5 + + +def get_eval(content: str, max_tokens: int): + while True: + try: + response = openai.ChatCompletion.create( + model='gpt-4-0314', + messages=[{ + 'role': 'system', + 'content': 'You are a helpful and precise assistant for checking the quality of the answer.' + }, { + 'role': 'user', + 'content': content, + }], + temperature=0.2, # TODO: figure out which temperature is best for evaluation + max_tokens=max_tokens, + ) + break + except openai.error.RateLimitError: + pass + except Exception as e: + print(e) + time.sleep(NUM_SECONDS_TO_SLEEP) + + return response['choices'][0]['message']['content'] + + +def parse_score(review): + try: + score_pair = review.split('\n')[0] + score_pair = score_pair.replace(',', ' ') + sp = score_pair.split(' ') + if len(sp) == 2: + return [float(sp[0]), float(sp[1])] + else: + print('error', review) + return [-1, -1] + except Exception as e: + print(e) + print('error', review) + return [-1, -1] + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='ChatGPT-based QA evaluation.') + parser.add_argument('-q', '--question') + parser.add_argument('-c', '--context') + parser.add_argument('-a', '--answer-list', nargs='+', default=[]) + parser.add_argument('-r', '--rule') + parser.add_argument('-o', '--output') + parser.add_argument('--max-tokens', type=int, default=1024, help='maximum number of tokens produced in the output') + args = parser.parse_args() + + f_q = open(os.path.expanduser(args.question)) + f_ans1 = open(os.path.expanduser(args.answer_list[0])) + f_ans2 = open(os.path.expanduser(args.answer_list[1])) + rule_dict = json.load(open(os.path.expanduser(args.rule), 'r')) + + if os.path.isfile(os.path.expanduser(args.output)): + cur_reviews = [json.loads(line) for line in open(os.path.expanduser(args.output))] + else: + cur_reviews = [] + + review_file = open(f'{args.output}', 'a') + + context_list = [json.loads(line) for line in open(os.path.expanduser(args.context))] + image_to_context = {context['image']: context for context in context_list} + + handles = [] + idx = 0 + for ques_js, ans1_js, ans2_js in zip(f_q, f_ans1, f_ans2): + ques = json.loads(ques_js) + ans1 = json.loads(ans1_js) + ans2 = json.loads(ans2_js) + + inst = image_to_context[ques['image']] + + if isinstance(inst['caption'], list): + cap_str = '\n'.join(inst['caption']) + else: + cap_str = inst['caption'] + + category = 'llava_bench_' + json.loads(ques_js)['category'] + if category in rule_dict: + rule = rule_dict[category] + else: + assert False, f"Visual QA category not found in rule file: {category}." + prompt = rule['prompt'] + role = rule['role'] + content = (f'[Context]\n{cap_str}\n\n' + f'[Question]\n{ques["text"]}\n\n' + f'[{role} 1]\n{ans1["text"]}\n\n[End of {role} 1]\n\n' + f'[{role} 2]\n{ans2["text"]}\n\n[End of {role} 2]\n\n' + f'[System]\n{prompt}\n\n') + cur_js = { + 'id': idx+1, + 'question_id': ques['question_id'], + 'answer1_id': ans1.get('answer_id', ans1['question_id']), + 'answer2_id': ans2.get('answer_id', ans2['answer_id']), + 'category': category + } + if idx >= len(cur_reviews): + review = get_eval(content, args.max_tokens) + scores = parse_score(review) + cur_js['content'] = review + cur_js['tuple'] = scores + review_file.write(json.dumps(cur_js) + '\n') + review_file.flush() + else: + print(f'Skipping {idx} as we already have it.') + idx += 1 + print(idx) + review_file.close() diff --git a/llava-phi/llava_phi/eval/eval_gpt_review_visual.py b/llava-phi/llava_phi/eval/eval_gpt_review_visual.py new file mode 100644 index 0000000000000000000000000000000000000000..d6e407a400a67020d801e6c27a3c32a2ee38f30c --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_gpt_review_visual.py @@ -0,0 +1,118 @@ +import argparse +import json +import os + +import openai +import time + +NUM_SECONDS_TO_SLEEP = 0.5 + + +def get_eval(content: str, max_tokens: int): + while True: + try: + response = openai.ChatCompletion.create( + model='gpt-4-0314', + messages=[{ + 'role': 'system', + 'content': 'You are a helpful and precise assistant for checking the quality of the answer.' + }, { + 'role': 'user', + 'content': content, + }], + temperature=0.2, # TODO: figure out which temperature is best for evaluation + max_tokens=max_tokens, + ) + break + except openai.error.RateLimitError: + pass + except Exception as e: + print(e) + time.sleep(NUM_SECONDS_TO_SLEEP) + + return response['choices'][0]['message']['content'] + + +def parse_score(review): + try: + score_pair = review.split('\n')[0] + score_pair = score_pair.replace(',', ' ') + sp = score_pair.split(' ') + if len(sp) == 2: + return [float(sp[0]), float(sp[1])] + else: + print('error', review) + return [-1, -1] + except Exception as e: + print(e) + print('error', review) + return [-1, -1] + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='ChatGPT-based QA evaluation.') + parser.add_argument('-q', '--question') + parser.add_argument('-c', '--context') + parser.add_argument('-a', '--answer-list', nargs='+', default=[]) + parser.add_argument('-r', '--rule') + parser.add_argument('-o', '--output') + parser.add_argument('--max-tokens', type=int, default=1024, help='maximum number of tokens produced in the output') + args = parser.parse_args() + + f_q = open(os.path.expanduser(args.question)) + f_ans1 = open(os.path.expanduser(args.answer_list[0])) + f_ans2 = open(os.path.expanduser(args.answer_list[1])) + rule_dict = json.load(open(os.path.expanduser(args.rule), 'r')) + + if os.path.isfile(os.path.expanduser(args.output)): + cur_reviews = [json.loads(line) for line in open(os.path.expanduser(args.output))] + else: + cur_reviews = [] + + review_file = open(f'{args.output}', 'a') + + context_list = [json.loads(line) for line in open(os.path.expanduser(args.context))] + image_to_context = {context['image']: context for context in context_list} + + handles = [] + idx = 0 + for ques_js, ans1_js, ans2_js in zip(f_q, f_ans1, f_ans2): + ques = json.loads(ques_js) + ans1 = json.loads(ans1_js) + ans2 = json.loads(ans2_js) + + inst = image_to_context[ques['image']] + cap_str = '\n'.join(inst['captions']) + box_str = '\n'.join([f'{instance["category"]}: {instance["bbox"]}' for instance in inst['instances']]) + + category = json.loads(ques_js)['category'] + if category in rule_dict: + rule = rule_dict[category] + else: + assert False, f"Visual QA category not found in rule file: {category}." + prompt = rule['prompt'] + role = rule['role'] + content = (f'[Context]\n{cap_str}\n\n{box_str}\n\n' + f'[Question]\n{ques["text"]}\n\n' + f'[{role} 1]\n{ans1["text"]}\n\n[End of {role} 1]\n\n' + f'[{role} 2]\n{ans2["text"]}\n\n[End of {role} 2]\n\n' + f'[System]\n{prompt}\n\n') + cur_js = { + 'id': idx+1, + 'question_id': ques['question_id'], + 'answer1_id': ans1.get('answer_id', ans1['question_id']), + 'answer2_id': ans2.get('answer_id', ans2['answer_id']), + 'category': category + } + if idx >= len(cur_reviews): + review = get_eval(content, args.max_tokens) + scores = parse_score(review) + cur_js['content'] = review + cur_js['tuple'] = scores + review_file.write(json.dumps(cur_js) + '\n') + review_file.flush() + else: + print(f'Skipping {idx} as we already have it.') + idx += 1 + print(idx) + review_file.close() diff --git a/llava-phi/llava_phi/eval/eval_pope.py b/llava-phi/llava_phi/eval/eval_pope.py new file mode 100644 index 0000000000000000000000000000000000000000..b115b8f2327ea9d972f9e41bcbb03c68be6b3508 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_pope.py @@ -0,0 +1,81 @@ +import os +import json +import argparse + +def eval_pope(answers, label_file): + label_list = [json.loads(q)['label'] for q in open(label_file, 'r')] + + for answer in answers: + text = answer['text'] + + # Only keep the first sentence + if text.find('.') != -1: + text = text.split('.')[0] + + text = text.replace(',', '') + words = text.split(' ') + if 'No' in words or 'not' in words or 'no' in words: + answer['text'] = 'no' + else: + answer['text'] = 'yes' + + for i in range(len(label_list)): + if label_list[i] == 'no': + label_list[i] = 0 + else: + label_list[i] = 1 + + pred_list = [] + for answer in answers: + if answer['text'] == 'no': + pred_list.append(0) + else: + pred_list.append(1) + + pos = 1 + neg = 0 + yes_ratio = pred_list.count(1) / len(pred_list) + + TP, TN, FP, FN = 0, 0, 0, 0 + for pred, label in zip(pred_list, label_list): + if pred == pos and label == pos: + TP += 1 + elif pred == pos and label == neg: + FP += 1 + elif pred == neg and label == neg: + TN += 1 + elif pred == neg and label == pos: + FN += 1 + + print('TP\tFP\tTN\tFN\t') + print('{}\t{}\t{}\t{}'.format(TP, FP, TN, FN)) + + precision = float(TP) / float(TP + FP) + recall = float(TP) / float(TP + FN) + f1 = 2*precision*recall / (precision + recall) + acc = (TP + TN) / (TP + TN + FP + FN) + print('Accuracy: {}'.format(acc)) + print('Precision: {}'.format(precision)) + print('Recall: {}'.format(recall)) + print('F1 score: {}'.format(f1)) + print('Yes ratio: {}'.format(yes_ratio)) + print('%.3f, %.3f, %.3f, %.3f, %.3f' % (f1, acc, precision, recall, yes_ratio) ) + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--annotation-dir", type=str) + parser.add_argument("--question-file", type=str) + parser.add_argument("--result-file", type=str) + args = parser.parse_args() + + questions = [json.loads(line) for line in open(args.question_file)] + questions = {question['question_id']: question for question in questions} + answers = [json.loads(q) for q in open(args.result_file)] + for file in os.listdir(args.annotation_dir): + assert file.startswith('coco_pope_') + assert file.endswith('.json') + category = file[10:-5] + cur_answers = [x for x in answers if questions[x['question_id']]['category'] == category] + print('Category: {}, # samples: {}'.format(category, len(cur_answers))) + eval_pope(cur_answers, os.path.join(args.annotation_dir, file)) + print("====================================") diff --git a/llava-phi/llava_phi/eval/eval_science_qa.py b/llava-phi/llava_phi/eval/eval_science_qa.py new file mode 100644 index 0000000000000000000000000000000000000000..ccf206bbd7a5d6376eef82d61b3ef8bbe0f71c6c --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_science_qa.py @@ -0,0 +1,114 @@ +import argparse +import json +import os +import re +import random + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--base-dir', type=str) + parser.add_argument('--result-file', type=str) + parser.add_argument('--output-file', type=str) + parser.add_argument('--output-result', type=str) + parser.add_argument('--split', type=str, default='test') + parser.add_argument('--options', type=list, default=["A", "B", "C", "D", "E"]) + return parser.parse_args() + + +def convert_caps(results): + fakecaps = [] + for result in results: + image_id = result['question_id'] + caption = result['text'] + fakecaps.append({"image_id": int(image_id), "caption": caption}) + return fakecaps + + +def get_pred_idx(prediction, choices, options): + """ + Get the index (e.g. 2) from the prediction (e.g. 'C') + """ + if prediction in options[:len(choices)]: + return options.index(prediction) + else: + return -1 + return random.choice(range(len(choices))) + + +if __name__ == "__main__": + args = get_args() + + base_dir = args.base_dir + split_indices = json.load(open(os.path.join(base_dir, "pid_splits.json")))[args.split] + problems = json.load(open(os.path.join(base_dir, "problems.json"))) + predictions = [json.loads(line) for line in open(args.result_file)] + predictions = {pred['question_id']: pred for pred in predictions} + split_problems = {idx: problems[idx] for idx in split_indices} + + results = {'correct': [], 'incorrect': []} + sqa_results = {} + sqa_results['acc'] = None + sqa_results['correct'] = None + sqa_results['count'] = None + sqa_results['results'] = {} + sqa_results['outputs'] = {} + + for prob_id, prob in split_problems.items(): + if prob_id not in predictions: + pred = {'text': 'FAILED', 'prompt': 'Unknown'} + pred_text = 'FAILED' + else: + pred = predictions[prob_id] + pred_text = pred['text'] + + if pred_text in args.options: + answer = pred_text + elif len(pred_text) >= 3 and pred_text[0] in args.options and pred_text[1:3] == ". ": + answer = pred_text[0] + else: + pattern = re.compile(r'The answer is ([A-Z]).') + res = pattern.findall(pred_text) + if len(res) == 1: + answer = res[0] # 'A', 'B', ... + else: + answer = "FAILED" + + pred_idx = get_pred_idx(answer, prob['choices'], args.options) + + analysis = { + 'question_id': prob_id, + 'parsed_ans': answer, + 'ground_truth': args.options[prob['answer']], + 'question': pred['prompt'], + 'pred': pred_text, + 'is_multimodal': '' in pred['prompt'], + } + + sqa_results['results'][prob_id] = get_pred_idx(answer, prob['choices'], args.options) + sqa_results['outputs'][prob_id] = pred_text + + if pred_idx == prob['answer']: + results['correct'].append(analysis) + else: + results['incorrect'].append(analysis) + + correct = len(results['correct']) + total = len(results['correct']) + len(results['incorrect']) + + ###### IMG ###### + multimodal_correct = len([x for x in results['correct'] if x['is_multimodal']]) + multimodal_incorrect = len([x for x in results['incorrect'] if x['is_multimodal']]) + multimodal_total = multimodal_correct + multimodal_incorrect + ###### IMG ###### + + print(f'Total: {total}, Correct: {correct}, Accuracy: {correct / total * 100:.2f}%, IMG-Accuracy: {multimodal_correct / multimodal_total * 100:.2f}%') + + sqa_results['acc'] = correct / total * 100 + sqa_results['correct'] = correct + sqa_results['count'] = total + + with open(args.output_file, 'w') as f: + json.dump(results, f, indent=2) + with open(args.output_result, 'w') as f: + json.dump(sqa_results, f, indent=2) diff --git a/llava-phi/llava_phi/eval/eval_science_qa_gpt4.py b/llava-phi/llava_phi/eval/eval_science_qa_gpt4.py new file mode 100644 index 0000000000000000000000000000000000000000..c2ff17c915481fb556aba6ec816a9e08f519c515 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_science_qa_gpt4.py @@ -0,0 +1,104 @@ +import argparse +import json +import os +import re +import random +from collections import defaultdict + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--base-dir', type=str) + parser.add_argument('--gpt4-result', type=str) + parser.add_argument('--our-result', type=str) + parser.add_argument('--split', type=str, default='test') + parser.add_argument('--options', type=list, default=["A", "B", "C", "D", "E"]) + return parser.parse_args() + + +def convert_caps(results): + fakecaps = [] + for result in results: + image_id = result['question_id'] + caption = result['text'] + fakecaps.append({"image_id": int(image_id), "caption": caption}) + return fakecaps + + +def get_pred_idx(prediction, choices, options): + """ + Get the index (e.g. 2) from the prediction (e.g. 'C') + """ + if prediction in options[:len(choices)]: + return options.index(prediction) + else: + return random.choice(range(len(choices))) + + +if __name__ == "__main__": + args = get_args() + + base_dir = args.base_dir + split_indices = json.load(open(os.path.join(base_dir, "pid_splits.json")))[args.split] + problems = json.load(open(os.path.join(base_dir, "problems.json"))) + our_predictions = [json.loads(line) for line in open(args.our_result)] + our_predictions = {pred['question_id']: pred for pred in our_predictions} + split_problems = {idx: problems[idx] for idx in split_indices} + + gpt4_predictions = json.load(open(args.gpt4_result))['outputs'] + + results = defaultdict(lambda: 0) + + for prob_id, prob in split_problems.items(): + if prob_id not in our_predictions: + continue + if prob_id not in gpt4_predictions: + continue + our_pred = our_predictions[prob_id]['text'] + gpt4_pred = gpt4_predictions[prob_id] + + pattern = re.compile(r'The answer is ([A-Z]).') + our_res = pattern.findall(our_pred) + if len(our_res) == 1: + our_answer = our_res[0] # 'A', 'B', ... + else: + our_answer = "FAILED" + gpt4_res = pattern.findall(gpt4_pred) + if len(gpt4_res) == 1: + gpt4_answer = gpt4_res[0] # 'A', 'B', ... + else: + gpt4_answer = "FAILED" + + our_pred_idx = get_pred_idx(our_answer, prob['choices'], args.options) + gpt4_pred_idx = get_pred_idx(gpt4_answer, prob['choices'], args.options) + + if gpt4_answer == 'FAILED': + results['gpt4_failed'] += 1 + # continue + gpt4_pred_idx = our_pred_idx + # if our_pred_idx != prob['answer']: + # print(our_predictions[prob_id]['prompt']) + # print('-----------------') + # print(f'LECTURE: {prob["lecture"]}') + # print(f'SOLUTION: {prob["solution"]}') + # print('=====================') + else: + # continue + pass + # gpt4_pred_idx = our_pred_idx + + if gpt4_pred_idx == prob['answer']: + results['correct'] += 1 + else: + results['incorrect'] += 1 + + + if gpt4_pred_idx == prob['answer'] or our_pred_idx == prob['answer']: + results['correct_upperbound'] += 1 + + correct = results['correct'] + total = results['correct'] + results['incorrect'] + print(f'Total: {total}, Correct: {correct}, Accuracy: {correct / total * 100:.2f}%') + print(f'Total: {total}, Correct (upper): {results["correct_upperbound"]}, Accuracy: {results["correct_upperbound"] / total * 100:.2f}%') + print(f'Total: {total}, GPT-4 NO-ANS (RANDOM): {results["gpt4_failed"]}, Percentage: {results["gpt4_failed"] / total * 100:.2f}%') + diff --git a/llava-phi/llava_phi/eval/eval_science_qa_gpt4_requery.py b/llava-phi/llava_phi/eval/eval_science_qa_gpt4_requery.py new file mode 100644 index 0000000000000000000000000000000000000000..698546e995d365d1ccc2c25a87e6c5cd681e6eb6 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_science_qa_gpt4_requery.py @@ -0,0 +1,149 @@ +import argparse +import json +import os +import re +import random +from collections import defaultdict + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--base-dir', type=str) + parser.add_argument('--gpt4-result', type=str) + parser.add_argument('--requery-result', type=str) + parser.add_argument('--our-result', type=str) + parser.add_argument('--output-result', type=str) + parser.add_argument('--split', type=str, default='test') + parser.add_argument('--options', type=list, default=["A", "B", "C", "D", "E"]) + return parser.parse_args() + + +def convert_caps(results): + fakecaps = [] + for result in results: + image_id = result['question_id'] + caption = result['text'] + fakecaps.append({"image_id": int(image_id), "caption": caption}) + return fakecaps + + +def get_pred_idx(prediction, choices, options): + """ + Get the index (e.g. 2) from the prediction (e.g. 'C') + """ + if prediction in options[:len(choices)]: + return options.index(prediction) + else: + return random.choice(range(len(choices))) + + +if __name__ == "__main__": + args = get_args() + + base_dir = args.base_dir + split_indices = json.load(open(os.path.join(base_dir, "pid_splits.json")))[args.split] + problems = json.load(open(os.path.join(base_dir, "problems.json"))) + our_predictions = [json.loads(line) for line in open(args.our_result)] + our_predictions = {pred['question_id']: pred for pred in our_predictions} + split_problems = {idx: problems[idx] for idx in split_indices} + + requery_predictions = [json.loads(line) for line in open(args.requery_result)] + requery_predictions = {pred['question_id']: pred for pred in requery_predictions} + + gpt4_predictions = json.load(open(args.gpt4_result))['outputs'] + + results = defaultdict(lambda: 0) + + sqa_results = {} + sqa_results['acc'] = None + sqa_results['correct'] = None + sqa_results['count'] = None + sqa_results['results'] = {} + sqa_results['outputs'] = {} + + for prob_id, prob in split_problems.items(): + if prob_id not in our_predictions: + assert False + if prob_id not in gpt4_predictions: + assert False + our_pred = our_predictions[prob_id]['text'] + gpt4_pred = gpt4_predictions[prob_id] + if prob_id not in requery_predictions: + results['missing_requery'] += 1 + requery_pred = "MISSING" + else: + requery_pred = requery_predictions[prob_id]['text'] + + pattern = re.compile(r'The answer is ([A-Z]).') + our_res = pattern.findall(our_pred) + if len(our_res) == 1: + our_answer = our_res[0] # 'A', 'B', ... + else: + our_answer = "FAILED" + + requery_res = pattern.findall(requery_pred) + if len(requery_res) == 1: + requery_answer = requery_res[0] # 'A', 'B', ... + else: + requery_answer = "FAILED" + + gpt4_res = pattern.findall(gpt4_pred) + if len(gpt4_res) == 1: + gpt4_answer = gpt4_res[0] # 'A', 'B', ... + else: + gpt4_answer = "FAILED" + + our_pred_idx = get_pred_idx(our_answer, prob['choices'], args.options) + gpt4_pred_idx = get_pred_idx(gpt4_answer, prob['choices'], args.options) + requery_pred_idx = get_pred_idx(requery_answer, prob['choices'], args.options) + + results['total'] += 1 + + if gpt4_answer == 'FAILED': + results['gpt4_failed'] += 1 + if gpt4_pred_idx == prob['answer']: + results['gpt4_correct'] += 1 + if our_pred_idx == prob['answer']: + results['gpt4_ourvisual_correct'] += 1 + elif gpt4_pred_idx == prob['answer']: + results['gpt4_correct'] += 1 + results['gpt4_ourvisual_correct'] += 1 + + if our_pred_idx == prob['answer']: + results['our_correct'] += 1 + + if requery_answer == 'FAILED': + sqa_results['results'][prob_id] = our_pred_idx + if our_pred_idx == prob['answer']: + results['requery_correct'] += 1 + else: + sqa_results['results'][prob_id] = requery_pred_idx + if requery_pred_idx == prob['answer']: + results['requery_correct'] += 1 + else: + print(f""" +Question ({args.options[prob['answer']]}): {our_predictions[prob_id]['prompt']} +Our ({our_answer}): {our_pred} +GPT-4 ({gpt4_answer}): {gpt4_pred} +Requery ({requery_answer}): {requery_pred} +print("=====================================") +""") + + if gpt4_pred_idx == prob['answer'] or our_pred_idx == prob['answer']: + results['correct_upperbound'] += 1 + + total = results['total'] + print(f'Total: {total}, Our-Correct: {results["our_correct"]}, Accuracy: {results["our_correct"] / total * 100:.2f}%') + print(f'Total: {total}, GPT-4-Correct: {results["gpt4_correct"]}, Accuracy: {results["gpt4_correct"] / total * 100:.2f}%') + print(f'Total: {total}, GPT-4 NO-ANS (RANDOM): {results["gpt4_failed"]}, Percentage: {results["gpt4_failed"] / total * 100:.2f}%') + print(f'Total: {total}, GPT-4-OursVisual-Correct: {results["gpt4_ourvisual_correct"]}, Accuracy: {results["gpt4_ourvisual_correct"] / total * 100:.2f}%') + print(f'Total: {total}, Requery-Correct: {results["requery_correct"]}, Accuracy: {results["requery_correct"] / total * 100:.2f}%') + print(f'Total: {total}, Correct upper: {results["correct_upperbound"]}, Accuracy: {results["correct_upperbound"] / total * 100:.2f}%') + + sqa_results['acc'] = results["requery_correct"] / total * 100 + sqa_results['correct'] = results["requery_correct"] + sqa_results['count'] = total + + with open(args.output_result, 'w') as f: + json.dump(sqa_results, f, indent=2) + diff --git a/llava-phi/llava_phi/eval/eval_textvqa.py b/llava-phi/llava_phi/eval/eval_textvqa.py new file mode 100644 index 0000000000000000000000000000000000000000..ef6ebf2cf83cd3e1434c6d6dff79ac5f5a152c60 --- /dev/null +++ b/llava-phi/llava_phi/eval/eval_textvqa.py @@ -0,0 +1,65 @@ +import os +import argparse +import json +import re + +from llava_phi.eval.m4c_evaluator import TextVQAAccuracyEvaluator + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--annotation-file', type=str) + parser.add_argument('--result-file', type=str) + parser.add_argument('--result-dir', type=str) + return parser.parse_args() + + +def prompt_processor(prompt): + if prompt.startswith('OCR tokens: '): + pattern = r"Question: (.*?) Short answer:" + match = re.search(pattern, prompt, re.DOTALL) + question = match.group(1) + elif 'Reference OCR token: ' in prompt and len(prompt.split('\n')) == 3: + if prompt.startswith('Reference OCR token:'): + question = prompt.split('\n')[1] + else: + question = prompt.split('\n')[0] + elif len(prompt.split('\n')) == 2: + question = prompt.split('\n')[0] + else: + assert False + + return question.lower() + + +def eval_single(annotation_file, result_file): + experiment_name = os.path.splitext(os.path.basename(result_file))[0] + print(experiment_name) + annotations = json.load(open(annotation_file))['data'] + annotations = {(annotation['image_id'], annotation['question'].lower()): annotation for annotation in annotations} + results = [json.loads(line) for line in open(result_file)] + + pred_list = [] + for result in results: + annotation = annotations[(result['question_id'], prompt_processor(result['prompt']))] + pred_list.append({ + "pred_answer": result['text'], + "gt_answers": annotation['answers'], + }) + + evaluator = TextVQAAccuracyEvaluator() + print('Samples: {}\nAccuracy: {:.2f}%\n'.format(len(pred_list), 100. * evaluator.eval_pred_list(pred_list))) + + +if __name__ == "__main__": + args = get_args() + + if args.result_file is not None: + eval_single(args.annotation_file, args.result_file) + + if args.result_dir is not None: + for result_file in sorted(os.listdir(args.result_dir)): + if not result_file.endswith('.jsonl'): + print(f'Skipping {result_file}') + continue + eval_single(args.annotation_file, os.path.join(args.result_dir, result_file)) diff --git a/llava-phi/llava_phi/eval/m4c_evaluator.py b/llava-phi/llava_phi/eval/m4c_evaluator.py new file mode 100644 index 0000000000000000000000000000000000000000..e30e958da061a4f0a0bfe34b12d2fcaeba7ff2f4 --- /dev/null +++ b/llava-phi/llava_phi/eval/m4c_evaluator.py @@ -0,0 +1,334 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import re + +from tqdm import tqdm + + +class EvalAIAnswerProcessor: + """ + Processes an answer similar to Eval AI + copied from + https://github.com/facebookresearch/mmf/blob/c46b3b3391275b4181567db80943473a89ab98ab/pythia/tasks/processors.py#L897 + """ + + CONTRACTIONS = { + "aint": "ain't", + "arent": "aren't", + "cant": "can't", + "couldve": "could've", + "couldnt": "couldn't", + "couldn'tve": "couldn't've", + "couldnt've": "couldn't've", + "didnt": "didn't", + "doesnt": "doesn't", + "dont": "don't", + "hadnt": "hadn't", + "hadnt've": "hadn't've", + "hadn'tve": "hadn't've", + "hasnt": "hasn't", + "havent": "haven't", + "hed": "he'd", + "hed've": "he'd've", + "he'dve": "he'd've", + "hes": "he's", + "howd": "how'd", + "howll": "how'll", + "hows": "how's", + "Id've": "I'd've", + "I'dve": "I'd've", + "Im": "I'm", + "Ive": "I've", + "isnt": "isn't", + "itd": "it'd", + "itd've": "it'd've", + "it'dve": "it'd've", + "itll": "it'll", + "let's": "let's", + "maam": "ma'am", + "mightnt": "mightn't", + "mightnt've": "mightn't've", + "mightn'tve": "mightn't've", + "mightve": "might've", + "mustnt": "mustn't", + "mustve": "must've", + "neednt": "needn't", + "notve": "not've", + "oclock": "o'clock", + "oughtnt": "oughtn't", + "ow's'at": "'ow's'at", + "'ows'at": "'ow's'at", + "'ow'sat": "'ow's'at", + "shant": "shan't", + "shed've": "she'd've", + "she'dve": "she'd've", + "she's": "she's", + "shouldve": "should've", + "shouldnt": "shouldn't", + "shouldnt've": "shouldn't've", + "shouldn'tve": "shouldn't've", + "somebody'd": "somebodyd", + "somebodyd've": "somebody'd've", + "somebody'dve": "somebody'd've", + "somebodyll": "somebody'll", + "somebodys": "somebody's", + "someoned": "someone'd", + "someoned've": "someone'd've", + "someone'dve": "someone'd've", + "someonell": "someone'll", + "someones": "someone's", + "somethingd": "something'd", + "somethingd've": "something'd've", + "something'dve": "something'd've", + "somethingll": "something'll", + "thats": "that's", + "thered": "there'd", + "thered've": "there'd've", + "there'dve": "there'd've", + "therere": "there're", + "theres": "there's", + "theyd": "they'd", + "theyd've": "they'd've", + "they'dve": "they'd've", + "theyll": "they'll", + "theyre": "they're", + "theyve": "they've", + "twas": "'twas", + "wasnt": "wasn't", + "wed've": "we'd've", + "we'dve": "we'd've", + "weve": "we've", + "werent": "weren't", + "whatll": "what'll", + "whatre": "what're", + "whats": "what's", + "whatve": "what've", + "whens": "when's", + "whered": "where'd", + "wheres": "where's", + "whereve": "where've", + "whod": "who'd", + "whod've": "who'd've", + "who'dve": "who'd've", + "wholl": "who'll", + "whos": "who's", + "whove": "who've", + "whyll": "why'll", + "whyre": "why're", + "whys": "why's", + "wont": "won't", + "wouldve": "would've", + "wouldnt": "wouldn't", + "wouldnt've": "wouldn't've", + "wouldn'tve": "wouldn't've", + "yall": "y'all", + "yall'll": "y'all'll", + "y'allll": "y'all'll", + "yall'd've": "y'all'd've", + "y'alld've": "y'all'd've", + "y'all'dve": "y'all'd've", + "youd": "you'd", + "youd've": "you'd've", + "you'dve": "you'd've", + "youll": "you'll", + "youre": "you're", + "youve": "you've", + } + + NUMBER_MAP = { + "none": "0", + "zero": "0", + "one": "1", + "two": "2", + "three": "3", + "four": "4", + "five": "5", + "six": "6", + "seven": "7", + "eight": "8", + "nine": "9", + "ten": "10", + } + ARTICLES = ["a", "an", "the"] + PERIOD_STRIP = re.compile(r"(?!<=\d)(\.)(?!\d)") + COMMA_STRIP = re.compile(r"(?<=\d)(\,)+(?=\d)") + PUNCTUATIONS = [ + ";", + r"/", + "[", + "]", + '"', + "{", + "}", + "(", + ")", + "=", + "+", + "\\", + "_", + "-", + ">", + "<", + "@", + "`", + ",", + "?", + "!", + ] + + def __init__(self, *args, **kwargs): + pass + + def word_tokenize(self, word): + word = word.lower() + word = word.replace(",", "").replace("?", "").replace("'s", " 's") + return word.strip() + + def process_punctuation(self, in_text): + out_text = in_text + for p in self.PUNCTUATIONS: + if (p + " " in in_text or " " + p in in_text) or ( + re.search(self.COMMA_STRIP, in_text) is not None + ): + out_text = out_text.replace(p, "") + else: + out_text = out_text.replace(p, " ") + out_text = self.PERIOD_STRIP.sub("", out_text, re.UNICODE) + return out_text + + def process_digit_article(self, in_text): + out_text = [] + temp_text = in_text.lower().split() + for word in temp_text: + word = self.NUMBER_MAP.setdefault(word, word) + if word not in self.ARTICLES: + out_text.append(word) + else: + pass + for word_id, word in enumerate(out_text): + if word in self.CONTRACTIONS: + out_text[word_id] = self.CONTRACTIONS[word] + out_text = " ".join(out_text) + return out_text + + def __call__(self, item): + item = self.word_tokenize(item) + item = item.replace("\n", " ").replace("\t", " ").strip() + item = self.process_punctuation(item) + item = self.process_digit_article(item) + return item + + +class TextVQAAccuracyEvaluator: + def __init__(self): + self.answer_processor = EvalAIAnswerProcessor() + + def _compute_answer_scores(self, raw_answers): + """ + compute the accuracy (soft score) of human answers + """ + answers = [self.answer_processor(a) for a in raw_answers] + assert len(answers) == 10 + gt_answers = list(enumerate(answers)) + unique_answers = set(answers) + unique_answer_scores = {} + + for unique_answer in unique_answers: + accs = [] + for gt_answer in gt_answers: + other_answers = [item for item in gt_answers if item != gt_answer] + matching_answers = [ + item for item in other_answers if item[1] == unique_answer + ] + acc = min(1, float(len(matching_answers)) / 3) + accs.append(acc) + unique_answer_scores[unique_answer] = sum(accs) / len(accs) + + return unique_answer_scores + + def eval_pred_list(self, pred_list): + pred_scores = [] + for entry in tqdm(pred_list): + pred_answer = self.answer_processor(entry["pred_answer"]) + unique_answer_scores = self._compute_answer_scores(entry["gt_answers"]) + score = unique_answer_scores.get(pred_answer, 0.0) + pred_scores.append(score) + + accuracy = sum(pred_scores) / len(pred_scores) + return accuracy + + +class STVQAAccuracyEvaluator: + def __init__(self): + self.answer_processor = EvalAIAnswerProcessor() + + def eval_pred_list(self, pred_list): + pred_scores = [] + for entry in pred_list: + pred_answer = self.answer_processor(entry["pred_answer"]) + gts = [self.answer_processor(a) for a in entry["gt_answers"]] + score = 1.0 if pred_answer in gts else 0.0 + pred_scores.append(score) + + accuracy = sum(pred_scores) / len(pred_scores) + return accuracy + + +class STVQAANLSEvaluator: + def __init__(self): + import editdistance # install with `pip install editdistance` + + self.get_edit_distance = editdistance.eval + + def get_anls(self, s1, s2): + s1 = s1.lower().strip() + s2 = s2.lower().strip() + iou = 1 - self.get_edit_distance(s1, s2) / max(len(s1), len(s2)) + anls = iou if iou >= 0.5 else 0.0 + return anls + + def eval_pred_list(self, pred_list): + pred_scores = [] + for entry in pred_list: + anls = max( + self.get_anls(entry["pred_answer"], gt) for gt in entry["gt_answers"] + ) + pred_scores.append(anls) + + accuracy = sum(pred_scores) / len(pred_scores) + return accuracy + + +class TextCapsBleu4Evaluator: + def __init__(self): + # The following script requires Java 1.8.0 and pycocotools installed. + # The pycocoevalcap can be installed with pip as + # pip install git+https://github.com/ronghanghu/coco-caption.git@python23 + # Original pycocoevalcap code is at https://github.com/tylin/coco-caption + # but has no python3 support yet. + try: + from pycocoevalcap.bleu.bleu import Bleu + from pycocoevalcap.tokenizer.ptbtokenizer import PTBTokenizer + except ModuleNotFoundError: + print( + "Please install pycocoevalcap module using " + "pip install git+https://github.com/ronghanghu/coco-caption.git@python23" # noqa + ) + raise + + self.tokenizer = PTBTokenizer() + self.scorer = Bleu(4) + + def eval_pred_list(self, pred_list): + # Create reference and hypotheses captions. + gts = {} + res = {} + for idx, entry in enumerate(pred_list): + gts[idx] = [{"caption": a} for a in entry["gt_answers"]] + res[idx] = [{"caption": entry["pred_answer"]}] + + gts = self.tokenizer.tokenize(gts) + res = self.tokenizer.tokenize(res) + score, _ = self.scorer.compute_score(gts, res) + + bleu4 = score[3] # score is (Bleu-1, Bleu-2, Bleu-3, Bleu-4) + return bleu4 diff --git a/llava-phi/llava_phi/eval/model_qa.py b/llava-phi/llava_phi/eval/model_qa.py new file mode 100644 index 0000000000000000000000000000000000000000..877e350cef217b1062fd86b99cb1e617e737d8c4 --- /dev/null +++ b/llava-phi/llava_phi/eval/model_qa.py @@ -0,0 +1,88 @@ +import argparse +from transformers import AutoTokenizer, AutoModelForCausalLM, StoppingCriteria +import torch +import os +import json +from tqdm import tqdm +import shortuuid + +from llava_phi.conversation import default_conversation +from llava_phi.utils import disable_torch_init + + +# new stopping implementation +class KeywordsStoppingCriteria(StoppingCriteria): + def __init__(self, keywords, tokenizer, input_ids): + self.keywords = keywords + self.tokenizer = tokenizer + self.start_len = None + self.input_ids = input_ids + + def __call__(self, output_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + if self.start_len is None: + self.start_len = self.input_ids.shape[1] + else: + outputs = self.tokenizer.batch_decode(output_ids[:, self.start_len:], skip_special_tokens=True)[0] + for keyword in self.keywords: + if keyword in outputs: + return True + return False + + +@torch.inference_mode() +def eval_model(model_name, questions_file, answers_file): + # Model + disable_torch_init() + model_name = os.path.expanduser(model_name) + tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False) + model = AutoModelForCausalLM.from_pretrained(model_name, + torch_dtype=torch.float16).cuda() + + + ques_file = open(os.path.expanduser(questions_file), "r") + ans_file = open(os.path.expanduser(answers_file), "w") + for i, line in enumerate(tqdm(ques_file)): + idx = json.loads(line)["question_id"] + qs = json.loads(line)["text"] + cat = json.loads(line)["category"] + conv = default_conversation.copy() + conv.append_message(conv.roles[0], qs) + prompt = conv.get_prompt() + inputs = tokenizer([prompt]) + input_ids = torch.as_tensor(inputs.input_ids).cuda() + # stopping_criteria = KeywordsStoppingCriteria([conv.sep], tokenizer, input_ids) + output_ids = model.generate( + input_ids, + do_sample=True, + use_cache=True, + temperature=0.7, + max_new_tokens=1024, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + # stopping_criteria=[stopping_criteria] + ) + outputs = tokenizer.batch_decode(output_ids, skip_special_tokens=True)[0] + try: + index = outputs.index(conv.sep, len(prompt)) + except ValueError: + outputs += conv.sep + index = outputs.index(conv.sep, len(prompt)) + + outputs = outputs[len(prompt) + len(conv.roles[1]) + 2:index].strip() + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "text": outputs, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + ans_file.flush() + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-name", type=str, default="facebook/opt-350m") + parser.add_argument("--question-file", type=str, default="tables/question.jsonl") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + args = parser.parse_args() + + eval_model(args.model_name, args.question_file, args.answers_file) diff --git a/llava-phi/llava_phi/eval/model_vqa.py b/llava-phi/llava_phi/eval/model_vqa.py new file mode 100644 index 0000000000000000000000000000000000000000..c0ddcb93319054f5905665e26095f7ec3a1b403f --- /dev/null +++ b/llava-phi/llava_phi/eval/model_vqa.py @@ -0,0 +1,115 @@ +import argparse +import torch +import os +import json +from tqdm import tqdm +import shortuuid + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria + +from PIL import Image +import math + + +def split_list(lst, n): + """Split a list into n (roughly) equal-sized chunks""" + chunk_size = math.ceil(len(lst) / n) # integer division + return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + + +def get_chunk(lst, n, k): + chunks = split_list(lst, n) + return chunks[k] + + +def eval_model(args): + # Model + disable_torch_init() + model_path = os.path.expanduser(args.model_path) + model_name = get_model_name_from_path(model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(model_path, args.model_base, model_name) + + questions = [json.loads(q) for q in open(os.path.expanduser(args.question_file), "r")] + questions = get_chunk(questions, args.num_chunks, args.chunk_idx) + answers_file = os.path.expanduser(args.answers_file) + os.makedirs(os.path.dirname(answers_file), exist_ok=True) + ans_file = open(answers_file, "w") + for line in tqdm(questions): + idx = line["question_id"] + image_file = line["image"] + qs = line["text"] + cur_prompt = qs + if model.config.mm_use_im_start_end: + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + image = Image.open(os.path.join(args.image_folder, image_file)) + image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + keywords = [stop_str] + stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids) + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor.unsqueeze(0).cuda(), + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + top_p=args.top_p, + num_beams=args.num_beams, + # no_repeat_ngram_size=3, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + max_new_tokens=1024, + use_cache=True + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "image_id": image_file, + "prompt": cur_prompt, + "text": outputs, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + ans_file.flush() + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-folder", type=str, default="") + parser.add_argument("--question-file", type=str, default="tables/question.jsonl") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + parser.add_argument("--conv-mode", type=str, default="llava_v1") + parser.add_argument("--num-chunks", type=int, default=1) + parser.add_argument("--chunk-idx", type=int, default=0) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--top_p", type=float, default=None) + parser.add_argument("--num_beams", type=int, default=1) + args = parser.parse_args() + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/model_vqa_loader.py b/llava-phi/llava_phi/eval/model_vqa_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..027303ef133f9cd4e2190fe99112d2bba7a36b55 --- /dev/null +++ b/llava-phi/llava_phi/eval/model_vqa_loader.py @@ -0,0 +1,144 @@ +import argparse +import torch +import os +import json +from tqdm import tqdm +import shortuuid + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, process_images, get_model_name_from_path +from torch.utils.data import Dataset, DataLoader + +from PIL import Image +import math + + +def split_list(lst, n): + """Split a list into n (roughly) equal-sized chunks""" + chunk_size = math.ceil(len(lst) / n) # integer division + return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + + +def get_chunk(lst, n, k): + chunks = split_list(lst, n) + return chunks[k] + + +# Custom dataset class +class CustomDataset(Dataset): + def __init__(self, questions, image_folder, tokenizer, image_processor, model_config): + self.questions = questions + self.image_folder = image_folder + self.tokenizer = tokenizer + self.image_processor = image_processor + self.model_config = model_config + + def __getitem__(self, index): + line = self.questions[index] + image_file = line["image"] + qs = line["text"] + if self.model_config.mm_use_im_start_end: + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + image = Image.open(os.path.join(self.image_folder, image_file)).convert('RGB') + image_tensor = process_images([image], self.image_processor, self.model_config)[0] + + input_ids = tokenizer_image_token(prompt, self.tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt') + + return input_ids, image_tensor + + def __len__(self): + return len(self.questions) + + +# DataLoader +def create_data_loader(questions, image_folder, tokenizer, image_processor, model_config, batch_size=1, num_workers=4): + assert batch_size == 1, "batch_size must be 1" + dataset = CustomDataset(questions, image_folder, tokenizer, image_processor, model_config) + data_loader = DataLoader(dataset, batch_size=batch_size, num_workers=num_workers, shuffle=False) + return data_loader + + +def eval_model(args): + # Model + disable_torch_init() + model_path = os.path.expanduser(args.model_path) + model_name = get_model_name_from_path(model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(model_path, args.model_base, model_name) + + questions = [json.loads(q) for q in open(os.path.expanduser(args.question_file), "r")] + questions = get_chunk(questions, args.num_chunks, args.chunk_idx) + answers_file = os.path.expanduser(args.answers_file) + os.makedirs(os.path.dirname(answers_file), exist_ok=True) + ans_file = open(answers_file, "w") + + data_loader = create_data_loader(questions, args.image_folder, tokenizer, image_processor, model.config) + + for (input_ids, image_tensor), line in tqdm(zip(data_loader, questions), total=len(questions)): + idx = line["question_id"] + cur_prompt = line["text"] + + stop_str = conv_templates[args.conv_mode].sep if conv_templates[args.conv_mode].sep_style != SeparatorStyle.TWO else conv_templates[args.conv_mode].sep2 + input_ids = input_ids.to(device='cuda', non_blocking=True) + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor.to(device='cuda', non_blocking=True), + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + top_p=args.top_p, + # no_repeat_ngram_size=3, + num_beams=args.num_beams, + max_new_tokens=128, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + use_cache=True + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "prompt": cur_prompt, + "text": outputs, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + # ans_file.flush() + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-folder", type=str, default="") + parser.add_argument("--question-file", type=str, default="tables/question.jsonl") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + parser.add_argument("--conv-mode", type=str, default="v0") + parser.add_argument("--num-chunks", type=int, default=1) + parser.add_argument("--chunk-idx", type=int, default=0) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--top_p", type=float, default=None) + parser.add_argument("--num_beams", type=int, default=1) + args = parser.parse_args() + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/model_vqa_mmbench.py b/llava-phi/llava_phi/eval/model_vqa_mmbench.py new file mode 100644 index 0000000000000000000000000000000000000000..b4eb2e4c363cd4f120b3d0b0995427c5c47ff64d --- /dev/null +++ b/llava-phi/llava_phi/eval/model_vqa_mmbench.py @@ -0,0 +1,173 @@ +import argparse +import torch +import os +import json +import pandas as pd +from tqdm import tqdm +import shortuuid + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, process_images, load_image_from_base64, get_model_name_from_path + +from PIL import Image +import math + + +all_options = ['A', 'B', 'C', 'D'] + + +def split_list(lst, n): + """Split a list into n (roughly) equal-sized chunks""" + chunk_size = math.ceil(len(lst) / n) # integer division + return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + + +def get_chunk(lst, n, k): + chunks = split_list(lst, n) + return chunks[k] + + +def is_none(value): + if value is None: + return True + if type(value) is float and math.isnan(value): + return True + if type(value) is str and value.lower() == 'nan': + return True + if type(value) is str and value.lower() == 'none': + return True + return False + +def get_options(row, options): + parsed_options = [] + for option in options: + option_value = row[option] + if is_none(option_value): + break + parsed_options.append(option_value) + return parsed_options + + +def eval_model(args): + # Model + disable_torch_init() + model_path = os.path.expanduser(args.model_path) + model_name = get_model_name_from_path(model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(model_path, args.model_base, model_name) + + questions = pd.read_table(os.path.expanduser(args.question_file)) + questions = get_chunk(questions, args.num_chunks, args.chunk_idx) + answers_file = os.path.expanduser(args.answers_file) + os.makedirs(os.path.dirname(answers_file), exist_ok=True) + ans_file = open(answers_file, "w") + + if 'plain' in model_name and 'finetune' not in model_name.lower() and 'mmtag' not in args.conv_mode: + args.conv_mode = args.conv_mode + '_mmtag' + print(f'It seems that this is a plain model, but it is not using a mmtag prompt, auto switching to {args.conv_mode}.') + + for index, row in tqdm(questions.iterrows(), total=len(questions)): + options = get_options(row, all_options) + cur_option_char = all_options[:len(options)] + + if args.all_rounds: + num_rounds = len(options) + else: + num_rounds = 1 + + for round_idx in range(num_rounds): + idx = row['index'] + question = row['question'] + hint = row['hint'] + image = load_image_from_base64(row['image']) + if not is_none(hint): + question = hint + '\n' + question + for option_char, option in zip(all_options[:len(options)], options): + question = question + '\n' + option_char + '. ' + option + qs = cur_prompt = question + if model.config.mm_use_im_start_end: + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + + if args.single_pred_prompt: + if args.lang == 'cn': + qs = qs + '\n' + "请直接回答选项字母。" + else: + qs = qs + '\n' + "Answer with the option's letter from the given choices directly." + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + image_tensor = process_images([image], image_processor, model.config)[0] + # image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor.unsqueeze(0).cuda(), + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + top_p=args.top_p, + num_beams=args.num_beams, + # no_repeat_ngram_size=3, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + max_new_tokens=1024, + use_cache=True + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "round_id": round_idx, + "prompt": cur_prompt, + "text": outputs, + "options": options, + "option_char": cur_option_char, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + ans_file.flush() + + # rotate options + options = options[1:] + options[:1] + cur_option_char = cur_option_char[1:] + cur_option_char[:1] + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-folder", type=str, default="") + parser.add_argument("--question-file", type=str, default="tables/question.jsonl") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + parser.add_argument("--conv-mode", type=str, default="llava_v1") + parser.add_argument("--num-chunks", type=int, default=1) + parser.add_argument("--chunk-idx", type=int, default=0) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--top_p", type=float, default=None) + parser.add_argument("--num_beams", type=int, default=1) + parser.add_argument("--all-rounds", action="store_true") + parser.add_argument("--single-pred-prompt", action="store_true") + parser.add_argument("--lang", type=str, default="en") + args = parser.parse_args() + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/model_vqa_phi.py b/llava-phi/llava_phi/eval/model_vqa_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..e487451afacf9ee8cf6360243a543ac86e379378 --- /dev/null +++ b/llava-phi/llava_phi/eval/model_vqa_phi.py @@ -0,0 +1,117 @@ +import argparse +import torch +import os +import json +from tqdm import tqdm +import shortuuid + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria + +from PIL import Image +import math + + +def split_list(lst, n): + """Split a list into n (roughly) equal-sized chunks""" + chunk_size = math.ceil(len(lst) / n) # integer division + return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + + +def get_chunk(lst, n, k): + chunks = split_list(lst, n) + return chunks[k] + + +def eval_model(args): + # Model + disable_torch_init() + model_path = os.path.expanduser(args.model_path) + model_name = get_model_name_from_path(model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(model_path, args.model_base, model_name) + + print(model) + questions = [json.loads(q) for q in open(os.path.expanduser(args.question_file), "r")] + questions = get_chunk(questions, args.num_chunks, args.chunk_idx)[:10] + answers_file = os.path.expanduser(args.answers_file) + os.makedirs(os.path.dirname(answers_file), exist_ok=True) + ans_file = open(answers_file, "w") + for line in tqdm(questions): + idx = line["question_id"] + image_file = line["image"] + qs = line["text"] + cur_prompt = qs + if model.config.mm_use_im_start_end: + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + image = Image.open(os.path.join(args.image_folder, image_file)) + image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + keywords = [stop_str] + stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids) + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor.unsqueeze(0).cuda(), + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + top_p=args.top_p, + num_beams=args.num_beams, + # no_repeat_ngram_size=3, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + max_new_tokens=1024, + use_cache=True) + + input_token_len = input_ids.shape[1] + print(output_ids[:, input_token_len:]) + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "image_id": image_file, + "prompt": cur_prompt, + "text": outputs, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + ans_file.flush() + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-folder", type=str, default="") + parser.add_argument("--question-file", type=str, default="tables/question.jsonl") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + parser.add_argument("--conv-mode", type=str, default="llava_v1") + parser.add_argument("--num-chunks", type=int, default=1) + parser.add_argument("--chunk-idx", type=int, default=0) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--top_p", type=float, default=None) + parser.add_argument("--num_beams", type=int, default=1) + args = parser.parse_args() + print(args) + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/model_vqa_science.py b/llava-phi/llava_phi/eval/model_vqa_science.py new file mode 100644 index 0000000000000000000000000000000000000000..1ae2f0426ad8572ec543e2687014bc9dd784367c --- /dev/null +++ b/llava-phi/llava_phi/eval/model_vqa_science.py @@ -0,0 +1,152 @@ +import argparse +import torch +import os +import json +from tqdm import tqdm +import shortuuid + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria + +from PIL import Image +import math + + +def split_list(lst, n): + """Split a list into n (roughly) equal-sized chunks""" + chunk_size = math.ceil(len(lst) / n) # integer division + return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + + +def get_chunk(lst, n, k): + chunks = split_list(lst, n) + return chunks[k] + + +def eval_model(args): + # Model + disable_torch_init() + model_path = os.path.expanduser(args.model_path) + model_name = get_model_name_from_path(model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(model_path, args.model_base, model_name) + + questions = json.load(open(os.path.expanduser(args.question_file), "r")) + questions = get_chunk(questions, args.num_chunks, args.chunk_idx) + answers_file = os.path.expanduser(args.answers_file) + os.makedirs(os.path.dirname(answers_file), exist_ok=True) + ans_file = open(answers_file, "w") + for i, line in enumerate(tqdm(questions)): + idx = line["id"] + question = line['conversations'][0] + qs = question['value'].replace('', '').strip() + cur_prompt = qs + + if 'image' in line: + image_file = line["image"] + image = Image.open(os.path.join(args.image_folder, image_file)) + image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + images = image_tensor.unsqueeze(0).cuda() + if getattr(model.config, 'mm_use_im_start_end', False): + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + cur_prompt = '' + '\n' + cur_prompt + else: + images = None + + if args.single_pred_prompt: + qs = qs + '\n' + "Answer with the option's letter from the given choices directly." + cur_prompt = cur_prompt + '\n' + "Answer with the option's letter from the given choices directly." + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + keywords = [stop_str] + stopping_criteria = [KeywordsStoppingCriteria(keywords, tokenizer, input_ids)] if conv.version == "v0" else None + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=images, + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + max_new_tokens=1024, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + use_cache=True + # stopping_criteria=stopping_criteria, + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + + # prompt for answer + if args.answer_prompter: + outputs_reasoning = outputs + input_ids = tokenizer_image_token(prompt + outputs_reasoning + ' ###\nANSWER:', tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=images, + do_sample=True if args.temperature > 0 else False, + temperature=args.temperature, + max_new_tokens=64, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + use_cache=True + # stopping_criteria=[stopping_criteria] + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + outputs = outputs_reasoning + '\n The answer is ' + outputs + + ans_id = shortuuid.uuid() + ans_file.write(json.dumps({"question_id": idx, + "prompt": cur_prompt, + "text": outputs, + "answer_id": ans_id, + "model_id": model_name, + "metadata": {}}) + "\n") + ans_file.flush() + ans_file.close() + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-folder", type=str, default="") + parser.add_argument("--question-file", type=str, default="tables/question.json") + parser.add_argument("--answers-file", type=str, default="answer.jsonl") + parser.add_argument("--conv-mode", type=str, default="llava_v0") + parser.add_argument("--num-chunks", type=int, default=1) + parser.add_argument("--chunk-idx", type=int, default=0) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--answer-prompter", action="store_true") + parser.add_argument("--single-pred-prompt", action="store_true") + args = parser.parse_args() + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/qa_baseline_gpt35.py b/llava-phi/llava_phi/eval/qa_baseline_gpt35.py new file mode 100644 index 0000000000000000000000000000000000000000..babab6e12b4bb8cfa74a7edfa5e56cd1b3e2bf6c --- /dev/null +++ b/llava-phi/llava_phi/eval/qa_baseline_gpt35.py @@ -0,0 +1,74 @@ +"""Generate answers with GPT-3.5""" +# Note: you need to be using OpenAI Python v0.27.0 for the code below to work +import argparse +import json +import os +import time +import concurrent.futures + +import openai +import tqdm +import shortuuid + +MODEL = 'gpt-3.5-turbo' +MODEL_ID = 'gpt-3.5-turbo:20230327' + +def get_answer(question_id: int, question: str, max_tokens: int): + ans = { + 'answer_id': shortuuid.uuid(), + 'question_id': question_id, + 'model_id': MODEL_ID, + } + for _ in range(3): + try: + response = openai.ChatCompletion.create( + model=MODEL, + messages=[{ + 'role': 'system', + 'content': 'You are a helpful assistant.' + }, { + 'role': 'user', + 'content': question, + }], + max_tokens=max_tokens, + ) + ans['text'] = response['choices'][0]['message']['content'] + return ans + except Exception as e: + print('[ERROR]', e) + ans['text'] = '#ERROR#' + time.sleep(1) + return ans + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='ChatGPT answer generation.') + parser.add_argument('-q', '--question') + parser.add_argument('-o', '--output') + parser.add_argument('--max-tokens', type=int, default=1024, help='maximum number of tokens produced in the output') + args = parser.parse_args() + + questions_dict = {} + with open(os.path.expanduser(args.question)) as f: + for line in f: + if not line: + continue + q = json.loads(line) + questions_dict[q['question_id']] = q['text'] + + answers = [] + + with concurrent.futures.ThreadPoolExecutor(max_workers=32) as executor: + futures = [] + for qid, question in questions_dict.items(): + future = executor.submit(get_answer, qid, question, args.max_tokens) + futures.append(future) + + for future in tqdm.tqdm(concurrent.futures.as_completed(futures), total=len(futures)): + answers.append(future.result()) + + answers.sort(key=lambda x: x['question_id']) + + with open(os.path.expanduser(args.output), 'w') as f: + table = [json.dumps(ans) for ans in answers] + f.write('\n'.join(table)) diff --git a/llava-phi/llava_phi/eval/run_llava_phi.py b/llava-phi/llava_phi/eval/run_llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..165764120bff787267d31b6b19bf8c5a705e81ae --- /dev/null +++ b/llava-phi/llava_phi/eval/run_llava_phi.py @@ -0,0 +1,93 @@ +import argparse +import torch + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path + +from PIL import Image + +import requests +from PIL import Image +from io import BytesIO + + +def load_image(image_file): + if image_file.startswith('http') or image_file.startswith('https'): + response = requests.get(image_file) + image = Image.open(BytesIO(response.content)).convert('RGB') + else: + image = Image.open(image_file).convert('RGB') + return image + + +def eval_model(args): + # Model + disable_torch_init() + + model_name = get_model_name_from_path(args.model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(args.model_path, args.model_base, model_name) + + qs = args.query + if model.config.mm_use_im_start_end: + qs = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + qs + else: + qs = DEFAULT_IMAGE_TOKEN + '\n' + qs + + if 'phi' in model_name.lower(): + conv_mode = "phi-2_v0" + else: + conv_mode = "default" + + if args.conv_mode is not None and conv_mode != args.conv_mode: + print('[WARNING] the auto inferred conversation mode is {}, while `--conv-mode` is {}, using {}'.format(conv_mode, args.conv_mode, args.conv_mode)) + else: + args.conv_mode = conv_mode + + conv = conv_templates[args.conv_mode].copy() + conv.append_message(conv.roles[0], qs) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + image = load_image(args.image_file) + image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'].cuda() + + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor, + do_sample=True, + temperature=0.2, + max_new_tokens=1024, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + use_cache=True, + ) + + input_token_len = input_ids.shape[1] + n_diff_input_output = (input_ids != output_ids[:, :input_token_len]).sum().item() + if n_diff_input_output > 0: + print(f'[Warning] {n_diff_input_output} output_ids are not the same as the input_ids') + outputs = tokenizer.batch_decode(output_ids[:, input_token_len:], skip_special_tokens=True)[0] + outputs = outputs.strip() + if outputs.endswith(stop_str): + outputs = outputs[:-len(stop_str)] + outputs = outputs.strip() + print(outputs) + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-file", type=str, required=True) + parser.add_argument("--query", type=str, required=True) + parser.add_argument("--conv-mode", type=str, default=None) + args = parser.parse_args() + + eval_model(args) diff --git a/llava-phi/llava_phi/eval/summarize_gpt_review.py b/llava-phi/llava_phi/eval/summarize_gpt_review.py new file mode 100644 index 0000000000000000000000000000000000000000..0f796a3880341739677a5fe3bfbcc90515a0f324 --- /dev/null +++ b/llava-phi/llava_phi/eval/summarize_gpt_review.py @@ -0,0 +1,60 @@ +import json +import os +from collections import defaultdict + +import numpy as np + +import argparse + +def parse_args(): + parser = argparse.ArgumentParser(description='ChatGPT-based QA evaluation.') + parser.add_argument('-d', '--dir', default=None) + parser.add_argument('-v', '--version', default=None) + parser.add_argument('-s', '--select', nargs='*', default=None) + parser.add_argument('-f', '--files', nargs='*', default=[]) + parser.add_argument('-i', '--ignore', nargs='*', default=[]) + return parser.parse_args() + + +if __name__ == '__main__': + args = parse_args() + + if args.ignore is not None: + args.ignore = [int(x) for x in args.ignore] + + if len(args.files) > 0: + review_files = args.files + else: + review_files = [x for x in os.listdir(args.dir) if x.endswith('.jsonl') and (x.startswith('gpt4_text') or x.startswith('reviews_') or x.startswith('review_') or 'review' in args.dir)] + + for review_file in sorted(review_files): + config = os.path.basename(review_file).replace('gpt4_text_', '').replace('.jsonl', '') + if args.select is not None and any(x not in config for x in args.select): + continue + if '0613' in config: + version = '0613' + else: + version = '0314' + if args.version is not None and args.version != version: + continue + scores = defaultdict(list) + print(config) + with open(os.path.join(args.dir, review_file) if args.dir is not None else review_file) as f: + for review_str in f: + review = json.loads(review_str) + if review['question_id'] in args.ignore: + continue + if 'category' in review: + scores[review['category']].append(review['tuple']) + scores['all'].append(review['tuple']) + else: + if 'tuple' in review: + scores['all'].append(review['tuple']) + else: + scores['all'].append(review['score']) + for k, v in sorted(scores.items()): + stats = np.asarray(v).mean(0).tolist() + stats = [round(x, 3) for x in stats] + # print(k, stats, round(stats[1]/stats[0]*100, 1)) + print(k, round(stats[1]/stats[0]*100, 1), round(stats[0] * 10, 1), round(stats[1] * 10, 1)) + print('=================================') diff --git a/llava-phi/llava_phi/eval/table/rule.json b/llava-phi/llava_phi/eval/table/rule.json new file mode 100644 index 0000000000000000000000000000000000000000..26c7f4e0819bf0bafbace898f5f5a4f052490aa4 --- /dev/null +++ b/llava-phi/llava_phi/eval/table/rule.json @@ -0,0 +1,11 @@ +{ + "coding": {"role": "Assistant", "prompt": "Your task is to evaluate the coding abilities of the above two assistants. They have been asked to implement a program to solve a given problem. Please review their code submissions, paying close attention to their problem-solving approach, code structure, readability, and the inclusion of helpful comments.\n\nPlease ensure that the assistants' submissions:\n\n1. Correctly implement the given problem statement.\n2. Contain accurate and efficient code.\n3. Include clear and concise comments that explain the code's logic and functionality.\n4. Adhere to proper coding standards and best practices.\n\nOnce you have carefully reviewed both submissions, provide detailed feedback on their strengths and weaknesses, along with any suggestions for improvement. You should first output a single line containing two scores on the scale of 1-10 (1: no code/no sense; 10: perfect) for Assistant 1 and 2, respectively. Then give extra comments starting from the next line."}, + "math": {"role": "Assistant", "prompt": "We would like to request your feedback on the mathematical proficiency of two AI assistants regarding the given user question.\nFirstly, please solve the problem independently, without referring to the answers provided by Assistant 1 and Assistant 2.\nAfterward, please examine the problem-solving process of Assistant 1 and Assistant 2 step-by-step to ensure their correctness, identifying any incorrect steps if present. Your evaluation should take into account not only the answer but also the problem-solving steps.\nFinally, please output a Python tuple containing two numerical scores for Assistant 1 and Assistant 2, ranging from 1 to 10, respectively. If applicable, explain the reasons for any variations in their scores and determine which assistant performed better."}, + "default": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above.\nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "conv": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with five descriptive sentences describing the same image and the bounding box coordinates of each object in the scene. These coordinates are in the form of bounding boxes, represented as (x1, y1, x2, y2) with floating numbers ranging from 0 to 1. These values correspond to the top left x, top left y, bottom right x, and bottom right y. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "detail": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with five descriptive sentences describing the same image and the bounding box coordinates of each object in the scene. These coordinates are in the form of bounding boxes, represented as (x1, y1, x2, y2) with floating numbers ranging from 0 to 1. These values correspond to the top left x, top left y, bottom right x, and bottom right y. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "complex": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with five descriptive sentences describing the same image and the bounding box coordinates of each object in the scene. These coordinates are in the form of bounding boxes, represented as (x1, y1, x2, y2) with floating numbers ranging from 0 to 1. These values correspond to the top left x, top left y, bottom right x, and bottom right y. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "llava_bench_conv": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with a few sentences describing the image. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "llava_bench_detail": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with a few sentences describing the image. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."}, + "llava_bench_complex": {"role": "Assistant", "prompt": "We would like to request your feedback on the performance of two AI assistants in response to the user question displayed above. The user asks the question on observing an image. For your reference, the visual content in the image is represented with a few sentences describing the image. \nPlease rate the helpfulness, relevance, accuracy, level of details of their responses. Each assistant receives an overall score on a scale of 1 to 10, where a higher score indicates better overall performance.\nPlease first output a single line containing only two values indicating the scores for Assistant 1 and 2, respectively. The two scores are separated by a space.\nIn the subsequent line, please provide a comprehensive explanation of your evaluation, avoiding any potential bias and ensuring that the order in which the responses were presented does not affect your judgment."} +} \ No newline at end of file diff --git a/llava-phi/llava_phi/mm_utils.py b/llava-phi/llava_phi/mm_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a195b848febcf73106e8c6e62b67ae6f22589def --- /dev/null +++ b/llava-phi/llava_phi/mm_utils.py @@ -0,0 +1,96 @@ +from PIL import Image +from io import BytesIO +import base64 + +import torch +from transformers import StoppingCriteria +from llava_phi.constants import IMAGE_TOKEN_INDEX + + +def load_image_from_base64(image): + return Image.open(BytesIO(base64.b64decode(image))) + + +def expand2square(pil_img, background_color): + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + + +def process_images(images, image_processor, model_cfg): + image_aspect_ratio = getattr(model_cfg, "image_aspect_ratio", None) + new_images = [] + if image_aspect_ratio == 'pad': + for image in images: + image = expand2square(image, tuple(int(x*255) for x in image_processor.image_mean)) + image = image_processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + new_images.append(image) + else: + return image_processor(images, return_tensors='pt')['pixel_values'] + if all(x.shape == new_images[0].shape for x in new_images): + new_images = torch.stack(new_images, dim=0) + return new_images + + +def tokenizer_image_token(prompt, tokenizer, image_token_index=IMAGE_TOKEN_INDEX, return_tensors=None): + prompt_chunks = [tokenizer(chunk).input_ids for chunk in prompt.split('')] + + def insert_separator(X, sep): + return [ele for sublist in zip(X, [sep]*len(X)) for ele in sublist][:-1] + + input_ids = [] + offset = 0 + if len(prompt_chunks) > 0 and len(prompt_chunks[0]) > 0 and prompt_chunks[0][0] == tokenizer.bos_token_id: + offset = 1 + input_ids.append(prompt_chunks[0][0]) + for x in insert_separator(prompt_chunks, [image_token_index] * (offset + 1)): + input_ids.extend(x[offset:]) + + if return_tensors is not None: + if return_tensors == 'pt': + return torch.tensor(input_ids, dtype=torch.long) + raise ValueError(f'Unsupported tensor type: {return_tensors}') + return input_ids + + +def get_model_name_from_path(model_path): + model_path = model_path.strip("/") + model_paths = model_path.split("/") + if model_paths[-1].startswith('checkpoint-'): + return model_paths[-2] + "_" + model_paths[-1] + else: + return model_paths[-1] + + +class KeywordsStoppingCriteria(StoppingCriteria): + def __init__(self, keywords, tokenizer, input_ids): + self.keywords = keywords + self.keyword_ids = [] + for keyword in keywords: + cur_keyword_ids = tokenizer(keyword).input_ids + if len(cur_keyword_ids) > 1 and cur_keyword_ids[0] == tokenizer.bos_token_id: + cur_keyword_ids = cur_keyword_ids[1:] + self.keyword_ids.append(torch.tensor(cur_keyword_ids)) + self.tokenizer = tokenizer + self.start_len = input_ids.shape[1] + + def __call__(self, output_ids: torch.LongTensor, scores: torch.FloatTensor, **kwargs) -> bool: + assert output_ids.shape[0] == 1, "Only support batch size 1 (yet)" # TODO + offset = min(output_ids.shape[1] - self.start_len, 3) + self.keyword_ids = [keyword_id.to(output_ids.device) for keyword_id in self.keyword_ids] + for keyword_id in self.keyword_ids: + if output_ids[0, -keyword_id.shape[0]:] == keyword_id: + return True + outputs = self.tokenizer.batch_decode(output_ids[:, -offset:], skip_special_tokens=True)[0] + for keyword in self.keywords: + if keyword in outputs: + return True + return False diff --git a/llava-phi/llava_phi/model/__init__.py b/llava-phi/llava_phi/model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..1d17d5fccde9017fa4cbd8cd94d17ef3202017cd --- /dev/null +++ b/llava-phi/llava_phi/model/__init__.py @@ -0,0 +1,2 @@ +from .language_model.llava_phi import LlavaPhiForCausalLM +from .language_model.configuration_llava_phi import LlavaPhiConfig, LlavaPhiVisionConfig, ProjectorConfig diff --git a/llava-phi/llava_phi/model/builder.py b/llava-phi/llava_phi/model/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..d873eaef35af085037a9bc8fefc5d20c49ae4029 --- /dev/null +++ b/llava-phi/llava_phi/model/builder.py @@ -0,0 +1,121 @@ +import os +import warnings +import shutil + +from transformers import AutoTokenizer, AutoModelForCausalLM, AutoConfig, BitsAndBytesConfig, CLIPImageProcessor +import torch +from llava_phi.model import * +from llava_phi.constants import DEFAULT_IMAGE_PATCH_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN + + +def load_pretrained_model(model_path, model_base, model_name, load_8bit=False, load_4bit=False, device_map="cuda", device="cuda"): + kwargs = {"device_map": device_map} + if load_8bit: + kwargs['load_in_8bit'] = True + elif load_4bit: + kwargs['load_in_4bit'] = True + kwargs['quantization_config'] = BitsAndBytesConfig( + load_in_4bit=True, + bnb_4bit_compute_dtype=torch.float16, + bnb_4bit_use_double_quant=True, + bnb_4bit_quant_type='nf4' + ) + # else: # TODO: after fine-tuning LLava-Phi, load the model weights with fp16 will pose nan + # kwargs['torch_dtype'] = torch.float16 + + if 'phi' in model_name.lower(): + # Load LLaVA-Phi model + if 'lora' in model_name.lower() and model_base is None: + warnings.warn('There is `lora` in model name but no `model_base` is provided. If you are loading a LoRA model, please provide the `model_base` argument.') + if 'lora' in model_name.lower() and model_base is not None: + lora_cfg_pretrained = AutoConfig.from_pretrained(model_path) + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + print('Loading LLaVA-Phi from base model...') + model = LlavaPhiForCausalLM.from_pretrained(model_base, low_cpu_mem_usage=True, config=lora_cfg_pretrained, **kwargs) + token_num, tokem_dim = model.lm_head.out_features, model.lm_head.in_features + if model.lm_head.weight.shape[0] != token_num: + model.lm_head.weight = torch.nn.Parameter(torch.empty(token_num, tokem_dim, device=model.device, dtype=model.dtype)) + model.model.embed_tokens.weight = torch.nn.Parameter(torch.empty(token_num, tokem_dim, device=model.device, dtype=model.dtype)) + + print('Loading additional LLaVA-Phi weights...') + if os.path.exists(os.path.join(model_path, 'non_lora_trainables.bin')): + non_lora_trainables = torch.load(os.path.join(model_path, 'non_lora_trainables.bin'), map_location='cpu') + else: + # this is probably from HF Hub + from huggingface_hub import hf_hub_download + def load_from_hf(repo_id, filename, subfolder=None): + cache_file = hf_hub_download( + repo_id=repo_id, + filename=filename, + subfolder=subfolder) + return torch.load(cache_file, map_location='cpu') + non_lora_trainables = load_from_hf(model_path, 'non_lora_trainables.bin') + non_lora_trainables = {(k[11:] if k.startswith('base_model.') else k): v for k, v in non_lora_trainables.items()} + if any(k.startswith('model.model.') for k in non_lora_trainables): + non_lora_trainables = {(k[6:] if k.startswith('model.') else k): v for k, v in non_lora_trainables.items()} + model.load_state_dict(non_lora_trainables, strict=False) + + from peft import PeftModel + print('Loading LoRA weights...') + model = PeftModel.from_pretrained(model, model_path) + print('Merging LoRA weights...') + model = model.merge_and_unload() + print('Model is loaded...') + elif model_base is not None: + # this may be mm projector only + print('Loading LLaVA-Phi from base model...') + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + cfg_pretrained = AutoConfig.from_pretrained(model_path) + model = LlavaPhiForCausalLM.from_pretrained(model_base, low_cpu_mem_usage=True, config=cfg_pretrained, **kwargs) + + mm_projector_weights = torch.load(os.path.join(model_path, 'mm_projector.bin'), map_location='cpu') + mm_projector_weights = {k: v.to(torch.float16) for k, v in mm_projector_weights.items()} + model.load_state_dict(mm_projector_weights, strict=False) + else: + print("load llaVA-Phi MLLM!!!") + config = LlavaPhiConfig.from_pretrained(model_path, trust_remote_code=True) + tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=True) + model = LlavaPhiForCausalLM.from_pretrained( + model_path, + config=config, + use_safetensors=True, + **kwargs).to("cuda") + else: + # Load language model + if model_base is not None: + # PEFT model + from peft import PeftModel + tokenizer = AutoTokenizer.from_pretrained(model_base, use_fast=False) + model = AutoModelForCausalLM.from_pretrained(model_base, torch_dtype=torch.float16, low_cpu_mem_usage=True, device_map="auto") + print(f"Loading LoRA weights from {model_path}") + model = PeftModel.from_pretrained(model, model_path) + print(f"Merging weights") + model = model.merge_and_unload() + print('Convert to FP16...') + model.to(torch.float16) + else: + tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False) + model = AutoModelForCausalLM.from_pretrained(model_path, low_cpu_mem_usage=True, **kwargs) + + image_processor = CLIPImageProcessor.from_pretrained(model_path) + + if 'phi' in model_name.lower(): + mm_use_im_start_end = getattr(model.config, "mm_use_im_start_end", False) + mm_use_im_patch_token = getattr(model.config, "mm_use_im_patch_token", True) + + # TODO: the tokenizer length of phi-2 is 50295, but the output class of lm_head is 51200 + if mm_use_im_patch_token: + tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True) + if mm_use_im_start_end: + tokenizer.add_tokens([DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True) + # model.resize_token_embeddings(len(tokenizer)) + else: + raise ValueError(f"Unsupported model name: {model_name}") + + if hasattr(model.config, "max_sequence_length"): + context_len = model.config.max_sequence_length + else: + context_len = 2048 + model.to(device="cuda") + print(kwargs) + return tokenizer, model, image_processor, context_len diff --git a/llava-phi/llava_phi/model/language_model/configuration_llava_phi.py b/llava-phi/llava_phi/model/language_model/configuration_llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..db16c71955328fdfc0f6ce0ed76f12fde583c034 --- /dev/null +++ b/llava-phi/llava_phi/model/language_model/configuration_llava_phi.py @@ -0,0 +1,179 @@ +import os +from typing import Union +from transformers import PretrainedConfig, PhiConfig +from transformers.utils import logging + +logger = logging.get_logger(__name__) + + +class LlavaPhiVisionConfig(PretrainedConfig): + r""" + This is the configuration class to store the configuration of a [`CLIPVisionModel`]. It is used to instantiate a + CLIP vision encoder according to the specified arguments, defining the model architecture. Instantiating a + configuration with the defaults will yield a similar configuration to that of the vision encoder of the CLIP + [openai/clip-vit-base-patch32](https://huggingface.co/openai/clip-vit-base-patch32) architecture. + + Configuration objects inherit from [`PretrainedConfig`] and can be used to control the model outputs. Read the + documentation from [`PretrainedConfig`] for more information. + + Args: + hidden_size (`int`, *optional*, defaults to 768): + Dimensionality of the encoder layers and the pooler layer. + intermediate_size (`int`, *optional*, defaults to 3072): + Dimensionality of the "intermediate" (i.e., feed-forward) layer in the Transformer encoder. + projection_dim (`int`, *optional*, defaults to 512): + Dimentionality of text and vision projection layers. + num_hidden_layers (`int`, *optional*, defaults to 12): + Number of hidden layers in the Transformer encoder. + num_attention_heads (`int`, *optional*, defaults to 12): + Number of attention heads for each attention layer in the Transformer encoder. + num_channels (`int`, *optional*, defaults to 3): + The number of input channels. + image_size (`int`, *optional*, defaults to 224): + The size (resolution) of each image. + patch_size (`int`, *optional*, defaults to 32): + The size (resolution) of each patch. + hidden_act (`str` or `function`, *optional*, defaults to `"quick_gelu"`): + The non-linear activation function (function or string) in the encoder and pooler. If string, `"gelu"`, + `"relu"`, `"selu"` and `"gelu_new"` ``"quick_gelu"` are supported. + layer_norm_eps (`float`, *optional*, defaults to 1e-05): + The epsilon used by the layer normalization layers. + attention_dropout (`float`, *optional*, defaults to 0.0): + The dropout ratio for the attention probabilities. + initializer_range (`float`, *optional*, defaults to 0.02): + The standard deviation of the truncated_normal_initializer for initializing all weight matrices. + initializer_factor (`float`, *optional*, defaults to 1.0): + A factor for initializing all weight matrices (should be kept to 1, used internally for initialization + testing). + mm_vision_select_feature (`str`, *optional*, defaults to `"patch"`): + The feature to select from the vision encoder output. Can be one of `"patch"` or `"cls_patch"`. + mm_vision_select_layer (`int`, *optional*, defaults to `-2`): + The layer to select from the vision encoder output. + + Example: + + ```python + >>> from transformers import CLIPVisionConfig, CLIPVisionModel + + >>> # Initializing a CLIPVisionConfig with openai/clip-vit-base-patch32 style configuration + >>> configuration = CLIPVisionConfig() + + >>> # Initializing a CLIPVisionModel (with random weights) from the openai/clip-vit-base-patch32 style configuration + >>> model = CLIPVisionModel(configuration) + + >>> # Accessing the model configuration + >>> configuration = model.config + ```""" + + model_type = "llava_phi_clip_vision_model" + + def __init__( + self, + hidden_size=768, + intermediate_size=3072, + projection_dim=512, + num_hidden_layers=12, + num_attention_heads=12, + num_channels=3, + image_size=224, + patch_size=32, + hidden_act="quick_gelu", + layer_norm_eps=1e-5, + attention_dropout=0.0, + initializer_range=0.02, + initializer_factor=1.0, + mm_vision_select_feature="patch", + mm_vision_select_layer=-2, + **kwargs, + ): + super().__init__(**kwargs) + + self.hidden_size = hidden_size + self.intermediate_size = intermediate_size + self.projection_dim = projection_dim + self.num_hidden_layers = num_hidden_layers + self.num_attention_heads = num_attention_heads + self.num_channels = num_channels + self.patch_size = patch_size + self.image_size = image_size + self.initializer_range = initializer_range + self.initializer_factor = initializer_factor + self.attention_dropout = attention_dropout + self.layer_norm_eps = layer_norm_eps + self.hidden_act = hidden_act + self.mm_vision_select_feature = mm_vision_select_feature + self.mm_vision_select_layer = mm_vision_select_layer + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the vision config dict if we are loading from CLIPConfig + if config_dict.get("model_type") == "llava_phi-phi": + config_dict = config_dict["vision_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +class ProjectorConfig(PretrainedConfig): + model_type = "llava_phi_projector" + + def __init__( + self, + mm_projector_type="linear", + mm_hidden_size=768, + hidden_size=2560, + **kwargs + ): + self.mm_projector_type = mm_projector_type + self.mm_hidden_size = mm_hidden_size + self.hidden_size = hidden_size + super().__init__(**kwargs) + + @classmethod + def from_pretrained(cls, pretrained_model_name_or_path: Union[str, os.PathLike], **kwargs) -> "PretrainedConfig": + cls._set_token_in_kwargs(kwargs) + + config_dict, kwargs = cls.get_config_dict(pretrained_model_name_or_path, **kwargs) + + # get the vision config dict if we are loading from CLIPConfig + if config_dict.get("model_type") == "llava_phi-phi": + config_dict = config_dict["projector_config"] + + if "model_type" in config_dict and hasattr(cls, "model_type") and config_dict["model_type"] != cls.model_type: + logger.warning( + f"You are using a model of type {config_dict['model_type']} to instantiate a model of type " + f"{cls.model_type}. This is not supported for all configurations of models and can yield errors." + ) + + return cls.from_dict(config_dict, **kwargs) + + +DEFAULT_VISUAL_CONFIG = { + "vision_tower": LlavaPhiVisionConfig().to_dict(), + "mm_projector": ProjectorConfig().to_dict() +} + + +class LlavaPhiConfig(PhiConfig): + model_type = "llava_phi" + + def __init__(self, vision_config=None, **kwargs): + if vision_config is None: + self.vision_config = DEFAULT_VISUAL_CONFIG + else: + self.vision_config = vision_config + + super().__init__(**kwargs) + + +if __name__ == "__main__": + print(LlavaPhiVisionConfig()) diff --git a/llava-phi/llava_phi/model/language_model/llava_phi.py b/llava-phi/llava_phi/model/language_model/llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..1c8b87121a0db29563d8ce0379c64746e1a2a5bf --- /dev/null +++ b/llava-phi/llava_phi/model/language_model/llava_phi.py @@ -0,0 +1,126 @@ +import os +from typing import List, Optional, Tuple, Union + +import torch +import torch.nn as nn +from torch.nn import CrossEntropyLoss + +from transformers import AutoConfig, AutoModelForCausalLM, \ + PhiModel, PhiPreTrainedModel + +from transformers.modeling_outputs import CausalLMOutputWithPast +from ..llava_arch import LlavaMetaModel, LlavaMetaForCausalLM +from transformers.utils import logging +from .configuration_llava_phi import LlavaPhiConfig + +logger = logging.get_logger(__name__) + + +class LLavaPhiModel(LlavaMetaModel, PhiModel): + config_class = LlavaPhiConfig + + def __init__(self, config): + super(LLavaPhiModel, self).__init__(config) + + +class LlavaPhiForCausalLM(PhiPreTrainedModel, LlavaMetaForCausalLM): + config_class = LlavaPhiConfig + + def __init__(self, config): + super(PhiPreTrainedModel, self).__init__(config) + self.model = LLavaPhiModel(config) + self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=True) + + # Initialize weights and apply final processing + self.post_init() + + def get_model(self): + return self.model + + def forward( + self, + input_ids: torch.LongTensor = None, + attention_mask: Optional[torch.Tensor] = None, + past_key_values: Optional[List[torch.FloatTensor]] = None, + inputs_embeds: Optional[torch.FloatTensor] = None, + labels: Optional[torch.LongTensor] = None, + use_cache: Optional[bool] = None, + output_attentions: Optional[bool] = None, + output_hidden_states: Optional[bool] = None, + images: Optional[torch.FloatTensor] = None, + return_dict: Optional[bool] = None, + ) -> Union[Tuple, CausalLMOutputWithPast]: + output_attentions = output_attentions if output_attentions is not None else self.config.output_attentions + output_hidden_states = ( + output_hidden_states if output_hidden_states is not None else self.config.output_hidden_states + ) + return_dict = return_dict if return_dict is not None else self.config.use_return_dict + + input_ids, attention_mask, past_key_values, inputs_embeds, labels = self.prepare_inputs_labels_for_multimodal( + input_ids, attention_mask, past_key_values, labels, images) + + # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn) + outputs = self.model( + input_ids=input_ids, + attention_mask=attention_mask, + past_key_values=past_key_values, + inputs_embeds=inputs_embeds, + use_cache=use_cache, + output_attentions=output_attentions, + output_hidden_states=output_hidden_states, + return_dict=return_dict + ) + + hidden_states = outputs[0] + logits = self.lm_head(hidden_states) + + loss = None + if labels is not None: + # Shift so that tokens < n predict n + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + # Flatten the tokens + loss_fct = CrossEntropyLoss() + shift_logits = shift_logits.view(-1, self.config.vocab_size) + shift_labels = shift_labels.view(-1) + # Enable model/pipeline parallelism + shift_labels = shift_labels.to(shift_logits.device) + loss = loss_fct(shift_logits, shift_labels) + + if not return_dict: + output = (logits,) + outputs[1:] + return (loss,) + output if loss is not None else output + + return CausalLMOutputWithPast( + loss=loss, + logits=logits, + past_key_values=outputs.past_key_values, + hidden_states=outputs.hidden_states, + attentions=outputs.attentions, + ) + + def prepare_inputs_for_generation( + self, input_ids, past_key_values=None, attention_mask=None, inputs_embeds=None, **kwargs + ): + if past_key_values: + input_ids = input_ids[:, -1:] + + # if `inputs_embeds` are passed, we only want to use them in the 1st generation step + if inputs_embeds is not None and past_key_values is None: + model_inputs = {"inputs_embeds": inputs_embeds} + else: + model_inputs = {"input_ids": input_ids} + + model_inputs.update( + { + "past_key_values": past_key_values, + "use_cache": kwargs.get("use_cache"), + "attention_mask": attention_mask, + "images": kwargs.get("images", None), + } + ) + return model_inputs + + +AutoConfig.register("llava_phi", LlavaPhiConfig) +AutoModelForCausalLM.register(LlavaPhiConfig, LlavaPhiForCausalLM) diff --git a/llava-phi/llava_phi/model/llava_arch.py b/llava-phi/llava_phi/model/llava_arch.py new file mode 100644 index 0000000000000000000000000000000000000000..20df5b588d6d83437a32071ab428b82a14a85576 --- /dev/null +++ b/llava-phi/llava_phi/model/llava_arch.py @@ -0,0 +1,208 @@ +# Copyright 2023 Haotian Liu +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +from abc import ABC, abstractmethod + +import torch + +from .multimodal_encoder.clip_encoder import CLIPVisionTower +from .multimodal_projector.builder import build_vision_projector +from .language_model.configuration_llava_phi import LlavaPhiConfig, LlavaPhiVisionConfig, ProjectorConfig +from llava_phi.constants import IGNORE_INDEX, IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_PATCH_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN + + +class LlavaMetaModel: + def __init__(self, config): + super(LlavaMetaModel, self).__init__(config) + self.vision_tower = CLIPVisionTower( + LlavaPhiVisionConfig(**config.vision_config["vision_tower"]) + ) + self.mm_projector = build_vision_projector( + ProjectorConfig(**config.vision_config["mm_projector"]) + ) + + def get_vision_tower(self): + vision_tower = getattr(self, 'vision_tower', None) + if type(vision_tower) is list: + vision_tower = vision_tower[0] + return vision_tower + + +class LlavaMetaForCausalLM(ABC): + + @abstractmethod + def get_model(self): + pass + + def get_vision_tower(self): + return self.get_model().get_vision_tower() + + def encode_images(self, images): + image_features = self.get_model().get_vision_tower()(images) + image_features = self.get_model().mm_projector(image_features) + return image_features + + def prepare_inputs_labels_for_multimodal( + self, input_ids, attention_mask, past_key_values, labels, images + ): + vision_tower = self.get_vision_tower() + if vision_tower is None or images is None or input_ids.shape[1] == 1: + if past_key_values is not None and vision_tower is not None and images is not None and input_ids.shape[1] == 1: + attention_mask = torch.ones((attention_mask.shape[0], past_key_values[-1][-1].shape[-2] + 1), dtype=attention_mask.dtype, device=attention_mask.device) + return input_ids, attention_mask, past_key_values, None, labels + + if type(images) is list or images.ndim == 5: + concat_images = torch.cat([image for image in images], dim=0) + image_features = self.encode_images(concat_images) + split_sizes = [image.shape[0] for image in images] + image_features = torch.split(image_features, split_sizes, dim=0) + image_features = [x.flatten(0, 1) for x in image_features] + else: + image_features = self.encode_images(images) + + new_input_embeds = [] + new_labels = [] if labels is not None else None + cur_image_idx = 0 + for batch_idx, cur_input_ids in enumerate(input_ids): + if (cur_input_ids == IMAGE_TOKEN_INDEX).sum() == 0: + # multimodal LLM, but the current sample is not multimodal + # FIXME: this is a hacky fix, for deepspeed zero3 to work + half_len = cur_input_ids.shape[0] // 2 + cur_image_features = image_features[cur_image_idx] + cur_input_embeds_1 = self.get_model().embed_tokens(cur_input_ids[:half_len]) + cur_input_embeds_2 = self.get_model().embed_tokens(cur_input_ids[half_len:]) + cur_input_embeds = torch.cat([cur_input_embeds_1, cur_image_features[0:0], cur_input_embeds_2], dim=0) + new_input_embeds.append(cur_input_embeds) + if labels is not None: + new_labels.append(labels[batch_idx]) + cur_image_idx += 1 + continue + image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0] + cur_new_input_embeds = [] + if labels is not None: + cur_labels = labels[batch_idx] + cur_new_labels = [] + assert cur_labels.shape == cur_input_ids.shape + while image_token_indices.numel() > 0: + cur_image_features = image_features[cur_image_idx] + image_token_start = image_token_indices[0] + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[:image_token_start-1]).detach()) + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[image_token_start-1:image_token_start])) + cur_new_input_embeds.append(cur_image_features) + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[image_token_start+1:image_token_start+2])) + if labels is not None: + cur_new_labels.append(cur_labels[:image_token_start]) + cur_new_labels.append(torch.full((cur_image_features.shape[0],), IGNORE_INDEX, device=labels.device, dtype=labels.dtype)) + cur_new_labels.append(cur_labels[image_token_start:image_token_start+1]) + cur_labels = cur_labels[image_token_start+2:] + else: + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids[:image_token_start])) + cur_new_input_embeds.append(cur_image_features) + if labels is not None: + cur_new_labels.append(cur_labels[:image_token_start]) + cur_new_labels.append(torch.full((cur_image_features.shape[0],), IGNORE_INDEX, device=labels.device, dtype=labels.dtype)) + cur_labels = cur_labels[image_token_start+1:] + cur_image_idx += 1 + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_input_ids = cur_input_ids[image_token_start+2:] + else: + cur_input_ids = cur_input_ids[image_token_start+1:] + image_token_indices = torch.where(cur_input_ids == IMAGE_TOKEN_INDEX)[0] + if cur_input_ids.numel() > 0: + if getattr(self.config, 'tune_mm_mlp_adapter', False) and getattr(self.config, 'mm_use_im_start_end', False): + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids).detach()) + else: + cur_new_input_embeds.append(self.get_model().embed_tokens(cur_input_ids)) + if labels is not None: + cur_new_labels.append(cur_labels) + cur_new_input_embeds = [x.to(device=self.device) for x in cur_new_input_embeds] + cur_new_input_embeds = torch.cat(cur_new_input_embeds, dim=0) + new_input_embeds.append(cur_new_input_embeds) + if labels is not None: + cur_new_labels = torch.cat(cur_new_labels, dim=0) + new_labels.append(cur_new_labels) + + if any(x.shape != new_input_embeds[0].shape for x in new_input_embeds): + max_len = max(x.shape[0] for x in new_input_embeds) + + new_input_embeds_align = [] + for cur_new_embed in new_input_embeds: + cur_new_embed = torch.cat((cur_new_embed, torch.zeros((max_len - cur_new_embed.shape[0], cur_new_embed.shape[1]), dtype=cur_new_embed.dtype, device=cur_new_embed.device)), dim=0) + new_input_embeds_align.append(cur_new_embed) + new_input_embeds = torch.stack(new_input_embeds_align, dim=0) + + if labels is not None: + new_labels_align = [] + _new_labels = new_labels + for cur_new_label in new_labels: + cur_new_label = torch.cat((cur_new_label, torch.full((max_len - cur_new_label.shape[0],), IGNORE_INDEX, dtype=cur_new_label.dtype, device=cur_new_label.device)), dim=0) + new_labels_align.append(cur_new_label) + new_labels = torch.stack(new_labels_align, dim=0) + + if attention_mask is not None: + new_attention_mask = [] + for cur_attention_mask, cur_new_labels, cur_new_labels_align in zip(attention_mask, _new_labels, new_labels): + new_attn_mask_pad_left = torch.full((cur_new_labels.shape[0] - labels.shape[1],), True, dtype=attention_mask.dtype, device=attention_mask.device) + new_attn_mask_pad_right = torch.full((cur_new_labels_align.shape[0] - cur_new_labels.shape[0],), False, dtype=attention_mask.dtype, device=attention_mask.device) + cur_new_attention_mask = torch.cat((new_attn_mask_pad_left, cur_attention_mask, new_attn_mask_pad_right), dim=0) + new_attention_mask.append(cur_new_attention_mask) + attention_mask = torch.stack(new_attention_mask, dim=0) + assert attention_mask.shape == new_labels.shape + else: + new_input_embeds = torch.stack(new_input_embeds, dim=0) + if labels is not None: + new_labels = torch.stack(new_labels, dim=0) + + if attention_mask is not None: + new_attn_mask_pad_left = torch.full((attention_mask.shape[0], new_input_embeds.shape[1] - input_ids.shape[1]), True, dtype=attention_mask.dtype, device=attention_mask.device) + attention_mask = torch.cat((new_attn_mask_pad_left, attention_mask), dim=1) + assert attention_mask.shape == new_input_embeds.shape[:2] + + return None, attention_mask, past_key_values, new_input_embeds, new_labels + + def initialize_vision_tokenizer(self, model_args, tokenizer): + if model_args.mm_use_im_patch_token: + tokenizer.add_tokens([DEFAULT_IMAGE_PATCH_TOKEN], special_tokens=True) + self.resize_token_embeddings(len(tokenizer)) + + if model_args.mm_use_im_start_end: + num_new_tokens = tokenizer.add_tokens([DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN], special_tokens=True) + self.resize_token_embeddings(len(tokenizer)) + + if num_new_tokens > 0: + input_embeddings = self.get_input_embeddings().weight.data + output_embeddings = self.get_output_embeddings().weight.data + + input_embeddings_avg = input_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + output_embeddings_avg = output_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + + input_embeddings[-num_new_tokens:] = input_embeddings_avg + output_embeddings[-num_new_tokens:] = output_embeddings_avg + + if model_args.tune_mm_mlp_adapter: + for p in self.get_input_embeddings().parameters(): + p.requires_grad = True + for p in self.get_output_embeddings().parameters(): + p.requires_grad = False + + elif model_args.mm_use_im_patch_token: + if model_args.tune_mm_mlp_adapter: + for p in self.get_input_embeddings().parameters(): + p.requires_grad = False + for p in self.get_output_embeddings().parameters(): + p.requires_grad = False diff --git a/llava-phi/llava_phi/model/multimodal_encoder/clip_encoder.py b/llava-phi/llava_phi/model/multimodal_encoder/clip_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..5d7939d5ae0674fded20c52278b04dc2ef59936b --- /dev/null +++ b/llava-phi/llava_phi/model/multimodal_encoder/clip_encoder.py @@ -0,0 +1,89 @@ +from abc import ABC + +import torch +import torch.nn as nn + +from transformers import CLIPPreTrainedModel, CLIPVisionConfig +from transformers.models.clip.modeling_clip import CLIPVisionTransformer +from llava_phi.model.language_model.configuration_llava_phi import LlavaPhiVisionConfig + + +class CLIPVisionTower(CLIPPreTrainedModel): + config_class = LlavaPhiVisionConfig + + def __init__(self, config): + super().__init__(config) + + self.vision_model = CLIPVisionTransformer(config) + # Initialize weights and apply final processing + self.post_init() + + def get_input_embeddings(self) -> nn.Module: + return self.vision_model.embeddings.patch_embedding + + def feature_select(self, image_forward_outs): + image_features = image_forward_outs.hidden_states[ + self.config.mm_vision_select_layer + ] + if self.config.mm_vision_select_feature == "patch": + image_features = image_features[:, 1:] + elif self.config.mm_vision_select_feature == "cls_patch": + image_features = image_features + else: + raise ValueError( + f"Unexpected select feature: {self.config.mm_vision_select_feature}" + ) + return image_features + + def forward(self, images): + if type(images) is list: + image_features = [] + for image in images: + image_forward_out = self.vision_model( + image.to(device=self.device, dtype=self.dtype).unsqueeze(0), + output_hidden_states=True, + ) + image_feature = self.feature_select(image_forward_out).to(image.dtype) + image_features.append(image_feature) + else: + image_forward_outs = self.vision_model( + images.to(device=self.device, dtype=self.dtype), + output_hidden_states=True, + ) + image_features = self.feature_select(image_forward_outs).to(images.dtype) + + return image_features + + @property + def dummy_feature(self): + return torch.zeros(1, self.hidden_size, device=self.device, dtype=self.dtype) + + @property + def dtype(self): + return list(self.vision_model.parameters())[0].dtype + + @property + def device(self): + return list(self.vision_model.parameters())[0].device + + @property + def hidden_size(self): + return self.config.hidden_size + + @property + def num_patches(self): + return (self.config.image_size // self.config.patch_size) ** 2 + + +if __name__ == "__main__": + clip_config = CLIPVisionConfig.from_pretrained( + "/data/private/zhumj/GPTcode/mm-phi/openai/clip-vit-large-patch14-336" + ) + print("################ clip_config ##############") + print(clip_config) + phi_vis_config = LlavaPhiVisionConfig(**clip_config.to_dict()) + print("################ phi_vis_config ##############") + print(phi_vis_config) + + model = CLIPVisionTower(clip_config) + # print(list(model.vision_model.parameters())[0].dtype) diff --git a/llava-phi/llava_phi/model/multimodal_projector/builder.py b/llava-phi/llava_phi/model/multimodal_projector/builder.py new file mode 100644 index 0000000000000000000000000000000000000000..a7cceb34ba8760709e81af0b21824502449fca63 --- /dev/null +++ b/llava-phi/llava_phi/model/multimodal_projector/builder.py @@ -0,0 +1,50 @@ +import torch +import torch.nn as nn +import re + + +class IdentityMap(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x, *args, **kwargs): + return x + + @property + def config(self): + return {"mm_projector_type": "identity"} + + +class SimpleResBlock(nn.Module): + def __init__(self, channels): + super().__init__() + self.pre_norm = nn.LayerNorm(channels) + + self.proj = nn.Sequential( + nn.Linear(channels, channels), nn.GELU(), nn.Linear(channels, channels) + ) + + def forward(self, x): + x = self.pre_norm(x) + return x + self.proj(x) + + +def build_vision_projector(config): + projector_type = getattr(config, "mm_projector_type", "linear") + + if projector_type == "linear": + return nn.Linear(config.mm_hidden_size, config.hidden_size) + + mlp_gelu_match = re.match(r"^mlp(\d+)x_gelu$", projector_type) + if mlp_gelu_match: + mlp_depth = int(mlp_gelu_match.group(1)) + modules = [nn.Linear(config.mm_hidden_size, config.hidden_size)] + for _ in range(1, mlp_depth): + modules.append(nn.GELU()) + modules.append(nn.Linear(config.hidden_size, config.hidden_size)) + return nn.Sequential(*modules) + + if projector_type == "identity": + return IdentityMap() + + raise ValueError(f"Unknown projector type: {projector_type}") diff --git a/llava-phi/llava_phi/serve/__init__.py b/llava-phi/llava_phi/serve/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/llava-phi/llava_phi/serve/__pycache__/__init__.cpython-310.pyc b/llava-phi/llava_phi/serve/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cde3ffc076a04bda47f526b7c0b4171fe97efa54 Binary files /dev/null and b/llava-phi/llava_phi/serve/__pycache__/__init__.cpython-310.pyc differ diff --git a/llava-phi/llava_phi/serve/__pycache__/cli.cpython-310.pyc b/llava-phi/llava_phi/serve/__pycache__/cli.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a1be045494e4cfd4d831bb6f8ef976b6caf2679 Binary files /dev/null and b/llava-phi/llava_phi/serve/__pycache__/cli.cpython-310.pyc differ diff --git a/llava-phi/llava_phi/serve/app.py b/llava-phi/llava_phi/serve/app.py new file mode 100644 index 0000000000000000000000000000000000000000..9e343464c91fa7b58c07853f97cd2e7853bfb78a --- /dev/null +++ b/llava-phi/llava_phi/serve/app.py @@ -0,0 +1,354 @@ +import argparse +import hashlib +import json +import os +import time +from threading import Thread + +import gradio as gr +import torch +from llava_phi.constants import (DEFAULT_IM_END_TOKEN, DEFAULT_IM_START_TOKEN, + DEFAULT_IMAGE_TOKEN, IMAGE_TOKEN_INDEX) +from llava_phi.conversation import (SeparatorStyle, conv_templates, + default_conversation) +from llava_phi.mm_utils import (KeywordsStoppingCriteria, load_image_from_base64, + process_images, tokenizer_image_token) +from llava_phi.model.builder import load_pretrained_model +from transformers import TextIteratorStreamer + +print(gr.__version__) + +block_css = """ + +#buttons button { + min-width: min(120px,100%); +} +""" +title_markdown = (""" +# LLaVA-Phi: Efficient Multi-Modal Assistant with Small Language Model +[[Code](https://github.com/zhuyiche/llava-phi)] | 📚 [[Paper](https://arxiv.org/pdf/2401.02330)] +""") +tos_markdown = (""" +### Terms of use +By using this service, users are required to agree to the following terms: +The service is a research preview intended for non-commercial use only. It only provides limited safety measures and may generate offensive content. It must not be used for any illegal, harmful, violent, racist, or sexual purposes. +For an optimal experience, please use desktop computers for this demo, as mobile devices may compromise its quality. +""") +learn_more_markdown = (""" +### License +The service is a research preview intended for non-commercial use only, subject to the model [License](https://huggingface.co/microsoft/phi-2) of Phi-2. Please contact us if you find any potential violation. +""") +ack_markdown = (""" +### Acknowledgement +The template for this web demo is from [LLaVA](https://github.com/haotian-liu/LLaVA), and we are very grateful to LLaVA for their open source contributions to the community! +""") + + +def regenerate(state, image_process_mode): + state.messages[-1][-1] = None + prev_human_msg = state.messages[-2] + if type(prev_human_msg[1]) in (tuple, list): + prev_human_msg[1] = (*prev_human_msg[1][:2], image_process_mode) + state.skip_next = False + return (state, state.to_gradio_chatbot(), "", None) + + +def clear_history(): + state = default_conversation.copy() + return (state, state.to_gradio_chatbot(), "", None) + + +def add_text(state, text, image, image_process_mode): + if len(text) <= 0 and image is None: + state.skip_next = True + return (state, state.to_gradio_chatbot(), "", None) + + text = text[:1536] # Hard cut-off + if image is not None: + text = text[:1200] # Hard cut-off for images + if '' not in text: + # text = '' + text + text = text + '\n' + text = (text, image, image_process_mode) + if len(state.get_images(return_pil=True)) > 0: + state = default_conversation.copy() + state.append_message(state.roles[0], text) + state.append_message(state.roles[1], None) + state.skip_next = False + return (state, state.to_gradio_chatbot(), "", None) + + +def load_demo(): + state = default_conversation.copy() + return state + + +@torch.inference_mode() +def get_response(params): + prompt = params["prompt"] + ori_prompt = prompt + images = params.get("images", None) + num_image_tokens = 0 + if images is not None and len(images) > 0: + if len(images) > 0: + if len(images) != prompt.count(DEFAULT_IMAGE_TOKEN): + raise ValueError( + "Number of images does not match number of tokens in prompt") + + images = [load_image_from_base64(image) for image in images] + images = process_images(images, image_processor, model.config) + + if type(images) is list: + images = [image.to(model.device, dtype=torch.float16) + for image in images] + else: + images = images.to(model.device, dtype=torch.float16) + + replace_token = DEFAULT_IMAGE_TOKEN + if getattr(model.config, 'mm_use_im_start_end', False): + replace_token = DEFAULT_IM_START_TOKEN + replace_token + DEFAULT_IM_END_TOKEN + prompt = prompt.replace(DEFAULT_IMAGE_TOKEN, replace_token) + + num_image_tokens = prompt.count( + replace_token) * model.get_vision_tower().num_patches + else: + images = None + image_args = {"images": images} + else: + images = None + image_args = {} + + temperature = float(params.get("temperature", 1.0)) + top_p = float(params.get("top_p", 1.0)) + max_context_length = getattr( + model.config, 'max_position_embeddings', 2048) + max_new_tokens = min(int(params.get("max_new_tokens", 256)), 1024) + stop_str = params.get("stop", None) + do_sample = True if temperature > 0.001 else False + + input_ids = tokenizer_image_token( + prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).to(model.device) + keywords = [stop_str] + stopping_criteria = KeywordsStoppingCriteria( + keywords, tokenizer, input_ids) + streamer = TextIteratorStreamer( + tokenizer, skip_prompt=True, skip_special_tokens=True, timeout=15) + + max_new_tokens = min(max_new_tokens, max_context_length - + input_ids.shape[-1] - num_image_tokens) + + if max_new_tokens < 1: + yield json.dumps({"text": ori_prompt + "Exceeds max token length. Please start a new conversation, thanks.", + "error_code": 0}).encode() + b"\0" + return + + # local inference + thread = Thread(target=model.generate, kwargs=dict( + inputs=input_ids, + do_sample=do_sample, + temperature=temperature, + top_p=top_p, + max_new_tokens=max_new_tokens, + streamer=streamer, + stopping_criteria=[stopping_criteria], + use_cache=True, + **image_args + )) + thread.start() + + generated_text = ori_prompt + for new_text in streamer: + generated_text += new_text + if generated_text.endswith(stop_str): + generated_text = generated_text[:-len(stop_str)] + yield json.dumps({"text": generated_text, "error_code": 0}).encode() + + +def http_bot(state, temperature, top_p, max_new_tokens): + if state.skip_next: + # This generate call is skipped due to invalid inputs + yield (state, state.to_gradio_chatbot()) + return + + if len(state.messages) == state.offset + 2: + # First round of conversation + if "phi" in model_name.lower(): + template_name = "phi-2_v0" + else: + template_name = "phi-2_v0" + new_state = conv_templates[template_name].copy() + new_state.append_message(new_state.roles[0], state.messages[-2][1]) + new_state.append_message(new_state.roles[1], None) + state = new_state + + # Construct prompt + prompt = state.get_prompt() + + all_images = state.get_images(return_pil=True) + all_image_hash = [hashlib.md5(image.tobytes()).hexdigest() + for image in all_images] + + # Make requests + pload = { + "model": model_name, + "prompt": prompt, + "temperature": float(temperature), + "top_p": float(top_p), + "max_new_tokens": min(int(max_new_tokens), 1536), + "stop": state.sep if state.sep_style in [SeparatorStyle.SINGLE, SeparatorStyle.MPT] else state.sep2, + "images": f'List of {len(state.get_images())} images: {all_image_hash}', + } + + pload['images'] = state.get_images() + + state.messages[-1][-1] = "▌" + yield (state, state.to_gradio_chatbot()) + + # for stream + output = get_response(pload) + for chunk in output: + if chunk: + data = json.loads(chunk.decode()) + if data["error_code"] == 0: + output = data["text"][len(prompt):].strip() + state.messages[-1][-1] = output + "▌" + yield (state, state.to_gradio_chatbot()) + else: + output = data["text"] + \ + f" (error_code: {data['error_code']})" + state.messages[-1][-1] = output + yield (state, state.to_gradio_chatbot()) + return + time.sleep(0.03) + + state.messages[-1][-1] = state.messages[-1][-1][:-1] + yield (state, state.to_gradio_chatbot()) + + +def build_demo(): + textbox = gr.Textbox( + show_label=False, placeholder="Enter text and press ENTER", container=False) + with gr.Blocks(title="LLaVA-Phi", theme=gr.themes.Default(), css=block_css) as demo: + state = gr.State() + gr.Markdown(title_markdown) + + with gr.Row(): + with gr.Column(scale=5): + with gr.Row(elem_id="Model ID"): + gr.Dropdown( + choices=['LLaVA-Phi-3B'], + value='LLaVA-Phi-3B', + interactive=True, + label='Model ID', + container=False) + imagebox = gr.Image(type="pil") + image_process_mode = gr.Radio( + ["Crop", "Resize", "Pad", "Default"], + value="Default", + label="Preprocess for non-square image", visible=False) + + cur_dir = os.path.dirname(os.path.abspath(__file__)) + gr.Examples(examples=[ + [f"{cur_dir}/examples/extreme_ironing.jpg", + "What is unusual about this image?"], + [f"{cur_dir}/examples/waterview.jpg", + "What are the things I should be cautious about when I visit here?"], + ], inputs=[imagebox, textbox]) + + with gr.Accordion("Parameters", open=False) as _: + temperature = gr.Slider( + minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True, label="Temperature", ) + top_p = gr.Slider( + minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P", ) + max_output_tokens = gr.Slider( + minimum=0, maximum=1024, value=512, step=64, interactive=True, label="Max output tokens", ) + + with gr.Column(scale=8): + chatbot = gr.Chatbot( + elem_id="chatbot", label="LLaVA-Phi Chatbot", height=550) + with gr.Row(): + with gr.Column(scale=8): + textbox.render() + with gr.Column(scale=1, min_width=50): + submit_btn = gr.Button(value="Send", variant="primary") + with gr.Row(elem_id="buttons") as _: + regenerate_btn = gr.Button( + value="🔄 Regenerate", interactive=True) + clear_btn = gr.Button(value="🗑️ Clear", interactive=True) + + gr.Markdown(tos_markdown) + gr.Markdown(learn_more_markdown) + gr.Markdown(ack_markdown) + + regenerate_btn.click( + regenerate, + [state, image_process_mode], + [state, chatbot, textbox, imagebox], + queue=False + ).then( + http_bot, + [state, temperature, top_p, max_output_tokens], + [state, chatbot] + ) + + clear_btn.click( + clear_history, + None, + [state, chatbot, textbox, imagebox], + queue=False + ) + + textbox.submit( + add_text, + [state, textbox, imagebox, image_process_mode], + [state, chatbot, textbox, imagebox], + queue=False + ).then( + http_bot, + [state, temperature, top_p, max_output_tokens], + [state, chatbot] + ) + + submit_btn.click( + add_text, + [state, textbox, imagebox, image_process_mode], + [state, chatbot, textbox, imagebox], + queue=False + ).then( + http_bot, + [state, temperature, top_p, max_output_tokens], + [state, chatbot] + ) + + demo.load( + load_demo, + None, + [state], + queue=False + ) + return demo + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--host", type=str, default="0.0.0.0") + parser.add_argument("--port", type=int, default=7860) + parser.add_argument("--share", default=True) + parser.add_argument("--model-path", type=str, + default="checkpoints/llavaPhi-v0-3b-finetune") + parser.add_argument("--model-name", type=str, + default="llavaPhi-v0-3b") + args = parser.parse_args() + return args + + +if __name__ == '__main__': + args = parse_args() + model_name = args.model_name + tokenizer, model, image_processor, context_len = load_pretrained_model( + args.model_path, None, args.model_name, False, False) + demo = build_demo() + demo.queue() + demo.launch(server_name=args.host, + server_port=args.port, + share=args.share) diff --git a/llava-phi/llava_phi/serve/cli.py b/llava-phi/llava_phi/serve/cli.py new file mode 100644 index 0000000000000000000000000000000000000000..0e82651f5a22cf94ee8bf514b48109b3c5d8449d --- /dev/null +++ b/llava-phi/llava_phi/serve/cli.py @@ -0,0 +1,121 @@ +import argparse +import torch + +from llava_phi.constants import IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, DEFAULT_IM_END_TOKEN +from llava_phi.conversation import conv_templates, SeparatorStyle +from llava_phi.model.builder import load_pretrained_model +from llava_phi.utils import disable_torch_init +from llava_phi.mm_utils import tokenizer_image_token, get_model_name_from_path, KeywordsStoppingCriteria + +from PIL import Image + +import requests +from PIL import Image +from io import BytesIO +from transformers import TextStreamer + + +def load_image(image_file): + if image_file.startswith('http') or image_file.startswith('https'): + response = requests.get(image_file) + image = Image.open(BytesIO(response.content)).convert('RGB') + else: + image = Image.open(image_file).convert('RGB') + return image + + +def main(args): + # Model + disable_torch_init() + + model_name = get_model_name_from_path(args.model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(args.model_path, args.model_base, model_name, args.load_8bit, args.load_4bit) + + if 'llama-2' in model_name.lower(): + conv_mode = "llava_llama_2" + elif "v1" in model_name.lower(): + conv_mode = "llava_v1" + elif "mpt" in model_name.lower(): + conv_mode = "mpt" + else: + conv_mode = "llava_v0" + conv_mode="vicuna_v1" + if args.conv_mode is not None and conv_mode != args.conv_mode: + print('[WARNING] the auto inferred conversation mode is {}, while `--conv-mode` is {}, using {}'.format(conv_mode, args.conv_mode, args.conv_mode)) + else: + args.conv_mode = conv_mode + + conv = conv_templates[args.conv_mode].copy() + if "mpt" in model_name.lower(): + roles = ('user', 'assistant') + else: + roles = conv.roles + + image = load_image(args.image_file) + image_tensor = image_processor.preprocess(image, return_tensors='pt')['pixel_values'].cuda() + + while True: + try: + inp = input(f"{roles[0]}: ") + except EOFError: + inp = "" + if not inp: + print("exit...") + break + + print(f"{roles[1]}: ", end="") + + if image is not None: + # first message + if model.config.mm_use_im_start_end: + inp = DEFAULT_IM_START_TOKEN + DEFAULT_IMAGE_TOKEN + DEFAULT_IM_END_TOKEN + '\n' + inp + else: + inp = DEFAULT_IMAGE_TOKEN + '\n' + inp + conv.append_message(conv.roles[0], inp) + image = None + else: + # later messages + conv.append_message(conv.roles[0], inp) + conv.append_message(conv.roles[1], None) + prompt = conv.get_prompt() + + input_ids = tokenizer_image_token(prompt, tokenizer, IMAGE_TOKEN_INDEX, return_tensors='pt').unsqueeze(0).cuda() + stop_str = conv.sep if conv.sep_style != SeparatorStyle.TWO else conv.sep2 + keywords = [stop_str] + stopping_criteria = KeywordsStoppingCriteria(keywords, tokenizer, input_ids) + streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True) + + with torch.inference_mode(): + output_ids = model.generate( + input_ids, + images=image_tensor, + do_sample=True, + temperature=0.2, + max_new_tokens=1024, + streamer=streamer, + use_cache=True, + eos_token_id=tokenizer.eos_token_id, # End of sequence token + pad_token_id=tokenizer.eos_token_id, # Pad token + stopping_criteria=[stopping_criteria]) + + outputs = tokenizer.decode(output_ids[0, input_ids.shape[1]:]).strip() + conv.messages[-1][-1] = outputs + + if args.debug: + print("\n", {"prompt": prompt, "outputs": outputs}, "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, default="facebook/opt-350m") + parser.add_argument("--model-base", type=str, default=None) + parser.add_argument("--image-file", type=str, required=True) + parser.add_argument("--num-gpus", type=int, default=1) + parser.add_argument("--conv-mode", type=str, default=None) + parser.add_argument("--temperature", type=float, default=0.2) + parser.add_argument("--max-new-tokens", type=int, default=512) + parser.add_argument("--load-8bit", action="store_true") + parser.add_argument("--load-4bit", action="store_true") + parser.add_argument("--debug", action="store_true") + args = parser.parse_args() + main(args) diff --git a/llava-phi/llava_phi/serve/examples/extreme_ironing.jpg b/llava-phi/llava_phi/serve/examples/extreme_ironing.jpg new file mode 100644 index 0000000000000000000000000000000000000000..638b078837f175039b2db49a63821288d9681daa Binary files /dev/null and b/llava-phi/llava_phi/serve/examples/extreme_ironing.jpg differ diff --git a/llava-phi/llava_phi/serve/examples/waterview.jpg b/llava-phi/llava_phi/serve/examples/waterview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6f44ebaba1aa493b8bab3baa4e827b76752b1869 Binary files /dev/null and b/llava-phi/llava_phi/serve/examples/waterview.jpg differ diff --git a/llava-phi/llava_phi/train/convert_model2base_llava_phi.py b/llava-phi/llava_phi/train/convert_model2base_llava_phi.py new file mode 100644 index 0000000000000000000000000000000000000000..8ffa28b4e860a97f94b1e478793393941072076d --- /dev/null +++ b/llava-phi/llava_phi/train/convert_model2base_llava_phi.py @@ -0,0 +1,767 @@ +# Adopted from https://github.com/lm-sys/FastChat. Below is the original copyright: +# Adopted from tatsu-lab@stanford_alpaca. Below is the original copyright: +# Copyright 2023 Rohan Taori, Ishaan Gulrajani, Tianyi Zhang, Yann Dubois, Xuechen Li +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import copy +from dataclasses import dataclass, field +import json +import logging +import pathlib +from typing import Dict, Optional, Sequence, List + +import torch + +import transformers + +from llava_phi.constants import IGNORE_INDEX, IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, \ + DEFAULT_IM_END_TOKEN +from torch.utils.data import Dataset +from llava_phi.train.llava_phi_trainer import LLaVAPhiTrainer + +from llava_phi import conversation as conversation_lib +from llava_phi.model import * +from llava_phi.mm_utils import tokenizer_image_token +from transformers import CLIPVisionConfig, CLIPImageProcessor + +from PIL import Image + +local_rank = None + + +def rank0_print(*args): + if local_rank == 0: + print(*args) + + +@dataclass +class ModelArguments: + model_name_or_path: Optional[str] = field(default="facebook/opt-125m") + version: Optional[str] = field(default="v0") + freeze_backbone: bool = field(default=False) + tune_mm_mlp_adapter: bool = field(default=False) + freeze_vision_tower: bool = field(default=False) + vision_tower: Optional[str] = field(default=None) + mm_vision_select_layer: Optional[int] = field(default=-1) # default to the last layer + mm_vision_select_feature: Optional[str] = field(default="patch") + pretrain_mm_mlp_adapter: Optional[str] = field(default=None) + mm_use_im_start_end: bool = field(default=False) + mm_use_im_patch_token: bool = field(default=True) + + + +@dataclass +class ProjectorArguments: + mm_projector_type: Optional[str] = field(default='linear') + + +@dataclass +class DataArguments: + data_path: str = field(default=None, + metadata={"help": "Path to the training data."}) + lazy_preprocess: bool = False + is_multimodal: bool = False + image_folder: Optional[str] = field(default=None) + image_aspect_ratio: str = 'square' + + +@dataclass +class TrainingArguments(transformers.TrainingArguments): + cache_dir: Optional[str] = field(default=None) + optim: str = field(default="adamw_torch") + adam_beta1: float = field(default=0.9) + adam_beta2: float = field(default=0.98) + adam_epsilon: float = field(default=1e-7) + remove_unused_columns: bool = field(default=False) + + # freeze_mm_mlp_adapter: bool = field(default=False) + model_max_length: int = field( + default=512, + metadata={ + "help": + "Maximum sequence length. Sequences will be right padded (and possibly truncated)." + }, + ) + double_quant: bool = field( + default=True, + metadata={"help": "Compress the quantization statistics through double quantization."} + ) + quant_type: str = field( + default="nf4", + metadata={"help": "Quantization data type to use. Should be one of `fp4` or `nf4`."} + ) + bits: int = field( + default=16, + metadata={"help": "How many bits to use."} + ) + lora_enable: bool = False + lora_r: int = 64 + lora_alpha: int = 16 + lora_dropout: float = 0.05 + lora_weight_path: str = "" + lora_bias: str = "none" + mm_projector_lr: Optional[float] = None + group_by_modality_length: bool = field(default=False) + + +def maybe_zero_3(param, ignore_status=False, name=None): + from deepspeed import zero + from deepspeed.runtime.zero.partition_parameters import ZeroParamStatus + if hasattr(param, "ds_id"): + if param.ds_status == ZeroParamStatus.NOT_AVAILABLE: + if not ignore_status: + logging.warning(f"{name}: param.ds_status != ZeroParamStatus.NOT_AVAILABLE: {param.ds_status}") + with zero.GatheredParameters([param]): + param = param.data.detach().cpu().clone() + else: + param = param.detach().cpu().clone() + return param + + +# Borrowed from peft.utils.get_peft_model_state_dict +def get_peft_state_maybe_zero_3(named_params, bias): + if bias == "none": + to_return = {k: t for k, t in named_params if "lora_" in k} + elif bias == "all": + to_return = {k: t for k, t in named_params if "lora_" in k or "bias" in k} + elif bias == "lora_only": + to_return = {} + maybe_lora_bias = {} + lora_bias_names = set() + for k, t in named_params: + if "lora_" in k: + to_return[k] = t + bias_name = k.split("lora_")[0] + "bias" + lora_bias_names.add(bias_name) + elif "bias" in k: + maybe_lora_bias[k] = t + for k, t in maybe_lora_bias: + if bias_name in lora_bias_names: + to_return[bias_name] = t + else: + raise NotImplementedError + to_return = {k: maybe_zero_3(v, ignore_status=True) for k, v in to_return.items()} + return to_return + + +def get_peft_state_non_lora_maybe_zero_3(named_params, require_grad_only=True): + to_return = {k: t for k, t in named_params if "lora_" not in k} + if require_grad_only: + to_return = {k: t for k, t in to_return.items() if t.requires_grad} + to_return = {k: maybe_zero_3(v, ignore_status=True).cpu() for k, v in to_return.items()} + return to_return + + +def get_mm_adapter_state_maybe_zero_3(named_params, keys_to_match): + to_return = {k: t for k, t in named_params if any(key_match in k for key_match in keys_to_match)} + to_return = {k: maybe_zero_3(v, ignore_status=True).cpu() for k, v in to_return.items()} + return to_return + + +def find_all_linear_names(model): + cls = torch.nn.Linear + lora_module_names = set() + multimodal_keywords = ['mm_projector', 'vision_tower', 'vision_resampler'] + for name, module in model.named_modules(): + if any(mm_keyword in name for mm_keyword in multimodal_keywords): + continue + if isinstance(module, cls): + names = name.split('.') + lora_module_names.add(names[0] if len(names) == 1 else names[-1]) + + if 'lm_head' in lora_module_names: # needed for 16-bit + lora_module_names.remove('lm_head') + return list(lora_module_names) + + +def safe_save_model_for_hf_trainer(trainer: transformers.Trainer, + output_dir: str): + """Collects the state dict and dump to disk.""" + + # if getattr(trainer.args, "tune_mm_mlp_adapter", False): + # # Only save Adapter + # keys_to_match = ['mm_projector'] + # if getattr(trainer.args, "use_im_start_end", False): + # keys_to_match.extend(['embed_tokens', 'embed_in']) + # + # weight_to_save = get_mm_adapter_state_maybe_zero_3(trainer.model.named_parameters(), keys_to_match) + # trainer.model.config.save_pretrained(output_dir) + # + # current_folder = output_dir.split('/')[-1] + # parent_folder = os.path.dirname(output_dir) + # if trainer.args.local_rank == 0 or trainer.args.local_rank == -1: + # if current_folder.startswith('checkpoint-'): + # mm_projector_folder = os.path.join(parent_folder, "mm_projector") + # os.makedirs(mm_projector_folder, exist_ok=True) + # torch.save(weight_to_save, os.path.join(mm_projector_folder, f'{current_folder}.bin')) + # else: + # torch.save(weight_to_save, os.path.join(output_dir, f'mm_projector.bin')) + # + # if getattr(trainer.args, "freeze_vision_model", False): + # pass + # return + + if trainer.deepspeed: + torch.cuda.synchronize() + trainer.save_model(output_dir) + return + + state_dict = trainer.model.state_dict() + if trainer.args.should_save: + cpu_state_dict = { + key: value.cpu() + for key, value in state_dict.items() + } + del state_dict + trainer._save(output_dir, state_dict=cpu_state_dict) # noqa + + +def smart_tokenizer_and_embedding_resize( + special_tokens_dict: Dict, + tokenizer: transformers.PreTrainedTokenizer, + model: transformers.PreTrainedModel, +): + """Resize tokenizer and embedding. + + Note: This is the unoptimized version that may make your embedding size not be divisible by 64. + """ + num_new_tokens = tokenizer.add_special_tokens(special_tokens_dict) + model.resize_token_embeddings(len(tokenizer)) + + if num_new_tokens > 0: + input_embeddings = model.get_input_embeddings().weight.data + output_embeddings = model.get_output_embeddings().weight.data + + input_embeddings_avg = input_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + output_embeddings_avg = output_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + + input_embeddings[-num_new_tokens:] = input_embeddings_avg + output_embeddings[-num_new_tokens:] = output_embeddings_avg + + +def _tokenize_fn(strings: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer) -> Dict: + """Tokenize a list of strings.""" + tokenized_list = [ + tokenizer( + text, + return_tensors="pt", + padding="longest", + max_length=tokenizer.model_max_length, + truncation=True, + ) for text in strings + ] + input_ids = labels = [ + tokenized.input_ids[0] for tokenized in tokenized_list + ] + input_ids_lens = labels_lens = [ + tokenized.input_ids.ne(tokenizer.pad_token_id).sum().item() + for tokenized in tokenized_list + ] + return dict( + input_ids=input_ids, + labels=labels, + input_ids_lens=input_ids_lens, + labels_lens=labels_lens, + ) + + +def _mask_targets(target, tokenized_lens, speakers): + # cur_idx = 0 + cur_idx = tokenized_lens[0] + tokenized_lens = tokenized_lens[1:] + target[:cur_idx] = IGNORE_INDEX + for tokenized_len, speaker in zip(tokenized_lens, speakers): + if speaker == "human": + target[cur_idx + 2:cur_idx + tokenized_len] = IGNORE_INDEX + cur_idx += tokenized_len + + +def _add_speaker_and_signal(header, source, get_conversation=True): + """Add speaker and start/end signal on each round.""" + BEGIN_SIGNAL = "### " + END_SIGNAL = "\n" + conversation = header + for sentence in source: + from_str = sentence["from"] + if from_str.lower() == "human": + from_str = conversation_lib.default_conversation.roles[0] + elif from_str.lower() == "gpt": + from_str = conversation_lib.default_conversation.roles[1] + else: + from_str = 'unknown' + sentence["value"] = (BEGIN_SIGNAL + from_str + ": " + + sentence["value"] + END_SIGNAL) + if get_conversation: + conversation += sentence["value"] + conversation += BEGIN_SIGNAL + return conversation + + +def preprocess_multimodal( + sources: Sequence[str], + data_args: DataArguments +) -> Dict: + is_multimodal = data_args.is_multimodal + if not is_multimodal: + return sources + + for source in sources: + for sentence in source: + if DEFAULT_IMAGE_TOKEN in sentence['value']: + sentence['value'] = sentence['value'].replace(DEFAULT_IMAGE_TOKEN, '').strip() + sentence['value'] = DEFAULT_IMAGE_TOKEN + '\n' + sentence['value'] + sentence['value'] = sentence['value'].strip() + if "mmtag" in conversation_lib.default_conversation.version: + sentence['value'] = sentence['value'].replace(DEFAULT_IMAGE_TOKEN, + '' + DEFAULT_IMAGE_TOKEN + '') + replace_token = DEFAULT_IMAGE_TOKEN + if data_args.mm_use_im_start_end: + replace_token = DEFAULT_IM_START_TOKEN + replace_token + DEFAULT_IM_END_TOKEN + sentence["value"] = sentence["value"].replace(DEFAULT_IMAGE_TOKEN, replace_token) + + return sources + + +def preprocess_v0( + sources, + tokenizer: transformers.PreTrainedTokenizer, + has_image: bool = False +) -> Dict: + conv = conversation_lib.default_conversation.copy() + roles = {"human": conv.roles[0], "gpt": conv.roles[1]} + + # Apply prompt templates + conversations = [] + for i, source in enumerate(sources): + if roles[source[0]["from"]] != conv.roles[0]: + # Skip the first one if it is not from human + source = source[1:] + + conv.messages = [] + for j, sentence in enumerate(source): + role = roles[sentence["from"]] + assert role == conv.roles[j % 2], f"{i}" + conv.append_message(role, sentence["value"]) + conversations.append(conv.get_prompt()) + + # Tokenize conversations + if has_image: + input_ids = torch.stack( + [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations], dim=0) + else: + input_ids = tokenizer( + conversations, + return_tensors="pt", + padding="longest", + max_length=tokenizer.model_max_length, + truncation=True, + ).input_ids + + targets = input_ids.clone() + + assert conv.sep_style == conversation_lib.SeparatorStyle.TWO + + # Mask targets + sep = conv.sep + conv.roles[1] + ": " + for conversation, target in zip(conversations, targets): + total_len = int(target.ne(tokenizer.pad_token_id).sum()) + conversation.count( + conv.sep2) # in phi-2, pad_token_id == eos_token_id + + rounds = conversation.split(conv.sep2) + cur_len = 0 + if cur_len > 0: + target[:cur_len] = IGNORE_INDEX + for i, rou in enumerate(rounds): + if rou == "": + break + + parts = rou.split(sep) + if len(parts) != 2: + break + parts[0] += sep + + if has_image: + round_len = len(tokenizer_image_token(rou, tokenizer)) + 1 # +1 for <|endoftext|> + instruction_len = len(tokenizer_image_token(parts[0], tokenizer)) + else: + round_len = len(tokenizer(rou).input_ids) + 1 # +1 for <|endoftext|> + instruction_len = len(tokenizer(parts[0]).input_ids) + + target[cur_len: cur_len + instruction_len] = IGNORE_INDEX + + cur_len += round_len + target[cur_len:] = IGNORE_INDEX + + if cur_len < tokenizer.model_max_length: + if cur_len != total_len: + target[:] = IGNORE_INDEX + print(conversation) + print( + f"WARNING: tokenization mismatch: {cur_len} vs. {total_len}." + f" (ignored)" + ) + + return dict( + input_ids=input_ids, + labels=targets, + ) + + +def preprocess_plain( + sources: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer, +) -> Dict: + # add end signal and concatenate together + conversations = [] + # print(sources) + # time.sleep(5) + for source in sources: + assert len(source) == 2 + assert DEFAULT_IMAGE_TOKEN in source[0]['value'] + source[0]['value'] = DEFAULT_IMAGE_TOKEN + conversation = source[0]['value'] + source[1]['value'] + conversation_lib.default_conversation.sep + conversations.append(conversation) + # tokenize conversations + # print(conversations) + input_ids = [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations] + targets = copy.deepcopy(input_ids) + for target, source in zip(targets, sources): + tokenized_len = len(tokenizer_image_token(source[0]['value'], tokenizer)) + target[:tokenized_len] = IGNORE_INDEX + return dict(input_ids=input_ids, labels=targets) + + +def preprocess( + sources: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer, + has_image: bool = False +) -> Dict: + """ + Given a list of sources, each is a conversation list. This transform: + 1. Add signal '### ' at the beginning each sentence, with end signal '\n'; + 2. Concatenate conversations together; + 3. Tokenize the concatenated conversation; + 4. Make a deepcopy as the target. Mask human words with IGNORE_INDEX. + """ + if conversation_lib.default_conversation.sep_style == conversation_lib.SeparatorStyle.PLAIN: + return preprocess_plain(sources, tokenizer) + if conversation_lib.default_conversation.version.startswith("v0"): + return preprocess_v0(sources, tokenizer, has_image=has_image) + # add end signal and concatenate together + conversations = [] + for source in sources: + header = f"{conversation_lib.default_conversation.system}\n\n" + conversation = _add_speaker_and_signal(header, source) + conversations.append(conversation) + + # tokenize conversations + def get_tokenize_len(prompts): + return [len(tokenizer_image_token(prompt, tokenizer)) for prompt in prompts] + + if has_image: + input_ids = [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations] + else: + conversations_tokenized = _tokenize_fn(conversations, tokenizer) + input_ids = conversations_tokenized["input_ids"] + + targets = copy.deepcopy(input_ids) + for target, source in zip(targets, sources): + if has_image: + tokenized_lens = get_tokenize_len([header] + [s["value"] for s in source]) + else: + tokenized_lens = _tokenize_fn([header] + [s["value"] for s in source], tokenizer)["input_ids_lens"] + speakers = [sentence["from"] for sentence in source] + _mask_targets(target, tokenized_lens, speakers) + + return dict(input_ids=input_ids, labels=targets) + + +class LazySupervisedDataset(Dataset): + """Dataset for supervised fine-tuning.""" + + def __init__(self, data_path: str, + tokenizer: transformers.PreTrainedTokenizer, + data_args: DataArguments): + super(LazySupervisedDataset, self).__init__() + list_data_dict = json.load(open(data_path, "r")) + + rank0_print("Formatting inputs...Skip in lazy mode") + self.tokenizer = tokenizer + self.list_data_dict = list_data_dict + self.data_args = data_args + + def __len__(self): + return len(self.list_data_dict) + + @property + def lengths(self): + length_list = [] + for sample in self.list_data_dict: + img_tokens = 128 if 'image' in sample else 0 + length_list.append(sum(len(conv['value'].split()) for conv in sample['conversations']) + img_tokens) + return length_list + + @property + def modality_lengths(self): + length_list = [] + for sample in self.list_data_dict: + cur_len = sum(len(conv['value'].split()) for conv in sample['conversations']) + cur_len = cur_len if 'image' in sample else -cur_len + length_list.append(cur_len) + return length_list + + def __getitem__(self, i) -> Dict[str, torch.Tensor]: + sources = self.list_data_dict[i] + if isinstance(i, int): + sources = [sources] + assert len(sources) == 1, "Don't know why it is wrapped to a list" # FIXME + if 'image' in sources[0]: + image_file = self.list_data_dict[i]['image'] + image_folder = self.data_args.image_folder + processor = self.data_args.image_processor + image = Image.open(os.path.join(image_folder, image_file)).convert('RGB') + if self.data_args.image_aspect_ratio == 'pad': + def expand2square(pil_img, background_color): + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + + image = expand2square(image, tuple(int(x * 255) for x in processor.image_mean)) + image = processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + else: + image = processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + sources = preprocess_multimodal( + copy.deepcopy([e["conversations"] for e in sources]), + self.data_args) + else: + sources = copy.deepcopy([e["conversations"] for e in sources]) + data_dict = preprocess( + sources, + self.tokenizer, + has_image=('image' in self.list_data_dict[i])) + if isinstance(i, int): + data_dict = dict(input_ids=data_dict["input_ids"][0], + labels=data_dict["labels"][0]) + + # image exist in the data + if 'image' in self.list_data_dict[i]: + data_dict['image'] = image + elif self.data_args.is_multimodal: + # image does not exist in the data, but the model is multimodal + crop_size = self.data_args.image_processor.crop_size + data_dict['image'] = torch.zeros(3, crop_size['height'], crop_size['width']) + return data_dict + + +@dataclass +class DataCollatorForSupervisedDataset(object): + """Collate examples for supervised fine-tuning.""" + + tokenizer: transformers.PreTrainedTokenizer + + def __call__(self, instances: Sequence[Dict]) -> Dict[str, torch.Tensor]: + input_ids, labels = tuple([instance[key] for instance in instances] + for key in ("input_ids", "labels")) + temp_pad_token_id = 51000 + input_ids = torch.nn.utils.rnn.pad_sequence( + input_ids, + batch_first=True, + padding_value=temp_pad_token_id) + labels = torch.nn.utils.rnn.pad_sequence(labels, + batch_first=True, + padding_value=IGNORE_INDEX) + input_ids = input_ids[:, :self.tokenizer.model_max_length] + labels = labels[:, :self.tokenizer.model_max_length] + batch = dict( + input_ids=input_ids, + labels=labels, + attention_mask=input_ids.ne(temp_pad_token_id), + ) + + if 'image' in instances[0]: + images = [instance['image'] for instance in instances] + if all(x is not None and x.shape == images[0].shape for x in images): + batch['images'] = torch.stack(images) + else: + batch['images'] = images + + return batch + + +def make_supervised_data_module(tokenizer: transformers.PreTrainedTokenizer, + data_args) -> Dict: + """Make dataset and collator for supervised fine-tuning.""" + train_dataset = LazySupervisedDataset(tokenizer=tokenizer, + data_path=data_args.data_path, + data_args=data_args) + data_collator = DataCollatorForSupervisedDataset(tokenizer=tokenizer) + return dict(train_dataset=train_dataset, + eval_dataset=None, + data_collator=data_collator) + + +def train(): + global local_rank + + parser = transformers.HfArgumentParser( + (ModelArguments, DataArguments, TrainingArguments, ProjectorArguments)) + model_args, data_args, training_args, projector_args = parser.parse_args_into_dataclasses() + local_rank = training_args.local_rank + compute_dtype = (torch.float16 if training_args.fp16 else (torch.bfloat16 if training_args.bf16 else torch.float32)) + + bnb_model_from_pretrained_args = {} + if training_args.bits in [4, 8]: + from transformers import BitsAndBytesConfig + bnb_model_from_pretrained_args.update(dict( + device_map={"": training_args.device}, + load_in_4bit=training_args.bits == 4, + load_in_8bit=training_args.bits == 8, + quantization_config=BitsAndBytesConfig( + load_in_4bit=training_args.bits == 4, + load_in_8bit=training_args.bits == 8, + llm_int8_skip_modules=["mm_projector"], + llm_int8_threshold=6.0, + llm_int8_has_fp16_weight=False, + bnb_4bit_compute_dtype=compute_dtype, + bnb_4bit_use_double_quant=training_args.double_quant, + bnb_4bit_quant_type=training_args.quant_type # {'fp4', 'nf4'} + ) + )) + + if model_args.vision_tower is not None: + config = LlavaPhiConfig.from_pretrained(model_args.model_name_or_path, trust_remote_code=True) + clip_config = CLIPVisionConfig.from_pretrained(model_args.vision_tower) + vis_config = LlavaPhiVisionConfig(**clip_config.to_dict()) + config.vision_config["vision_tower"] = vis_config.to_dict() + config.vision_config["vision_tower"]["mm_vision_select_feature"] = model_args.mm_vision_select_feature + config.vision_config["vision_tower"]["mm_vision_select_layer"] = model_args.mm_vision_select_layer + + config.vision_config["mm_projector"]["mm_projector_type"] = projector_args.mm_projector_type + config.vision_config["mm_projector"]["mm_hidden_size"] = vis_config.hidden_size + config.vision_config["mm_projector"]["hidden_size"] = config.hidden_size + + model = LlavaPhiForCausalLM.from_pretrained( + model_args.model_name_or_path, + config=config, + cache_dir=training_args.cache_dir, + trust_remote_code=True, + **bnb_model_from_pretrained_args + ) + rank0_print(model) + clip_model_param = torch.load(os.path.join(model_args.vision_tower, "pytorch_model.bin"), map_location='cpu') + model.get_model().vision_tower.load_state_dict(clip_model_param, strict=False) + else: + model = transformers.PhiForCausalLM.from_pretrained( + model_args.model_name_or_path, + cache_dir=training_args.cache_dir, + **bnb_model_from_pretrained_args + ) + model.config.use_cache = False + + if model_args.freeze_backbone: + model.model.requires_grad_(False) + + if training_args.gradient_checkpointing: + if hasattr(model, "enable_input_require_grads"): + model.enable_input_require_grads() + else: + def make_inputs_require_grad(module, input, output): + output.requires_grad_(True) + + model.get_input_embeddings().register_forward_hook(make_inputs_require_grad) + + if 'phi' in model_args.model_name_or_path: + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + cache_dir=training_args.cache_dir, + model_max_length=training_args.model_max_length, + padding_side="right" + ) + else: + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + cache_dir=training_args.cache_dir, + model_max_length=training_args.model_max_length, + padding_side="right", + use_fast=False, + ) + + tokenizer.pad_token = tokenizer.unk_token + if model_args.version in conversation_lib.conv_templates: + conversation_lib.default_conversation = conversation_lib.conv_templates[model_args.version] + else: + conversation_lib.default_conversation = conversation_lib.conv_templates["phi-2_v0"] + + assert model_args.vision_tower is not None, "llava_phi-phi only supports multi-modal models" + if model_args.vision_tower is not None: + + vision_tower = model.get_vision_tower() + vision_tower.to(dtype=torch.bfloat16 if training_args.bf16 else torch.float16, device=training_args.device) + + data_args.image_processor = CLIPImageProcessor.from_pretrained(model_args.vision_tower) + data_args.is_multimodal = True + + model.config.image_aspect_ratio = data_args.image_aspect_ratio + model.config.tokenizer_padding_side = tokenizer.padding_side + model.config.tokenizer_model_max_length = tokenizer.model_max_length + + model.config.tune_mm_mlp_adapter = training_args.tune_mm_mlp_adapter = model_args.tune_mm_mlp_adapter + model.requires_grad_(False) + if model_args.tune_mm_mlp_adapter: + for p in model.get_model().mm_projector.parameters(): + p.requires_grad = True + + model.config.freeze_vision_tower = training_args.freeze_vision_tower = model_args.freeze_vision_tower + if not model_args.freeze_vision_tower: + for p in model.get_model().vision_tower.parameters(): + p.requires_grad = True + + if training_args.bits in [4, 8]: + model.get_model().mm_projector.to(dtype=compute_dtype, device=training_args.device) + + model.config.mm_use_im_start_end = data_args.mm_use_im_start_end = model_args.mm_use_im_start_end + model.config.mm_projector_lr = training_args.mm_projector_lr + training_args.use_im_start_end = model_args.mm_use_im_start_end + model.config.mm_use_im_patch_token = model_args.mm_use_im_patch_token + model.initialize_vision_tokenizer(model_args, tokenizer=tokenizer) + + data_module = make_supervised_data_module(tokenizer=tokenizer, + data_args=data_args) + + trainer = LLaVAPhiTrainer(model=model, + tokenizer=tokenizer, + args=training_args, + **data_module) + # integrate the MLLM + trainer.save_state() + + model.config.use_cache = True + + safe_save_model_for_hf_trainer(trainer=trainer, output_dir=training_args.output_dir) + + +if __name__ == "__main__": + train() diff --git a/llava-phi/llava_phi/train/llava_phi_trainer.py b/llava-phi/llava_phi/train/llava_phi_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..f007b65aad9cdad7e5601c21d475defc45884723 --- /dev/null +++ b/llava-phi/llava_phi/train/llava_phi_trainer.py @@ -0,0 +1,156 @@ +import os +import torch + +from torch.utils.data import Sampler + +from transformers import Trainer +from transformers.trainer import ( + has_length, +) +from typing import List, Optional + + +def maybe_zero_3(param, ignore_status=False, name=None): + from deepspeed import zero + from deepspeed.runtime.zero.partition_parameters import ZeroParamStatus + if hasattr(param, "ds_id"): + if param.ds_status == ZeroParamStatus.NOT_AVAILABLE: + if not ignore_status: + print(name, 'no ignore status') + with zero.GatheredParameters([param]): + param = param.data.detach().cpu().clone() + else: + param = param.detach().cpu().clone() + return param + + +def get_mm_adapter_state_maybe_zero_3(named_params, keys_to_match): + to_return = {k: t for k, t in named_params if any(key_match in k for key_match in keys_to_match)} + to_return = {k: maybe_zero_3(v, ignore_status=True, name=k).cpu() for k, v in to_return.items()} + return to_return + + +def split_to_even_chunks(indices, lengths, num_chunks): + """ + Split a list of indices into `chunks` chunks of roughly equal lengths. + """ + + if len(indices) % num_chunks != 0: + return [indices[i::num_chunks] for i in range(num_chunks)] + + num_indices_per_chunk = len(indices) // num_chunks + + chunks = [[] for _ in range(num_chunks)] + chunks_lengths = [0 for _ in range(num_chunks)] + for index in indices: + shortest_chunk = chunks_lengths.index(min(chunks_lengths)) + chunks[shortest_chunk].append(index) + chunks_lengths[shortest_chunk] += lengths[index] + if len(chunks[shortest_chunk]) == num_indices_per_chunk: + chunks_lengths[shortest_chunk] = float("inf") + + return chunks + + +def get_modality_length_grouped_indices(lengths, batch_size, world_size, generator=None): + # We need to use torch for the random part as a distributed sampler will set the random seed for torch. + assert all(l != 0 for l in lengths), "Should not have zero length." + # assert all(l > 0 for l in lengths) or all(l < 0 for l in lengths), "Should have only positive or negative lengths." + + mm_indices, mm_lengths = zip(*[(i, l) for i, l in enumerate(lengths) if l > 0]) + lang_indices, lang_lengths = zip(*[(i, -l) for i, l in enumerate(lengths) if l < 0]) + + assert len(mm_indices) > 0, "Should have at least one multimodal sample." + assert len(lang_indices) > 0, "Should have at least one language sample." + + mm_shuffle = [mm_indices[i] for i in get_length_grouped_indices(mm_lengths, batch_size, world_size, generator=None)] + lang_shuffle = [lang_indices[i] for i in get_length_grouped_indices(lang_lengths, batch_size, world_size, generator=None)] + megabatch_size = world_size * batch_size + mm_megabatches = [mm_shuffle[i : i + megabatch_size] for i in range(0, len(mm_shuffle), megabatch_size)] + lang_megabatches = [lang_shuffle[i : i + megabatch_size] for i in range(0, len(lang_shuffle), megabatch_size)] + + last_mm = mm_megabatches[-1] + last_lang = lang_megabatches[-1] + additional_batch = last_mm + last_lang + megabatches = mm_megabatches[:-1] + lang_megabatches[:-1] + megabatch_indices = torch.randperm(len(megabatches), generator=generator) + megabatches = [megabatches[i] for i in megabatch_indices] + + if len(additional_batch) >= megabatch_size: + megabatches = [additional_batch[:megabatch_size]] + megabatches + additional_batch = additional_batch[megabatch_size:] + + if len(additional_batch) > 0: + megabatches.append(additional_batch) + + return [i for megabatch in megabatches for i in megabatch] + + +def get_length_grouped_indices(lengths, batch_size, world_size, generator=None, merge=True): + # We need to use torch for the random part as a distributed sampler will set the random seed for torch. + indices = torch.randperm(len(lengths), generator=generator) + megabatch_size = world_size * batch_size + megabatches = [indices[i : i + megabatch_size].tolist() for i in range(0, len(lengths), megabatch_size)] + megabatches = [sorted(megabatch, key=lambda i: lengths[i], reverse=True) for megabatch in megabatches] + megabatches = [split_to_even_chunks(megabatch, lengths, world_size) for megabatch in megabatches] + + return [i for megabatch in megabatches for batch in megabatch for i in batch] + + +class LengthGroupedSampler(Sampler): + r""" + Sampler that samples indices in a way that groups together features of the dataset of roughly the same length while + keeping a bit of randomness. + """ + + def __init__( + self, + batch_size: int, + world_size: int, + lengths: Optional[List[int]] = None, + generator=None, + group_by_modality: bool = False, + ): + if lengths is None: + raise ValueError("Lengths must be provided.") + + self.batch_size = batch_size + self.world_size = world_size + self.lengths = lengths + self.generator = generator + self.group_by_modality = group_by_modality + + def __len__(self): + return len(self.lengths) + + def __iter__(self): + if self.group_by_modality: + indices = get_modality_length_grouped_indices(self.lengths, self.batch_size, self.world_size, generator=self.generator) + else: + indices = get_length_grouped_indices(self.lengths, self.batch_size, self.world_size, generator=self.generator) + return iter(indices) + + +class LLaVAPhiTrainer(Trainer): + + def _get_train_sampler(self) -> Optional[torch.utils.data.Sampler]: + if self.train_dataset is None or not has_length(self.train_dataset): + return None + + if self.args.group_by_modality_length: + lengths = self.train_dataset.modality_lengths + return LengthGroupedSampler( + # self.args.train_batch_size * self.args.gradient_accumulation_steps, # TODO: seems that we should not have gradient_accumulation_steps + self.args.train_batch_size, + world_size=self.args.world_size, + lengths=lengths, + group_by_modality=True, + ) + else: + return super()._get_train_sampler() + + def _save_checkpoint(self, model, trial, metrics=None): + super(LLaVAPhiTrainer, self)._save_checkpoint(model, trial, metrics) + + def _save(self, output_dir: Optional[str] = None, state_dict=None): + super(LLaVAPhiTrainer, self)._save(output_dir, state_dict) diff --git a/llava-phi/llava_phi/train/train.py b/llava-phi/llava_phi/train/train.py new file mode 100644 index 0000000000000000000000000000000000000000..6aaed5b7f2eb0c82d63d6bd2b0be45a3d0cd02c5 --- /dev/null +++ b/llava-phi/llava_phi/train/train.py @@ -0,0 +1,783 @@ +# Adopted from https://github.com/lm-sys/FastChat. Below is the original copyright: +# Adopted from tatsu-lab@stanford_alpaca. Below is the original copyright: +# Copyright 2023 Rohan Taori, Ishaan Gulrajani, Tianyi Zhang, Yann Dubois, Xuechen Li +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +import copy +from dataclasses import dataclass, field +import json +import logging +import pathlib +from typing import Dict, Optional, Sequence, List + +import torch + +import transformers + +from llava_phi.constants import IGNORE_INDEX, IMAGE_TOKEN_INDEX, DEFAULT_IMAGE_TOKEN, DEFAULT_IM_START_TOKEN, \ + DEFAULT_IM_END_TOKEN +from torch.utils.data import Dataset +from llava_phi.train.llava_phi_trainer import LLaVAPhiTrainer + +from llava_phi import conversation as conversation_lib +from llava_phi.model import * +from llava_phi.mm_utils import tokenizer_image_token +from transformers import CLIPVisionConfig, CLIPImageProcessor + +from PIL import Image + +local_rank = None + + +def rank0_print(*args): + if local_rank == 0: + print(*args) + + +@dataclass +class ModelArguments: + model_name_or_path: Optional[str] = field(default="facebook/opt-125m") + version: Optional[str] = field(default="v0") + freeze_backbone: bool = field(default=False) + tune_mm_mlp_adapter: bool = field(default=False) + freeze_vision_tower: bool = field(default=False) + mm_use_im_start_end: bool = field(default=False) + mm_use_im_patch_token: bool = field(default=True) + + +@dataclass +class DataArguments: + data_path: str = field(default=None, + metadata={"help": "Path to the training data."}) + lazy_preprocess: bool = False + is_multimodal: bool = False + image_folder: Optional[str] = field(default=None) + image_aspect_ratio: str = 'square' + + +@dataclass +class TrainingArguments(transformers.TrainingArguments): + cache_dir: Optional[str] = field(default=None) + optim: str = field(default="adamw_torch") + adam_beta1: float = field(default=0.9) + adam_beta2: float = field(default=0.98) + adam_epsilon: float = field(default=1e-7) + remove_unused_columns: bool = field(default=False) + + # freeze_mm_mlp_adapter: bool = field(default=False) + model_max_length: int = field( + default=512, + metadata={ + "help": + "Maximum sequence length. Sequences will be right padded (and possibly truncated)." + }, + ) + double_quant: bool = field( + default=True, + metadata={"help": "Compress the quantization statistics through double quantization."} + ) + quant_type: str = field( + default="nf4", + metadata={"help": "Quantization data type to use. Should be one of `fp4` or `nf4`."} + ) + bits: int = field( + default=16, + metadata={"help": "How many bits to use."} + ) + lora_enable: bool = False + lora_r: int = 64 + lora_alpha: int = 16 + lora_dropout: float = 0.05 + lora_weight_path: str = "" + lora_bias: str = "none" + mm_projector_lr: Optional[float] = None + group_by_modality_length: bool = field(default=False) + + +def maybe_zero_3(param, ignore_status=False, name=None): + from deepspeed import zero + from deepspeed.runtime.zero.partition_parameters import ZeroParamStatus + if hasattr(param, "ds_id"): + if param.ds_status == ZeroParamStatus.NOT_AVAILABLE: + if not ignore_status: + logging.warning(f"{name}: param.ds_status != ZeroParamStatus.NOT_AVAILABLE: {param.ds_status}") + with zero.GatheredParameters([param]): + param = param.data.detach().cpu().clone() + else: + param = param.detach().cpu().clone() + return param + + +# Borrowed from peft.utils.get_peft_model_state_dict +def get_peft_state_maybe_zero_3(named_params, bias): + if bias == "none": + to_return = {k: t for k, t in named_params if "lora_" in k} + elif bias == "all": + to_return = {k: t for k, t in named_params if "lora_" in k or "bias" in k} + elif bias == "lora_only": + to_return = {} + maybe_lora_bias = {} + lora_bias_names = set() + for k, t in named_params: + if "lora_" in k: + to_return[k] = t + bias_name = k.split("lora_")[0] + "bias" + lora_bias_names.add(bias_name) + elif "bias" in k: + maybe_lora_bias[k] = t + for k, t in maybe_lora_bias: + if bias_name in lora_bias_names: + to_return[bias_name] = t + else: + raise NotImplementedError + to_return = {k: maybe_zero_3(v, ignore_status=True) for k, v in to_return.items()} + return to_return + + +def get_peft_state_non_lora_maybe_zero_3(named_params, require_grad_only=True): + to_return = {k: t for k, t in named_params if "lora_" not in k} + if require_grad_only: + to_return = {k: t for k, t in to_return.items() if t.requires_grad} + to_return = {k: maybe_zero_3(v, ignore_status=True).cpu() for k, v in to_return.items()} + return to_return + + +def get_mm_adapter_state_maybe_zero_3(named_params, keys_to_match): + to_return = {k: t for k, t in named_params if any(key_match in k for key_match in keys_to_match)} + to_return = {k: maybe_zero_3(v, ignore_status=True).cpu() for k, v in to_return.items()} + return to_return + + +def find_all_linear_names(model): + cls = torch.nn.Linear + lora_module_names = set() + multimodal_keywords = ['mm_projector', 'vision_tower', 'vision_resampler'] + for name, module in model.named_modules(): + if any(mm_keyword in name for mm_keyword in multimodal_keywords): + continue + if isinstance(module, cls): + names = name.split('.') + lora_module_names.add(names[0] if len(names) == 1 else names[-1]) + + if 'lm_head' in lora_module_names: # needed for 16-bit + lora_module_names.remove('lm_head') + return list(lora_module_names) + + +def safe_save_model_for_hf_trainer(trainer: transformers.Trainer, + output_dir: str): + """Collects the state dict and dump to disk.""" + + if trainer.deepspeed: + torch.cuda.synchronize() + trainer.save_model(output_dir) + return + + state_dict = trainer.model.state_dict() + if trainer.args.should_save: + cpu_state_dict = { + key: value.cpu() + for key, value in state_dict.items() + } + del state_dict + trainer._save(output_dir, state_dict=cpu_state_dict) # noqa + + +def smart_tokenizer_and_embedding_resize( + special_tokens_dict: Dict, + tokenizer: transformers.PreTrainedTokenizer, + model: transformers.PreTrainedModel, +): + """Resize tokenizer and embedding. + + Note: This is the unoptimized version that may make your embedding size not be divisible by 64. + """ + num_new_tokens = tokenizer.add_special_tokens(special_tokens_dict) + model.resize_token_embeddings(len(tokenizer)) + + if num_new_tokens > 0: + input_embeddings = model.get_input_embeddings().weight.data + output_embeddings = model.get_output_embeddings().weight.data + + input_embeddings_avg = input_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + output_embeddings_avg = output_embeddings[:-num_new_tokens].mean( + dim=0, keepdim=True) + + input_embeddings[-num_new_tokens:] = input_embeddings_avg + output_embeddings[-num_new_tokens:] = output_embeddings_avg + + +def _tokenize_fn(strings: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer) -> Dict: + """Tokenize a list of strings.""" + tokenized_list = [ + tokenizer( + text, + return_tensors="pt", + padding="longest", + max_length=tokenizer.model_max_length, + truncation=True, + ) for text in strings + ] + input_ids = labels = [ + tokenized.input_ids[0] for tokenized in tokenized_list + ] + input_ids_lens = labels_lens = [ + tokenized.input_ids.ne(tokenizer.pad_token_id).sum().item() + for tokenized in tokenized_list + ] + return dict( + input_ids=input_ids, + labels=labels, + input_ids_lens=input_ids_lens, + labels_lens=labels_lens, + ) + + +def _mask_targets(target, tokenized_lens, speakers): + # cur_idx = 0 + cur_idx = tokenized_lens[0] + tokenized_lens = tokenized_lens[1:] + target[:cur_idx] = IGNORE_INDEX + for tokenized_len, speaker in zip(tokenized_lens, speakers): + if speaker == "human": + target[cur_idx + 2:cur_idx + tokenized_len] = IGNORE_INDEX + cur_idx += tokenized_len + + +def _add_speaker_and_signal(header, source, get_conversation=True): + """Add speaker and start/end signal on each round.""" + BEGIN_SIGNAL = "### " + END_SIGNAL = "\n" + conversation = header + for sentence in source: + from_str = sentence["from"] + if from_str.lower() == "human": + from_str = conversation_lib.default_conversation.roles[0] + elif from_str.lower() == "gpt": + from_str = conversation_lib.default_conversation.roles[1] + else: + from_str = 'unknown' + sentence["value"] = (BEGIN_SIGNAL + from_str + ": " + + sentence["value"] + END_SIGNAL) + if get_conversation: + conversation += sentence["value"] + conversation += BEGIN_SIGNAL + return conversation + + +def preprocess_multimodal( + sources: Sequence[str], + data_args: DataArguments +) -> Dict: + is_multimodal = data_args.is_multimodal + if not is_multimodal: + return sources + + for source in sources: + for sentence in source: + if DEFAULT_IMAGE_TOKEN in sentence['value']: + sentence['value'] = sentence['value'].replace(DEFAULT_IMAGE_TOKEN, '').strip() + sentence['value'] = DEFAULT_IMAGE_TOKEN + '\n' + sentence['value'] + sentence['value'] = sentence['value'].strip() + replace_token = DEFAULT_IMAGE_TOKEN + if data_args.mm_use_im_start_end: + replace_token = DEFAULT_IM_START_TOKEN + replace_token + DEFAULT_IM_END_TOKEN + sentence["value"] = sentence["value"].replace(DEFAULT_IMAGE_TOKEN, replace_token) + + return sources + + +def preprocess_v0( + sources, + tokenizer: transformers.PreTrainedTokenizer, + has_image: bool = False +) -> Dict: + conv = conversation_lib.default_conversation.copy() + roles = {"human": conv.roles[0], "gpt": conv.roles[1]} + + # Apply prompt templates + conversations = [] + for i, source in enumerate(sources): + if roles[source[0]["from"]] != conv.roles[0]: + # Skip the first one if it is not from human + source = source[1:] + + conv.messages = [] + for j, sentence in enumerate(source): + role = roles[sentence["from"]] + assert role == conv.roles[j % 2], f"{i}" + conv.append_message(role, sentence["value"]) + conversations.append(conv.get_prompt()) + + # Tokenize conversations + if has_image: + input_ids = torch.stack( + [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations], dim=0) + else: + input_ids = tokenizer( + conversations, + return_tensors="pt", + padding="longest", + max_length=tokenizer.model_max_length, + truncation=True, + ).input_ids + + targets = input_ids.clone() + + assert conv.sep_style == conversation_lib.SeparatorStyle.TWO + + # Mask targets + sep = conv.sep + conv.roles[1] + ": " + for conversation, target in zip(conversations, targets): + total_len = int(target.ne(tokenizer.pad_token_id).sum()) + conversation.count( + conv.sep2) # in phi-2, pad_token_id == eos_token_id + + rounds = conversation.split(conv.sep2) + cur_len = 0 + if cur_len > 0: + target[:cur_len] = IGNORE_INDEX + for i, rou in enumerate(rounds): + if rou == "": + break + + parts = rou.split(sep) + if len(parts) != 2: + break + parts[0] += sep + + if has_image: + round_len = len(tokenizer_image_token(rou, tokenizer)) + 1 # +1 for <|endoftext|> + instruction_len = len(tokenizer_image_token(parts[0], tokenizer)) + else: + round_len = len(tokenizer(rou).input_ids) + 1 # +1 for <|endoftext|> + instruction_len = len(tokenizer(parts[0]).input_ids) + + target[cur_len: cur_len + instruction_len] = IGNORE_INDEX + + cur_len += round_len + target[cur_len:] = IGNORE_INDEX + + if cur_len < tokenizer.model_max_length: + if cur_len != total_len: + target[:] = IGNORE_INDEX + print(conversation) + print( + f"WARNING: tokenization mismatch: {cur_len} vs. {total_len}." + f" (ignored)" + ) + + return dict( + input_ids=input_ids, + labels=targets, + ) + + +def preprocess_plain( + sources: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer, +) -> Dict: + # add end signal and concatenate together + conversations = [] + # print(sources) + # time.sleep(5) + for source in sources: + assert len(source) == 2 + assert DEFAULT_IMAGE_TOKEN in source[0]['value'] + source[0]['value'] = DEFAULT_IMAGE_TOKEN + conversation = source[0]['value'] + source[1]['value'] + conversation_lib.default_conversation.sep + conversations.append(conversation) + # tokenize conversations + # print(conversations) + input_ids = [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations] + targets = copy.deepcopy(input_ids) + for target, source in zip(targets, sources): + tokenized_len = len(tokenizer_image_token(source[0]['value'], tokenizer)) + target[:tokenized_len] = IGNORE_INDEX + return dict(input_ids=input_ids, labels=targets) + + +def preprocess( + sources: Sequence[str], + tokenizer: transformers.PreTrainedTokenizer, + has_image: bool = False +) -> Dict: + """ + Given a list of sources, each is a conversation list. This transform: + 1. Add signal '### ' at the beginning each sentence, with end signal '\n'; + 2. Concatenate conversations together; + 3. Tokenize the concatenated conversation; + 4. Make a deepcopy as the target. Mask human words with IGNORE_INDEX. + """ + if conversation_lib.default_conversation.sep_style == conversation_lib.SeparatorStyle.PLAIN: + return preprocess_plain(sources, tokenizer) + elif conversation_lib.default_conversation.version.startswith("v0"): + return preprocess_v0(sources, tokenizer, has_image=has_image) + else: + raise ValueError(f"Invalid version: {conversation_lib.default_conversation.version}") + # add end signal and concatenate together + conversations = [] + for source in sources: + header = f"{conversation_lib.default_conversation.system}\n\n" + conversation = _add_speaker_and_signal(header, source) + conversations.append(conversation) + + # tokenize conversations + def get_tokenize_len(prompts): + return [len(tokenizer_image_token(prompt, tokenizer)) for prompt in prompts] + + if has_image: + input_ids = [tokenizer_image_token(prompt, tokenizer, return_tensors='pt') for prompt in conversations] + else: + conversations_tokenized = _tokenize_fn(conversations, tokenizer) + input_ids = conversations_tokenized["input_ids"] + + targets = copy.deepcopy(input_ids) + for target, source in zip(targets, sources): + if has_image: + tokenized_lens = get_tokenize_len([header] + [s["value"] for s in source]) + else: + tokenized_lens = _tokenize_fn([header] + [s["value"] for s in source], tokenizer)["input_ids_lens"] + speakers = [sentence["from"] for sentence in source] + _mask_targets(target, tokenized_lens, speakers) + + return dict(input_ids=input_ids, labels=targets) + + +class LazySupervisedDataset(Dataset): + """Dataset for supervised fine-tuning.""" + + def __init__(self, data_path: str, + tokenizer: transformers.PreTrainedTokenizer, + data_args: DataArguments): + super(LazySupervisedDataset, self).__init__() + list_data_dict = json.load(open(data_path, "r")) + + rank0_print("Formatting inputs...Skip in lazy mode") + self.tokenizer = tokenizer + self.list_data_dict = list_data_dict + self.data_args = data_args + + def __len__(self): + return len(self.list_data_dict) + + @property + def lengths(self): + length_list = [] + for sample in self.list_data_dict: + img_tokens = 128 if 'image' in sample else 0 + length_list.append(sum(len(conv['value'].split()) for conv in sample['conversations']) + img_tokens) + return length_list + + @property + def modality_lengths(self): + length_list = [] + for sample in self.list_data_dict: + cur_len = sum(len(conv['value'].split()) for conv in sample['conversations']) + cur_len = cur_len if 'image' in sample else -cur_len + length_list.append(cur_len) + return length_list + + def __getitem__(self, i) -> Dict[str, torch.Tensor]: + sources = self.list_data_dict[i] + if isinstance(i, int): + sources = [sources] + assert len(sources) == 1, "Don't know why it is wrapped to a list" # FIXME + if 'image' in sources[0]: + image_file = self.list_data_dict[i]['image'] + image_folder = self.data_args.image_folder + processor = self.data_args.image_processor + image = Image.open(os.path.join(image_folder, image_file)).convert('RGB') + if self.data_args.image_aspect_ratio == 'pad': + def expand2square(pil_img, background_color): + width, height = pil_img.size + if width == height: + return pil_img + elif width > height: + result = Image.new(pil_img.mode, (width, width), background_color) + result.paste(pil_img, (0, (width - height) // 2)) + return result + else: + result = Image.new(pil_img.mode, (height, height), background_color) + result.paste(pil_img, ((height - width) // 2, 0)) + return result + + image = expand2square(image, tuple(int(x * 255) for x in processor.image_mean)) + image = processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + else: + image = processor.preprocess(image, return_tensors='pt')['pixel_values'][0] + sources = preprocess_multimodal( + copy.deepcopy([e["conversations"] for e in sources]), + self.data_args) + else: + sources = copy.deepcopy([e["conversations"] for e in sources]) + data_dict = preprocess( + sources, + self.tokenizer, + has_image=('image' in self.list_data_dict[i])) + if isinstance(i, int): + data_dict = dict(input_ids=data_dict["input_ids"][0], + labels=data_dict["labels"][0]) + + # image exist in the data + if 'image' in self.list_data_dict[i]: + data_dict['image'] = image + elif self.data_args.is_multimodal: + # image does not exist in the data, but the model is multimodal + crop_size = self.data_args.image_processor.crop_size + data_dict['image'] = torch.zeros(3, crop_size['height'], crop_size['width']) + return data_dict + + +@dataclass +class DataCollatorForSupervisedDataset(object): + """Collate examples for supervised fine-tuning.""" + + tokenizer: transformers.PreTrainedTokenizer + + def __call__(self, instances: Sequence[Dict]) -> Dict[str, torch.Tensor]: + input_ids, labels = tuple([instance[key] for instance in instances] + for key in ("input_ids", "labels")) + # temp_pad_token_id = 51000 + input_ids = torch.nn.utils.rnn.pad_sequence( + input_ids, + batch_first=True, + padding_value=self.tokenizer.pad_token_id + # padding_value=temp_pad_token_id + ) + labels = torch.nn.utils.rnn.pad_sequence(labels, + batch_first=True, + padding_value=IGNORE_INDEX) + input_ids = input_ids[:, :self.tokenizer.model_max_length] + labels = labels[:, :self.tokenizer.model_max_length] + batch = dict( + input_ids=input_ids, + labels=labels, + attention_mask=input_ids.ne(self.tokenizer.pad_token_id) + # attention_mask=input_ids.ne(temp_pad_token_id), + ) + + if 'image' in instances[0]: + images = [instance['image'] for instance in instances] + if all(x is not None and x.shape == images[0].shape for x in images): + batch['images'] = torch.stack(images) + else: + batch['images'] = images + + return batch + + +def make_supervised_data_module(tokenizer: transformers.PreTrainedTokenizer, + data_args) -> Dict: + """Make dataset and collator for supervised fine-tuning.""" + train_dataset = LazySupervisedDataset(tokenizer=tokenizer, + data_path=data_args.data_path, + data_args=data_args) + data_collator = DataCollatorForSupervisedDataset(tokenizer=tokenizer) + return dict(train_dataset=train_dataset, + eval_dataset=None, + data_collator=data_collator) + + +def train(): + global local_rank + + parser = transformers.HfArgumentParser( + (ModelArguments, DataArguments, TrainingArguments)) + model_args, data_args, training_args = parser.parse_args_into_dataclasses() + local_rank = training_args.local_rank + compute_dtype = (torch.float16 if training_args.fp16 else (torch.bfloat16 if training_args.bf16 else torch.float32)) + + bnb_model_from_pretrained_args = {} + if training_args.bits in [4, 8]: + from transformers import BitsAndBytesConfig + bnb_model_from_pretrained_args.update(dict( + device_map={"": training_args.device}, + load_in_4bit=training_args.bits == 4, + load_in_8bit=training_args.bits == 8, + quantization_config=BitsAndBytesConfig( + load_in_4bit=training_args.bits == 4, + load_in_8bit=training_args.bits == 8, + llm_int8_skip_modules=["mm_projector"], + llm_int8_threshold=6.0, + llm_int8_has_fp16_weight=False, + bnb_4bit_compute_dtype=compute_dtype, + bnb_4bit_use_double_quant=training_args.double_quant, + bnb_4bit_quant_type=training_args.quant_type # {'fp4', 'nf4'} + ) + )) + + config = LlavaPhiConfig.from_pretrained(model_args.model_name_or_path, trust_remote_code=True) + model = LlavaPhiForCausalLM.from_pretrained( + model_args.model_name_or_path, + config=config, + cache_dir=training_args.cache_dir, + trust_remote_code=True, + **bnb_model_from_pretrained_args + ) + + model.config.use_cache = False + + if model_args.freeze_backbone: + model.model.requires_grad_(False) + else: + model.model.requires_grad_(True) + + if training_args.bits in [4, 8]: + from peft import prepare_model_for_kbit_training + model.config.torch_dtype = ( + torch.float32 if training_args.fp16 else (torch.bfloat16 if training_args.bf16 else torch.float32)) + model = prepare_model_for_kbit_training(model, use_gradient_checkpointing=training_args.gradient_checkpointing) + + # TODO: https://huggingface.co/microsoft/phi-2/discussions/31. But in this code, setting gradient_checkpointing=True, it doesn't raise any error + if training_args.gradient_checkpointing: + if hasattr(model, "enable_input_require_grads"): + model.enable_input_require_grads() + else: + def make_inputs_require_grad(module, input, output): + output.requires_grad_(True) + + model.get_input_embeddings().register_forward_hook(make_inputs_require_grad) + + if training_args.lora_enable: + from peft import LoraConfig, get_peft_model + lora_config = LoraConfig( + r=training_args.lora_r, + lora_alpha=training_args.lora_alpha, + target_modules=find_all_linear_names(model), + lora_dropout=training_args.lora_dropout, + bias=training_args.lora_bias, + task_type="CAUSAL_LM", + ) + if training_args.bits == 16: + if training_args.bf16: + model.to(torch.bfloat16) + if training_args.fp16: + model.to(torch.float16) + rank0_print("Adding LoRA adapters...") + model = get_peft_model(model, lora_config) + + if 'phi' in model_args.model_name_or_path: + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + cache_dir=training_args.cache_dir, + model_max_length=training_args.model_max_length, + padding_side="right" + ) + else: + tokenizer = transformers.AutoTokenizer.from_pretrained( + model_args.model_name_or_path, + cache_dir=training_args.cache_dir, + model_max_length=training_args.model_max_length, + padding_side="right", + use_fast=False, + ) + + tokenizer.pad_token = tokenizer.unk_token + if model_args.version in conversation_lib.conv_templates: + conversation_lib.default_conversation = conversation_lib.conv_templates[model_args.version] + else: + conversation_lib.default_conversation = conversation_lib.conv_templates["phi-2_v0"] + rank0_print("default_conversation :") + rank0_print(conversation_lib.default_conversation) + + vision_tower = model.get_vision_tower() + vision_tower.to(dtype=torch.bfloat16 if training_args.bf16 else torch.float16, device=training_args.device) + + data_args.image_processor = CLIPImageProcessor.from_pretrained(model_args.model_name_or_path) + data_args.is_multimodal = True + + model.config.image_aspect_ratio = data_args.image_aspect_ratio + model.config.tokenizer_padding_side = tokenizer.padding_side + model.config.tokenizer_model_max_length = tokenizer.model_max_length + + model.config.tune_mm_mlp_adapter = training_args.tune_mm_mlp_adapter = model_args.tune_mm_mlp_adapter + if not model_args.tune_mm_mlp_adapter: + for p in model.get_model().mm_projector.parameters(): + p.requires_grad = False + else: + for p in model.get_model().mm_projector.parameters(): + p.requires_grad = True + + model.config.freeze_vision_tower = training_args.freeze_vision_tower = model_args.freeze_vision_tower + if model_args.freeze_vision_tower: + for p in model.get_model().vision_tower.parameters(): + p.requires_grad = False + else: + for p in model.get_model().vision_tower.parameters(): + p.requires_grad = True + + if training_args.bits in [4, 8]: + model.get_model().mm_projector.to(dtype=compute_dtype, device=training_args.device) + + model.config.mm_use_im_start_end = data_args.mm_use_im_start_end = model_args.mm_use_im_start_end + model.config.mm_projector_lr = training_args.mm_projector_lr + training_args.use_im_start_end = model_args.mm_use_im_start_end + model.config.mm_use_im_patch_token = model_args.mm_use_im_patch_token + model.initialize_vision_tokenizer(model_args, tokenizer=tokenizer) + + if training_args.bits in [4, 8]: + from peft.tuners.lora import LoraLayer + for name, module in model.named_modules(): + if isinstance(module, LoraLayer): + if training_args.bf16: + module = module.to(torch.bfloat16) + if 'norm' in name: + module = module.to(torch.float32) + if 'lm_head' in name or 'embed_tokens' in name: + if hasattr(module, 'weight'): + if training_args.bf16 and module.weight.dtype == torch.float32: + module = module.to(torch.bfloat16) + + data_module = make_supervised_data_module(tokenizer=tokenizer, + data_args=data_args) + + trainer = LLaVAPhiTrainer(model=model, + tokenizer=tokenizer, + args=training_args, + **data_module) + + # if list(pathlib.Path(training_args.output_dir).glob("checkpoint-*")): + # trainer.train(resume_from_checkpoint=True) + # else: + # trainer.train() + + # TODO I dont like auto resume << REMOVE IT AND UNCOMMENT THE ABOVE CODE + trainer.train() + + trainer.save_state() + + model.config.use_cache = True + + if training_args.lora_enable: + state_dict = get_peft_state_maybe_zero_3( + model.named_parameters(), training_args.lora_bias + ) + non_lora_state_dict = get_peft_state_non_lora_maybe_zero_3( + model.named_parameters() + ) + if training_args.local_rank == 0 or training_args.local_rank == -1: + model.config.save_pretrained(training_args.output_dir) + model.save_pretrained(training_args.output_dir, state_dict=state_dict) + torch.save(non_lora_state_dict, os.path.join(training_args.output_dir, 'non_lora_trainables.bin')) + else: + safe_save_model_for_hf_trainer(trainer=trainer, + output_dir=training_args.output_dir) + + +if __name__ == "__main__": + train() diff --git a/llava-phi/llava_phi/utils.py b/llava-phi/llava_phi/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2f522a1ac6dae70fd0cd6cf3b1c418a703594ce1 --- /dev/null +++ b/llava-phi/llava_phi/utils.py @@ -0,0 +1,126 @@ +import datetime +import logging +import logging.handlers +import os +import sys + +import requests + +from llava_phi.constants import LOGDIR + +server_error_msg = "**NETWORK ERROR DUE TO HIGH TRAFFIC. PLEASE REGENERATE OR REFRESH THIS PAGE.**" +moderation_msg = "YOUR INPUT VIOLATES OUR CONTENT MODERATION GUIDELINES. PLEASE TRY AGAIN." + +handler = None + + +def build_logger(logger_name, logger_filename): + global handler + + formatter = logging.Formatter( + fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + + # Set the format of root handlers + if not logging.getLogger().handlers: + logging.basicConfig(level=logging.INFO) + logging.getLogger().handlers[0].setFormatter(formatter) + + # Redirect stdout and stderr to loggers + stdout_logger = logging.getLogger("stdout") + stdout_logger.setLevel(logging.INFO) + sl = StreamToLogger(stdout_logger, logging.INFO) + sys.stdout = sl + + stderr_logger = logging.getLogger("stderr") + stderr_logger.setLevel(logging.ERROR) + sl = StreamToLogger(stderr_logger, logging.ERROR) + sys.stderr = sl + + # Get logger + logger = logging.getLogger(logger_name) + logger.setLevel(logging.INFO) + + # Add a file handler for all loggers + if handler is None: + os.makedirs(LOGDIR, exist_ok=True) + filename = os.path.join(LOGDIR, logger_filename) + handler = logging.handlers.TimedRotatingFileHandler( + filename, when='D', utc=True) + handler.setFormatter(formatter) + + for name, item in logging.root.manager.loggerDict.items(): + if isinstance(item, logging.Logger): + item.addHandler(handler) + + return logger + + +class StreamToLogger(object): + """ + Fake file-like stream object that redirects writes to a logger instance. + """ + def __init__(self, logger, log_level=logging.INFO): + self.terminal = sys.stdout + self.logger = logger + self.log_level = log_level + self.linebuf = '' + + def __getattr__(self, attr): + return getattr(self.terminal, attr) + + def write(self, buf): + temp_linebuf = self.linebuf + buf + self.linebuf = '' + for line in temp_linebuf.splitlines(True): + # From the io.TextIOWrapper docs: + # On output, if newline is None, any '\n' characters written + # are translated to the system default line separator. + # By default sys.stdout.write() expects '\n' newlines and then + # translates them so this is still cross platform. + if line[-1] == '\n': + self.logger.log(self.log_level, line.rstrip()) + else: + self.linebuf += line + + def flush(self): + if self.linebuf != '': + self.logger.log(self.log_level, self.linebuf.rstrip()) + self.linebuf = '' + + +def disable_torch_init(): + """ + Disable the redundant torch default initialization to accelerate model creation. + """ + import torch + setattr(torch.nn.Linear, "reset_parameters", lambda self: None) + setattr(torch.nn.LayerNorm, "reset_parameters", lambda self: None) + + +def violates_moderation(text): + """ + Check whether the text violates OpenAI moderation API. + """ + url = "https://api.openai.com/v1/moderations" + headers = {"Content-Type": "application/json", + "Authorization": "Bearer " + os.environ["OPENAI_API_KEY"]} + text = text.replace("\n", "") + data = "{" + '"input": ' + f'"{text}"' + "}" + data = data.encode("utf-8") + try: + ret = requests.post(url, headers=headers, data=data, timeout=5) + flagged = ret.json()["results"][0]["flagged"] + except requests.exceptions.RequestException as e: + flagged = False + except KeyError as e: + flagged = False + + return flagged + + +def pretty_print_semaphore(semaphore): + if semaphore is None: + return "None" + return f"Semaphore(value={semaphore._value}, locked={semaphore.locked()})" diff --git a/llava-phi/pyproject.toml b/llava-phi/pyproject.toml new file mode 100644 index 0000000000000000000000000000000000000000..db00b0d55293a6fdbbab1af0e690fc7f52f99bcb --- /dev/null +++ b/llava-phi/pyproject.toml @@ -0,0 +1,37 @@ +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "llava_phi" +version = "1.0.0" +description = "Towards GPT-4 like large language and visual assistant." +readme = "README.md" +requires-python = ">=3.8" +classifiers = [ + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", +] +dependencies = [ + "einops", "fastapi", "gradio==3.35.2", "markdown2[all]", "numpy", + "requests", "sentencepiece", "tokenizers==0.15.0", + "uvicorn", "wandb", + "shortuuid", "httpx==0.24.0", + "deepspeed==0.9.5", + "peft==0.4.0", + "accelerate==0.21.0", + "bitsandbytes==0.41.0", + "scikit-learn==1.2.2", + "sentencepiece==0.1.99", + "einops==0.6.1", "einops-exts==0.0.4", "timm==0.6.13", + "gradio_client==0.2.9" +] + +[project.urls] +"Bug Tracker" = "https://github.com/zhuyiche/llava-phi/issues" + +[tool.setuptools.packages.find] +exclude = ["assets*", "benchmark*", "docs", "dist*", "playground*", "scripts*", "tests*"] + +[tool.wheel] +exclude = ["assets*", "benchmark*", "docs", "dist*", "playground*", "scripts*", "tests*"] diff --git a/llava-phi/scripts/convert_gqa_for_eval.py b/llava-phi/scripts/convert_gqa_for_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..4d46c8b876df618faac548e9b369109d541f4f23 --- /dev/null +++ b/llava-phi/scripts/convert_gqa_for_eval.py @@ -0,0 +1,18 @@ +import os +import json +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument("--src", type=str) +parser.add_argument("--dst", type=str) +args = parser.parse_args() + +all_answers = [] +for line_idx, line in enumerate(open(args.src)): + res = json.loads(line) + question_id = res['question_id'] + text = res['text'].rstrip('.').lower() + all_answers.append({"questionId": question_id, "prediction": text}) + +with open(args.dst, 'w') as f: + json.dump(all_answers, f) diff --git a/llava-phi/scripts/convert_mmbench_for_submission.py b/llava-phi/scripts/convert_mmbench_for_submission.py new file mode 100644 index 0000000000000000000000000000000000000000..27baec12f9ef48d4e3df41e15b1d2644aab4174b --- /dev/null +++ b/llava-phi/scripts/convert_mmbench_for_submission.py @@ -0,0 +1,27 @@ +import os +import json +import argparse +import pandas as pd + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--annotation-file", type=str, required=True) + parser.add_argument("--result-dir", type=str, required=True) + parser.add_argument("--upload-dir", type=str, required=True) + parser.add_argument("--experiment", type=str, required=True) + + return parser.parse_args() + +if __name__ == "__main__": + args = get_args() + + df = pd.read_table(args.annotation_file) + + cur_df = df.copy() + cur_df = cur_df.drop(columns=['hint', 'category', 'source', 'image', 'comment', 'l2-category']) + cur_df.insert(6, 'prediction', None) + for pred in open(os.path.join(args.result_dir, f"{args.experiment}.jsonl")): + pred = json.loads(pred) + cur_df.loc[df['index'] == pred['question_id'], 'prediction'] = pred['text'] + + cur_df.to_excel(os.path.join(args.upload_dir, f"{args.experiment}.xlsx"), index=False, engine='openpyxl') diff --git a/llava-phi/scripts/convert_mmvet_for_eval.py b/llava-phi/scripts/convert_mmvet_for_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..97f5cfb7fb7691ef3921e3e6afc6d82ec54d4c6c --- /dev/null +++ b/llava-phi/scripts/convert_mmvet_for_eval.py @@ -0,0 +1,18 @@ +import os +import json +import argparse + +parser = argparse.ArgumentParser() +parser.add_argument("--src", type=str) +parser.add_argument("--dst", type=str) +args = parser.parse_args() + +cur_result = {} + +for line in open(args.src): + data = json.loads(line) + qid = data['question_id'] + cur_result[f'v1_{qid}'] = data['text'] + +with open(args.dst, 'w') as f: + json.dump(cur_result, f, indent=2) diff --git a/llava-phi/scripts/convert_seed_for_submission.py b/llava-phi/scripts/convert_seed_for_submission.py new file mode 100644 index 0000000000000000000000000000000000000000..ae903e63087516bc8ae77142532196be6a85589c --- /dev/null +++ b/llava-phi/scripts/convert_seed_for_submission.py @@ -0,0 +1,74 @@ +import os +import json +import argparse + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument("--annotation-file", type=str) + parser.add_argument("--result-file", type=str) + parser.add_argument("--result-upload-file", type=str) + return parser.parse_args() + + +def eval_single(result_file, eval_only_type=None): + results = {} + for line in open(result_file): + row = json.loads(line) + results[row['question_id']] = row + + type_counts = {} + correct_counts = {} + for question_data in data['questions']: + if eval_only_type is not None and question_data['data_type'] != eval_only_type: continue + data_type = question_data['question_type_id'] + type_counts[data_type] = type_counts.get(data_type, 0) + 1 + try: + question_id = int(question_data['question_id']) + except: + question_id = question_data['question_id'] + if question_id not in results: + correct_counts[data_type] = correct_counts.get(data_type, 0) + continue + row = results[question_id] + if row['text'] == question_data['answer']: + correct_counts[data_type] = correct_counts.get(data_type, 0) + 1 + + total_count = 0 + total_correct = 0 + for data_type in sorted(type_counts.keys()): + accuracy = correct_counts[data_type] / type_counts[data_type] * 100 + if eval_only_type is None: + print(f"{ques_type_id_to_name[data_type]}: {accuracy:.2f}%") + + total_count += type_counts[data_type] + total_correct += correct_counts[data_type] + + total_accuracy = total_correct / total_count * 100 + if eval_only_type is None: + print(f"Total accuracy: {total_accuracy:.2f}%") + else: + print(f"{eval_only_type} accuracy: {total_accuracy:.2f}%") + + return results + +if __name__ == "__main__": + args = get_args() + data = json.load(open(args.annotation_file)) + ques_type_id_to_name = {id:n for n,id in data['question_type'].items()} + + results = eval_single(args.result_file) + eval_single(args.result_file, eval_only_type='image') + eval_single(args.result_file, eval_only_type='video') + + with open(args.result_upload_file, 'w') as fp: + for question in data['questions']: + qid = question['question_id'] + if qid in results: + result = results[qid] + else: + result = results[int(qid)] + fp.write(json.dumps({ + 'question_id': qid, + 'prediction': result['text'] + }) + '\n') diff --git a/llava-phi/scripts/convert_sqa_to_llava.py b/llava-phi/scripts/convert_sqa_to_llava.py new file mode 100644 index 0000000000000000000000000000000000000000..26fe3002413a23b5029e540c8b338ebb14307bf6 --- /dev/null +++ b/llava-phi/scripts/convert_sqa_to_llava.py @@ -0,0 +1,88 @@ +import json +import os +import fire +import re +from convert_sqa_to_llava_base_prompt import build_prompt_chatbot + + +def convert_to_llava(base_dir, split, prompt_format="QCM-LEA"): + split_indices = json.load(open(os.path.join(base_dir, "pid_splits.json")))[split] + problems = json.load(open(os.path.join(base_dir, "problems.json"))) + + split_problems = build_prompt_chatbot( + problems, split_indices, prompt_format, + use_caption=False, is_test=False) + + target_format = [] + for prob_id, (input, output) in split_problems.items(): + if input.startswith('Question: '): + input = input.replace('Question: ', '') + if output.startswith('Answer: '): + output = output.replace('Answer: ', '') + + raw_prob_data = problems[prob_id] + if raw_prob_data['image'] is None: + target_format.append({ + "id": prob_id, + "conversations": [ + {'from': 'human', 'value': f"{input}"}, + {'from': 'gpt', 'value': f"{output}"}, + ], + }) + + else: + target_format.append({ + "id": prob_id, + "image": os.path.join(prob_id, raw_prob_data['image']), + "conversations": [ + {'from': 'human', 'value': f"{input}\n"}, + {'from': 'gpt', 'value': f"{output}"}, + ], + }) + + print(f'Number of samples: {len(target_format)}') + + with open(os.path.join(base_dir, f"llava_{split}_{prompt_format}.json"), "w") as f: + json.dump(target_format, f, indent=2) + + +def convert_to_jsonl(base_dir, split, prompt_format="QCM-LEPA"): + split_indices = json.load(open(os.path.join(base_dir, "pid_splits.json")))[split] + problems = json.load(open(os.path.join(base_dir, "problems.json"))) + + split_problems = build_prompt_chatbot( + problems, split_indices, prompt_format, + use_caption=False, is_test=False) + + writer = open(os.path.join(base_dir, f"scienceqa_{split}_{prompt_format}.jsonl"), "w") + for prob_id, (input, output) in split_problems.items(): + if input.startswith('Question: '): + input = input.replace('Question: ', '') + if output.startswith('Answer: '): + output = output.replace('Answer: ', '') + + raw_prob_data = problems[prob_id] + if raw_prob_data['image'] is None: + data = { + "id": prob_id, + "instruction": f"{input}", + "output": f"{output}", + } + + else: + data = { + "id": prob_id, + "image": os.path.join(prob_id, raw_prob_data['image']), + "instruction": f"{input}\n", + "output": f"{output}", + } + writer.write(json.dumps(data) + '\n') + writer.close() + + +def main(task, **kwargs): + globals()[task](**kwargs) + + +if __name__ == "__main__": + fire.Fire(main) diff --git a/llava-phi/scripts/convert_sqa_to_llava_base_prompt.py b/llava-phi/scripts/convert_sqa_to_llava_base_prompt.py new file mode 100644 index 0000000000000000000000000000000000000000..b327fcc29eb44d7fe68be35da25bafa0e1d6feba --- /dev/null +++ b/llava-phi/scripts/convert_sqa_to_llava_base_prompt.py @@ -0,0 +1,334 @@ +def get_question_text(problem): + question = problem['question'] + return question + + +def get_context_text(problem, use_caption): + txt_context = problem['hint'] + img_context = problem['caption'] if use_caption else "" + context = " ".join([txt_context, img_context]).strip() + if context == "": + context = "N/A" + return context + + +def get_choice_text(probelm, options): + choices = probelm['choices'] + choice_list = [] + for i, c in enumerate(choices): + choice_list.append("({}) {}".format(options[i], c)) + choice_txt = " ".join(choice_list) + #print(choice_txt) + return choice_txt + + +def get_answer(problem, options): + return options[problem['answer']] + + +def get_lecture_text(problem): + # \\n: GPT-3 can generate the lecture with more tokens. + lecture = problem['lecture'].replace("\n", "\\n") + return lecture + + +def get_solution_text(problem): + # \\n: GPT-3 can generate the solution with more tokens + solution = problem['solution'].replace("\n", "\\n") + return solution + + +def create_one_example_chatbot(format, question, context, choice, answer, lecture, solution, test_example=True): + + input_format, output_format = format.split("-") + + ## Inputs + if input_format == "CQM": + input = f"Context: {context}\nQuestion: {question}\nOptions: {choice}\n" + elif input_format == "QCM": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\n" + # upper bound experiment + elif input_format == "QCML": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture}\n" + elif input_format == "QCME": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {solution}\n" + elif input_format == "QCMLE": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture} {solution}\n" + + elif input_format == "QCLM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture}\nOptions: {choice}\n" + elif input_format == "QCEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {solution}\nOptions: {choice}\n" + elif input_format == "QCLEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture} {solution}\nOptions: {choice}\n" + + # Outputs + if test_example: + output = "Answer:" + elif output_format == 'A': + output = f"Answer: The answer is {answer}." + + elif output_format == 'AL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution}" + elif output_format == 'AE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture}" + elif output_format == 'ALE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture} {solution}" + elif output_format == 'AEL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution} {lecture}" + + elif output_format == 'LA': + output = f"Answer: {lecture} The answer is {answer}." + elif output_format == 'EA': + output = f"Answer: {solution} The answer is {answer}." + elif output_format == 'LEA': + output = f"Answer: {lecture} {solution} The answer is {answer}." + elif output_format == 'ELA': + output = f"Answer: {solution} {lecture} The answer is {answer}." + elif output_format == 'LEPA': + output = '' + if len(lecture.strip()) > 0: + output += f"LECTURE: {lecture}\n" + if len(solution.strip()) > 0: + output += f"SOLUTION: {solution}\n" + output += '###\n' + output += f"ANSWER: {answer}." + + input = input.replace(" ", " ").strip() + output = output.replace(" ", " ").strip() + if input.endswith("BECAUSE:"): + input = input.replace("BECAUSE:", "").strip() + if output.endswith("BECAUSE:"): + output = output.replace("BECAUSE:", "").strip() + return input, output + + +def create_one_example(format, question, context, choice, answer, lecture, solution, test_example=True): + + input_format, output_format = format.split("-") + + ## Inputs + if input_format == "CQM": + input = f"Context: {context}\nQuestion: {question}\nOptions: {choice}\n" + elif input_format == "QCM": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\n" + # upper bound experiment + elif input_format == "QCML": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture}\n" + elif input_format == "QCME": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {solution}\n" + elif input_format == "QCMLE": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture} {solution}\n" + + elif input_format == "QCLM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture}\nOptions: {choice}\n" + elif input_format == "QCEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {solution}\nOptions: {choice}\n" + elif input_format == "QCLEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture} {solution}\nOptions: {choice}\n" + + # Outputs + if test_example: + output = "Answer:" + elif output_format == 'A': + output = f"Answer: The answer is {answer}." + + elif output_format == 'AL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution}" + elif output_format == 'AE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture}" + elif output_format == 'ALE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture} {solution}" + elif output_format == 'AEL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution} {lecture}" + + elif output_format == 'LA': + output = f"Answer: {lecture} The answer is {answer}." + elif output_format == 'EA': + output = f"Answer: {solution} The answer is {answer}." + elif output_format == 'LEA': + output = f"Answer: {lecture} {solution} The answer is {answer}." + elif output_format == 'ELA': + output = f"Answer: {solution} {lecture} The answer is {answer}." + + text = input + output + text = text.replace(" ", " ").strip() + if text.endswith("BECAUSE:"): + text = text.replace("BECAUSE:", "").strip() + return text + + + +def create_one_example_gpt4(format, question, context, choice, answer, lecture, solution, test_example=True): + + input_format, output_format = format.split("-") + + ## Inputs + if input_format == "CQM": + input = f"Context: {context}\nQuestion: {question}\nOptions: {choice}\n" + elif input_format == "QCM": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\n" + # upper bound experiment + elif input_format == "QCML": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture}\n" + elif input_format == "QCME": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {solution}\n" + elif input_format == "QCMLE": + input = f"Question: {question}\nContext: {context}\nOptions: {choice}\nBECAUSE: {lecture} {solution}\n" + + elif input_format == "QCLM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture}\nOptions: {choice}\n" + elif input_format == "QCEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {solution}\nOptions: {choice}\n" + elif input_format == "QCLEM": + input = f"Question: {question}\nContext: {context}\nBECAUSE: {lecture} {solution}\nOptions: {choice}\n" + + # Outputs + if test_example: + output = "Answer:" + elif output_format == 'A': + output = f"Answer: The answer is {answer}." + + elif output_format == 'AL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution}" + elif output_format == 'AE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture}" + elif output_format == 'ALE': + output = f"Answer: The answer is {answer}. BECAUSE: {lecture} {solution}" + elif output_format == 'AEL': + output = f"Answer: The answer is {answer}. BECAUSE: {solution} {lecture}" + + elif output_format == 'LA': + output = f"Answer: {lecture} The answer is {answer}." + elif output_format == 'EA': + output = f"Answer: {solution} The answer is {answer}." + elif output_format == 'LEA': + output = f"Answer: {lecture} {solution} The answer is {answer}." + elif output_format == 'ELA': + output = f"Answer: {solution} {lecture} The answer is {answer}." + + input = input.replace(" ", " ").strip() + output = output.replace(" ", " ").strip() + if output.endswith("BECAUSE:"): + output = output.replace("BECAUSE:", "").strip() + + user_prompt = {"role": "user", "content": f"Can you explain {input}?"} + assistant_prompt = {"role": "assistant", "content": f"{output}"} + + return user_prompt, assistant_prompt + + +def build_prompt_chatbot(problems, shot_qids, prompt_format, use_caption=False, options=["A", "B", "C", "D", "E"], is_test=False): + examples = {} + + for qid in shot_qids: + question = get_question_text(problems[qid]) + context = get_context_text(problems[qid], use_caption) + choice = get_choice_text(problems[qid], options) + answer = get_answer(problems[qid], options) + lecture = get_lecture_text(problems[qid]).replace('\\n', '\n') + solution = get_solution_text(problems[qid]).replace('\\n', '\n') + + train_example = create_one_example_chatbot(prompt_format, + question, + context, + choice, + answer, + lecture, + solution, + test_example=is_test) + examples[qid] = train_example + return examples + + +def build_prompt(problems, shot_qids, test_qid, args): + + examples = [] + + # n-shot training examples + for qid in shot_qids: + question = get_question_text(problems[qid]) + context = get_context_text(problems[qid], args.use_caption) + choice = get_choice_text(problems[qid], args.options) + answer = get_answer(problems[qid], args.options) + lecture = get_lecture_text(problems[qid]) + solution = get_solution_text(problems[qid]) + + train_example = create_one_example(args.prompt_format, + question, + context, + choice, + answer, + lecture, + solution, + test_example=False) + examples.append(train_example) + + # test example + question = get_question_text(problems[test_qid]) + context = get_context_text(problems[test_qid], args.use_caption) + choice = get_choice_text(problems[test_qid], args.options) + answer = get_answer(problems[test_qid], args.options) + lecture = get_lecture_text(problems[test_qid]) + solution = get_solution_text(problems[test_qid]) + + test_example = create_one_example(args.prompt_format, + question, + context, + choice, + answer, + lecture, + solution, + test_example=True) + examples.append(test_example) + + # create the prompt input + prompt_input = '\n\n'.join(examples) + + return prompt_input + + +def build_prompt_gpt4(problems, shot_qids, test_qid, args): + + prompt_array = [{"role": "system", "content": "You are a helpful assistant."}] + + # n-shot training examples + for qid in shot_qids: + question = get_question_text(problems[qid]) + context = get_context_text(problems[qid], args.use_caption) + choice = get_choice_text(problems[qid], args.options) + answer = get_answer(problems[qid], args.options) + lecture = get_lecture_text(problems[qid]) + solution = get_solution_text(problems[qid]) + + user_prompt, assistant_prompt = create_one_example_gpt4(args.prompt_format, + question, + context, + choice, + answer, + lecture, + solution, + test_example=False) + prompt_array.append(user_prompt) + prompt_array.append(assistant_prompt) + + # test example + question = get_question_text(problems[test_qid]) + context = get_context_text(problems[test_qid], args.use_caption) + choice = get_choice_text(problems[test_qid], args.options) + answer = get_answer(problems[test_qid], args.options) + lecture = get_lecture_text(problems[test_qid]) + solution = get_solution_text(problems[test_qid]) + + user_prompt, assistant_prompt = create_one_example_gpt4(args.prompt_format, + question, + context, + choice, + answer, + lecture, + solution, + test_example=True) + prompt_array.append(user_prompt) + prompt_array.append(assistant_prompt) + + return prompt_array \ No newline at end of file diff --git a/llava-phi/scripts/convert_vizwiz_for_submission.py b/llava-phi/scripts/convert_vizwiz_for_submission.py new file mode 100644 index 0000000000000000000000000000000000000000..feb5892ff7fe7d68ede91e999888d9a28e3838d6 --- /dev/null +++ b/llava-phi/scripts/convert_vizwiz_for_submission.py @@ -0,0 +1,47 @@ +import os +import argparse +import json + +from llava_phi.eval.m4c_evaluator import EvalAIAnswerProcessor + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--annotation-file', type=str, required=True) + parser.add_argument('--result-file', type=str, required=True) + parser.add_argument('--result-upload-file', type=str, required=True) + return parser.parse_args() + + +if __name__ == '__main__': + + args = parse_args() + + os.makedirs(os.path.dirname(args.result_upload_file), exist_ok=True) + + results = [] + error_line = 0 + for line_idx, line in enumerate(open(args.result_file)): + try: + results.append(json.loads(line)) + except: + error_line += 1 + results = {x['question_id']: x['text'] for x in results} + test_split = [json.loads(line) for line in open(args.annotation_file)] + split_ids = set([x['question_id'] for x in test_split]) + + print(f'total results: {len(results)}, total split: {len(test_split)}, error_line: {error_line}') + + all_answers = [] + + answer_processor = EvalAIAnswerProcessor() + + for x in test_split: + assert x['question_id'] in results + all_answers.append({ + 'image': x['image'], + 'answer': answer_processor(results[x['question_id']]) + }) + + with open(args.result_upload_file, 'w') as f: + json.dump(all_answers, f) diff --git a/llava-phi/scripts/convert_vqav2_for_submission.py b/llava-phi/scripts/convert_vqav2_for_submission.py new file mode 100644 index 0000000000000000000000000000000000000000..8a430faf25fd6689600b97068ce02f4ba963d63a --- /dev/null +++ b/llava-phi/scripts/convert_vqav2_for_submission.py @@ -0,0 +1,56 @@ +import os +import argparse +import json + +from llava_phi.eval.m4c_evaluator import EvalAIAnswerProcessor + + +def parse_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--dir', type=str, default="./playground/data/eval/vqav2") + parser.add_argument('--ckpt', type=str, required=True) + parser.add_argument('--split', type=str, required=True) + return parser.parse_args() + + +if __name__ == '__main__': + + args = parse_args() + + src = os.path.join(args.dir, 'answers', args.split, args.ckpt, 'merge.jsonl') + test_split = os.path.join(args.dir, 'llava_vqav2_mscoco_test2015.jsonl') + dst = os.path.join(args.dir, 'answers_upload', args.split, f'{args.ckpt}.json') + os.makedirs(os.path.dirname(dst), exist_ok=True) + + results = [] + error_line = 0 + for line_idx, line in enumerate(open(src)): + try: + results.append(json.loads(line)) + except: + error_line += 1 + + results = {x['question_id']: x['text'] for x in results} + test_split = [json.loads(line) for line in open(test_split)] + split_ids = set([x['question_id'] for x in test_split]) + + print(f'total results: {len(results)}, total split: {len(test_split)}, error_line: {error_line}') + + all_answers = [] + + answer_processor = EvalAIAnswerProcessor() + + for x in test_split: + if x['question_id'] not in results: + all_answers.append({ + 'question_id': x['question_id'], + 'answer': '' + }) + else: + all_answers.append({ + 'question_id': x['question_id'], + 'answer': answer_processor(results[x['question_id']]) + }) + + with open(dst, 'w') as f: + json.dump(all_answers, open(dst, 'w')) diff --git a/llava-phi/scripts/llava_phi/eval/mmbench.sh b/llava-phi/scripts/llava_phi/eval/mmbench.sh new file mode 100644 index 0000000000000000000000000000000000000000..87819f2ff73991347987cb22a9a32ae77ec5edd8 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/mmbench.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +SPLIT="mmbench_dev_20230712" + +python -m llava_phi.eval.model_vqa_mmbench \ + --model-path checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/mmbench/$SPLIT.tsv \ + --answers-file ./playground/data/eval/mmbench/answers/$SPLIT/llavaPhi-v0-3b.jsonl \ + --single-pred-prompt \ + --temperature 0 \ + --conv-mode phi-2_v0 + +mkdir -p playground/data/eval/mmbench/answers_upload/$SPLIT + +python scripts/convert_mmbench_for_submission.py \ + --annotation-file ./playground/data/eval/mmbench/$SPLIT.tsv \ + --result-dir ./playground/data/eval/mmbench/answers/$SPLIT \ + --upload-dir ./playground/data/eval/mmbench/answers_upload/$SPLIT \ + --experiment llavaPhi-v0-3b \ No newline at end of file diff --git a/llava-phi/scripts/llava_phi/eval/mme.sh b/llava-phi/scripts/llava_phi/eval/mme.sh new file mode 100644 index 0000000000000000000000000000000000000000..198b002f6af54a0d6b784b334d1c0385ff7fe963 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/mme.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa_loader \ + --model-path checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/MME/llava_mme.jsonl \ + --image-folder ./playground/data/eval/MME/MME_Benchmark_release_version \ + --answers-file ./playground/data/eval/MME/answers/llavaPhi-v0-3b.jsonl \ + --temperature 0 \ + --conv-mode phi-2_v0 + +cd ./playground/data/eval/MME + +python convert_answer_to_mme.py --experiment llavaPhi-v0-3b + +cd eval_tool + +python calculation.py --results_dir answers/llavaPhi-v0-3b diff --git a/llava-phi/scripts/llava_phi/eval/mmvet.sh b/llava-phi/scripts/llava_phi/eval/mmvet.sh new file mode 100644 index 0000000000000000000000000000000000000000..31ea32909cab61cbfd308512fbdb54782a8261b0 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/mmvet.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa \ + --model-path checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/mm-vet/llava-mm-vet.jsonl \ + --image-folder ./playground/data/eval/mm-vet/images \ + --answers-file ./playground/data/eval/mm-vet/answers/llavaPhi-v0-3b.jsonl \ + --temperature 0 \ + --conv-mode phi-2_v0 + +mkdir -p ./playground/data/eval/mm-vet/results + +python scripts/convert_mmvet_for_eval.py \ + --src ./playground/data/eval/mm-vet/answers/llavaPhi-v0-3b.jsonl \ + --dst ./playground/data/eval/mm-vet/results/llavaPhi-v0-3b.json + diff --git a/llava-phi/scripts/llava_phi/eval/pope.sh b/llava-phi/scripts/llava_phi/eval/pope.sh new file mode 100644 index 0000000000000000000000000000000000000000..02916b596c48f132b8e1c8e85e56e146f5800e1a --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/pope.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa_loader \ + --model-path ./checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/pope/llava_pope_test.jsonl \ + --image-folder /path/to/data/coco/val2014 \ + --answers-file ./playground/data/eval/pope/answers/llavaPhi-v0-3b.jsonl \ + --temperature 0 \ + --conv-mode phi-2_v0 + +python llava_phi/eval/eval_pope.py \ + --annotation-dir ./playground/data/eval/pope/coco \ + --question-file ./playground/data/eval/pope/llava_pope_test.jsonl \ + --result-file ./playground/data/eval/pope/answers/llavaPhi-v0-3b.jsonl \ No newline at end of file diff --git a/llava-phi/scripts/llava_phi/eval/sqa.sh b/llava-phi/scripts/llava_phi/eval/sqa.sh new file mode 100644 index 0000000000000000000000000000000000000000..16f8bc7fc54fd31242c753d5de4f1022fbeca5a6 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/sqa.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa_science \ + --model-path ./checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/scienceqa/llava_test_CQM-A.json \ + --image-folder ./playground/data/eval/scienceqa/images/test \ + --answers-file ./playground/data/eval/scienceqa/answers/llavaPhi-v0-3b.jsonl \ + --single-pred-prompt \ + --temperature 0 \ + --conv-mode phi-2_v0 + +python llava_phi/eval/eval_science_qa.py \ + --base-dir ./playground/data/eval/scienceqa \ + --result-file ./playground/data/eval/scienceqa/answers/llavaPhi-v0-3b.jsonl \ + --output-file ./playground/data/eval/scienceqa/answers/llavaPhi-v0-3b_output.jsonl \ + --output-result ./playground/data/eval/scienceqa/answers/llavaPhi-v0-3b_result.json + diff --git a/llava-phi/scripts/llava_phi/eval/textvqa.sh b/llava-phi/scripts/llava_phi/eval/textvqa.sh new file mode 100644 index 0000000000000000000000000000000000000000..6c5dc09dabad57734af337ebca8de0a5dabe1ce7 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/textvqa.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa_loader \ + --model-path ./checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/textvqa/llava_textvqa_val_v051_ocr.jsonl \ + --image-folder /path/to/data/textvqa/train_images \ + --answers-file ./playground/data/eval/textvqa/answers/llavaPhi-v0-3b.jsonl \ + --temperature 0 \ + --conv-mode phi-2_v0 + +python -m llava_phi.eval.eval_textvqa \ + --annotation-file ./playground/data/eval/textvqa/TextVQA_0.5.1_val.json \ + --result-file ./playground/data/eval/textvqa/answers/llavaPhi-v0-3b.jsonl diff --git a/llava-phi/scripts/llava_phi/eval/vizwiz.sh b/llava-phi/scripts/llava_phi/eval/vizwiz.sh new file mode 100644 index 0000000000000000000000000000000000000000..55b256413a9ab58ac83a738ac0b5336b7a3379f4 --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/vizwiz.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +python -m llava_phi.eval.model_vqa_loader \ + --model-path checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/vizwiz/llava_test.jsonl \ + --image-folder ./playground/data/eval/vizwiz/test \ + --answers-file ./playground/data/eval/vizwiz/answers/llavaPhi-v0-3b.jsonl \ + --temperature 0 \ + --conv-mode phi-2_v0 + +python scripts/convert_vizwiz_for_submission.py \ + --annotation-file ./playground/data/eval/vizwiz/llava_test.jsonl \ + --result-file ./playground/data/eval/vizwiz/answers/llavaPhi-v0-3b.jsonl \ + --result-upload-file ./playground/data/eval/vizwiz/answers_upload/llavaPhi-v0-3b.json diff --git a/llava-phi/scripts/llava_phi/eval/vqav2.sh b/llava-phi/scripts/llava_phi/eval/vqav2.sh new file mode 100644 index 0000000000000000000000000000000000000000..0ae7933d925037e1a735c45fa171e9a00374d82b --- /dev/null +++ b/llava-phi/scripts/llava_phi/eval/vqav2.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +gpu_list="${CUDA_VISIBLE_DEVICES:-0}" +IFS=',' read -ra GPULIST <<< "$gpu_list" + +CHUNKS=${#GPULIST[@]} + +CKPT="llavaPhi-v0-3b-finetune" +SPLIT="llava_vqav2_mscoco_test-dev2015" + +for IDX in $(seq 0 $((CHUNKS-1))); do + CUDA_VISIBLE_DEVICES=${GPULIST[$IDX]} python -m llava_phi.eval.model_vqa_loader \ + --model-path ./checkpoints/llavaPhi-v0-3b-finetune \ + --question-file ./playground/data/eval/vqav2/$SPLIT.jsonl \ + --image-folder /path/to/data/coco/test2015 \ + --answers-file ./playground/data/eval/vqav2/answers/$SPLIT/$CKPT/${CHUNKS}_${IDX}.jsonl \ + --num-chunks $CHUNKS \ + --chunk-idx $IDX \ + --temperature 0 \ + --conv-mode phi-2_v0 & +done + +wait + +output_file=./playground/data/eval/vqav2/answers/$SPLIT/$CKPT/merge.jsonl + +# Clear out the output file if it exists. +> "$output_file" + +# Loop through the indices and concatenate each file. +for IDX in $(seq 0 $((CHUNKS-1))); do + cat ./playground/data/eval/vqav2/answers/$SPLIT/$CKPT/${CHUNKS}_${IDX}.jsonl >> "$output_file" +done + +python scripts/convert_vqav2_for_submission.py --split $SPLIT --ckpt $CKPT + diff --git a/llava-phi/scripts/llava_phi/finetune.sh b/llava-phi/scripts/llava_phi/finetune.sh new file mode 100644 index 0000000000000000000000000000000000000000..95f071fbd0774d31799ddead3df49350b2a2744d --- /dev/null +++ b/llava-phi/scripts/llava_phi/finetune.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +deepspeed --master_port 29600 llava_phi/train/train.py \ + --deepspeed ./scripts/zero3.json \ + --model_name_or_path ./checkpoints/llavaPhi-v0-3b-pretrain \ + --version v0 \ + --data_path ./finetune_data/llava_instruct_150k.json \ + --image_folder ./finetune_data/images \ + --tune_mm_mlp_adapter True \ + --freeze_vision_tower False \ + --freeze_backbone False \ + --mm_use_im_start_end False \ + --mm_use_im_patch_token False \ + --image_aspect_ratio pad \ + --group_by_modality_length False \ + --bf16 True \ + --output_dir ./checkpoints/llavaPhi-v0-3b-finetune \ + --num_train_epochs 1 \ + --per_device_train_batch_size 6 \ + --per_device_eval_batch_size 4 \ + --gradient_accumulation_steps 2 \ + --evaluation_strategy "no" \ + --save_strategy "steps" \ + --save_steps 2000 \ + --save_total_limit 1 \ + --learning_rate 2e-5 \ + --weight_decay 0. \ + --warmup_ratio 0.03 \ + --lr_scheduler_type "cosine" \ + --logging_steps 1 \ + --tf32 False \ + --model_max_length 2048 \ + --gradient_checkpointing True \ + --dataloader_num_workers 4 \ + --lazy_preprocess True \ + --report_to tensorboard diff --git a/llava-phi/scripts/llava_phi/get_base_model.sh b/llava-phi/scripts/llava_phi/get_base_model.sh new file mode 100644 index 0000000000000000000000000000000000000000..ed7d83d22eb9d23f891fd77470d3b1f9430e9ae7 --- /dev/null +++ b/llava-phi/scripts/llava_phi/get_base_model.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +python llava_phi/train/convert_model2base_llava_phi.py \ + --model_name_or_path susnato/phi-2 \ + --version plain \ + --data_path pretrain_data/blip_sample.json \ + --image_folder pretrain_data/blip_images \ + --vision_tower ./clip-vit-large-patch14-336 \ + --mm_projector_type mlp2x_gelu \ + --tune_mm_mlp_adapter True \ + --mm_vision_select_layer -2 \ + --mm_use_im_start_end False \ + --mm_use_im_patch_token False \ + --bf16 True \ + --output_dir ./base_checkpoints_llava_phi \ + --num_train_epochs 1 \ + --per_device_train_batch_size 4 \ + --per_device_eval_batch_size 4 \ + --gradient_accumulation_steps 2 \ + --evaluation_strategy "no" \ + --save_strategy "steps" \ + --save_steps 24000 \ + --save_total_limit 1 \ + --learning_rate 1e-3 \ + --weight_decay 0.1 \ + --warmup_ratio 0. \ + --lr_scheduler_type "cosine" \ + --logging_steps 10 \ + --tf32 False \ + --model_max_length 2048 \ + --gradient_checkpointing True \ + --dataloader_num_workers 4 \ + --lazy_preprocess True \ + --report_to tensorboard diff --git a/llava-phi/scripts/llava_phi/pretrain.sh b/llava-phi/scripts/llava_phi/pretrain.sh new file mode 100644 index 0000000000000000000000000000000000000000..e01a5af2fb059b822c7f4963faa8517dde372282 --- /dev/null +++ b/llava-phi/scripts/llava_phi/pretrain.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +deepspeed --master_port 29600 llava_phi/train/train.py \ + --deepspeed ./scripts/zero2.json \ + --model_name_or_path ./base_checkpoints_llava_phi \ + --version plain \ + --data_path pretrain_data/blip_sample.json \ + --image_folder pretrain_data/blip_images \ + --tune_mm_mlp_adapter True \ + --freeze_vision_tower True \ + --freeze_backbone True \ + --mm_use_im_start_end False \ + --mm_use_im_patch_token False \ + --bf16 True \ + --output_dir ./checkpoints/llavaPhi-v0-3b-pretrain \ + --num_train_epochs 1 \ + --per_device_train_batch_size 32 \ + --per_device_eval_batch_size 4 \ + --gradient_accumulation_steps 2 \ + --evaluation_strategy "no" \ + --save_strategy "steps" \ + --save_steps 5000 \ + --save_total_limit 1 \ + --learning_rate 1e-3 \ + --weight_decay 0. \ + --warmup_ratio 0.03 \ + --lr_scheduler_type "cosine" \ + --logging_steps 10 \ + --tf32 False \ + --model_max_length 2048 \ + --gradient_checkpointing True \ + --dataloader_num_workers 4 \ + --lazy_preprocess True \ + --report_to tensorboard diff --git a/llava-phi/scripts/merge_lora_weights.py b/llava-phi/scripts/merge_lora_weights.py new file mode 100644 index 0000000000000000000000000000000000000000..89f272fc7fb57d3b0961c5e03c1229c1ec276ee1 --- /dev/null +++ b/llava-phi/scripts/merge_lora_weights.py @@ -0,0 +1,22 @@ +import argparse +from llava_phi.model.builder import load_pretrained_model +from llava_phi.mm_utils import get_model_name_from_path + + +def merge_lora(args): + model_name = get_model_name_from_path(args.model_path) + tokenizer, model, image_processor, context_len = load_pretrained_model(args.model_path, args.model_base, model_name, device_map='cpu') + + model.save_pretrained(args.save_model_path) + tokenizer.save_pretrained(args.save_model_path) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--model-path", type=str, required=True) + parser.add_argument("--model-base", type=str, required=True) + parser.add_argument("--save-model-path", type=str, required=True) + + args = parser.parse_args() + + merge_lora(args) diff --git a/llava-phi/scripts/zero2.json b/llava-phi/scripts/zero2.json new file mode 100644 index 0000000000000000000000000000000000000000..c95ebefe07b7d8d9fd0936a014679d07102cc270 --- /dev/null +++ b/llava-phi/scripts/zero2.json @@ -0,0 +1,23 @@ +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "bf16": { + "enabled": "auto" + }, + "train_micro_batch_size_per_gpu": "auto", + "train_batch_size": "auto", + "gradient_accumulation_steps": "auto", + "zero_optimization": { + "stage": 2, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto" + } +} \ No newline at end of file diff --git a/llava-phi/scripts/zero3.json b/llava-phi/scripts/zero3.json new file mode 100644 index 0000000000000000000000000000000000000000..6917317af62da757ca759a92b326ddfa65b203cc --- /dev/null +++ b/llava-phi/scripts/zero3.json @@ -0,0 +1,28 @@ +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "bf16": { + "enabled": "auto" + }, + "train_micro_batch_size_per_gpu": "auto", + "train_batch_size": "auto", + "gradient_accumulation_steps": "auto", + "zero_optimization": { + "stage": 3, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": 1e9, + "stage3_max_reuse_distance": 1e9, + "stage3_gather_16bit_weights_on_model_save": true + } +} \ No newline at end of file diff --git a/llava-phi/scripts/zero3_offload.json b/llava-phi/scripts/zero3_offload.json new file mode 100644 index 0000000000000000000000000000000000000000..e0a54c2c2bc10f76458c42a43de0970a9251759f --- /dev/null +++ b/llava-phi/scripts/zero3_offload.json @@ -0,0 +1,56 @@ +{ + "fp16": { + "enabled": "auto", + "loss_scale": 0, + "loss_scale_window": 1000, + "initial_scale_power": 16, + "hysteresis": 2, + "min_loss_scale": 1 + }, + "bf16": { + "enabled": "auto" + }, + "optimizer": { + "type": "AdamW", + "params": { + "lr": "auto", + "betas": "auto", + "eps": "auto", + "weight_decay": "auto" + } + }, + "scheduler": { + "type": "WarmupLR", + "params": { + "warmup_min_lr": "auto", + "warmup_max_lr": "auto", + "warmup_num_steps": "auto" + } + }, + "zero_optimization": { + "stage": 3, + "offload_optimizer": { + "device": "cpu", + "pin_memory": true + }, + "offload_param": { + "device": "cpu", + "pin_memory": true + }, + "overlap_comm": true, + "contiguous_gradients": true, + "sub_group_size": 1e9, + "reduce_bucket_size": "auto", + "stage3_prefetch_bucket_size": "auto", + "stage3_param_persistence_threshold": "auto", + "stage3_max_live_parameters": 1e9, + "stage3_max_reuse_distance": 1e9, + "gather_16bit_weights_on_model_save": true + }, + "gradient_accumulation_steps": "auto", + "gradient_clipping": "auto", + "train_batch_size": "auto", + "train_micro_batch_size_per_gpu": "auto", + "steps_per_print": 1e5, + "wall_clock_breakdown": false +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b8d26a2bbb0fe61ebe06ccf3046119af0569ff42 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,20 @@ +einops==0.6.1 +einops-exts==0.0.4 +timm==0.6.13 +gradio==3.35.2 +gradio_client==0.2.9 +markdown2[all] +numpy +requests +sentencepiece +tokenizers==0.15.0 +torch==2.0.1 +shortuuid +httpx==0.24.0 +deepspeed==0.9.5 +peft==0.4.0 +transformers==4.36.2 +accelerate==0.21.0 +bitsandbytes==0.41.0 +scikit-learn==1.2.2 +sentencepiece==0.1.99 \ No newline at end of file