{"cells":[{"cell_type":"markdown","metadata":{"id":"T9u-JTdTpMzM"},"source":["## Dataset"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PQtPVQfKn7h-"},"outputs":[],"source":["from google.colab import data_table; data_table.enable_dataframe_formatter()\n","import numpy as np; np.random.seed(123)\n","import pandas as pd"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"oqsw1ni_sN_b"},"outputs":[],"source":["df = pd.read_json(\"https://raw.githubusercontent.com/sahil280114/codealpaca/master/data/code_alpaca_20k.json\")\n","\n","# create a new column called `split` where:\n","# 90% will be assigned a value of 0 -> train set\n","# 5% will be assigned a value of 1 -> validation set\n","# 5% will be assigned a value of 2 -> test set\n","\n","total_rows = len(df)\n","split_0_count = int(total_rows * 0.9)\n","split_1_count = int(total_rows * 0.05)\n","split_2_count = total_rows - split_0_count - split_1_count\n","\n","# Create an array with split values based on the counts\n","split_values = np.concatenate([\n"," np.zeros(split_0_count),\n"," np.ones(split_1_count),\n"," np.full(split_2_count, 2)\n","])\n","\n","# Shuffle the array to ensure randomness\n","np.random.shuffle(split_values)\n","\n","# Add the 'split' column to the DataFrame\n","df['split'] = split_values\n","df['split'] = df['split'].astype(int)\n","df = df.head(n=1000)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":618},"executionInfo":{"elapsed":5,"status":"ok","timestamp":1703888311059,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"tgdeMSpEobGr","outputId":"b2a5cc10-ef79-40ee-a474-50e2cc48e00e"},"outputs":[{"output_type":"execute_result","data":{"text/plain":[" instruction \\\n","0 Create an array of length 5 which contains all... \n","1 Formulate an equation to calculate the height ... \n","2 Write a replace method for a string class whic... \n","3 Create an array of length 15 containing number... \n","4 Write a function to find the number of distinc... \n","5 Create a nested loop to print every combinatio... \n","6 Write a function to find the maximum differenc... \n","7 Write a function to generate the nth Fibonacci... \n","8 Write a class to represent a 2D point with x a... \n","9 Write code that removes spaces from a given st... \n","\n"," input \\\n","0 \n","1 \n","2 string = \"Hello World!\"\\nreplace_with = \"Greet... \n","3 \n","4 matrix = [[1, 0, 0],\\n [1, 0, 1],\\n ... \n","5 \n","6 arr = [5, 3, 17, 11, 9] \n","7 < noinput > \n","8 \n","9 string = \" A B C D \" \n","\n"," output split \n","0 arr = [2, 4, 6, 8, 10] 0 \n","1 Height of triangle = opposite side length * si... 0 \n","2 def replace(self, replace_with):\\n new_stri... 0 \n","3 arr = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33... 0 \n","4 def find_num_distinct_states(matrix):\\n sta... 0 \n","5 for i in range(10):\\n for j in range(10):\\n... 0 \n","6 def max_difference(arr):\\n max_diff = 0\\n ... 0 \n","7 def fib(n):\\n if n == 0:\\n return 0\\... 0 \n","8 class Point:\\n def __init__(self, x, y):\\n ... 0 \n","9 def remove_spaces(string): \\n return \"\".joi... 0 "],"text/html":["\n","
\n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
instructioninputoutputsplit
0Create an array of length 5 which contains all...arr = [2, 4, 6, 8, 10]0
1Formulate an equation to calculate the height ...Height of triangle = opposite side length * si...0
2Write a replace method for a string class whic...string = \"Hello World!\"\\nreplace_with = \"Greet...def replace(self, replace_with):\\n new_stri...0
3Create an array of length 15 containing number...arr = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33...0
4Write a function to find the number of distinc...matrix = [[1, 0, 0],\\n [1, 0, 1],\\n ...def find_num_distinct_states(matrix):\\n sta...0
5Create a nested loop to print every combinatio...for i in range(10):\\n for j in range(10):\\n...0
6Write a function to find the maximum differenc...arr = [5, 3, 17, 11, 9]def max_difference(arr):\\n max_diff = 0\\n ...0
7Write a function to generate the nth Fibonacci...< noinput >def fib(n):\\n if n == 0:\\n return 0\\...0
8Write a class to represent a 2D point with x a...class Point:\\n def __init__(self, x, y):\\n ...0
9Write code that removes spaces from a given st...string = \" A B C D \"def remove_spaces(string): \\n return \"\".joi...0
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","
\n","
\n"],"application/vnd.google.colaboratory.module+javascript":"\n import \"https://ssl.gstatic.com/colaboratory/data_table/881c4a0d49046431/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 0,\n 'f': \"0\",\n },\n\"Create an array of length 5 which contains all even numbers between 1 and 10.\",\n\"\",\n\"arr = [2, 4, 6, 8, 10]\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 1,\n 'f': \"1\",\n },\n\"Formulate an equation to calculate the height of a triangle given the angle, side lengths and opposite side length.\",\n\"\",\n\"Height of triangle = opposite side length * sin (angle) / side length\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 2,\n 'f': \"2\",\n },\n\"Write a replace method for a string class which replaces the given string with a given set of characters.\",\n\"string = \\\"Hello World!\\\"\\nreplace_with = \\\"Greetings!\\\"\",\n\"def replace(self, replace_with):\\n new_string = \\\"\\\"\\n for char in self:\\n if char == \\\" \\\":\\n new_string += replace_with\\n else:\\n new_string += char\\n return new_string\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 3,\n 'f': \"3\",\n },\n\"Create an array of length 15 containing numbers divisible by 3 up to 45.\",\n\"\",\n\"arr = [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45]\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 4,\n 'f': \"4\",\n },\n\"Write a function to find the number of distinct states in a given matrix.\",\n\"matrix = [[1, 0, 0],\\n [1, 0, 1],\\n [1, 1, 1]]\",\n\"def find_num_distinct_states(matrix):\\n states = set()\\n for row in matrix:\\n state = \\\"\\\".join([str(x) for x in row])\\n states.add(state)\\n return len(states)\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 5,\n 'f': \"5\",\n },\n\"Create a nested loop to print every combination of numbers between 0-9\",\n\"\",\n\"for i in range(10):\\n for j in range(10):\\n print(i, j)\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 6,\n 'f': \"6\",\n },\n\"Write a function to find the maximum difference between two numbers in a given array.\",\n\"arr = [5, 3, 17, 11, 9]\",\n\"def max_difference(arr):\\n max_diff = 0\\n for i in range(len(arr)-1):\\n diff = arr[i+1] - arr[i]\\n if diff > max_diff:\\n max_diff = diff\\n return max_diff\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 7,\n 'f': \"7\",\n },\n\"Write a function to generate the nth Fibonacci number.\",\n\"< noinput >\",\n\"def fib(n):\\n if n == 0:\\n return 0\\n elif n == 1:\\n return 1\\n else:\\n return fib(n-2) + fib(n-1)\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 8,\n 'f': \"8\",\n },\n\"Write a class to represent a 2D point with x and y coordinates.\",\n\"\",\n\"class Point:\\n def __init__(self, x, y):\\n self.x = x \\n self.y = y \\n \\n def __str__(self): \\n return \\\"({0},{1})\\\".format(self.x, self.y)\",\n{\n 'v': 0,\n 'f': \"0\",\n }],\n [{\n 'v': 9,\n 'f': \"9\",\n },\n\"Write code that removes spaces from a given string.\",\n\"string = \\\" A B C D \\\"\",\n\"def remove_spaces(string): \\n return \\\"\\\".join(string.split())\",\n{\n 'v': 0,\n 'f': \"0\",\n }]],\n columns: [[\"number\", \"index\"], [\"string\", \"instruction\"], [\"string\", \"input\"], [\"string\", \"output\"], [\"number\", \"split\"]],\n columnOptions: [{\"width\": \"1px\", \"className\": \"index_column\"}],\n rowsPerPage: 25,\n helpUrl: \"https://colab.research.google.com/notebooks/data_table.ipynb\",\n suppressOutputScrolling: true,\n minimumWidth: undefined,\n });\n\n function appendQuickchartButton(parentElement) {\n let quickchartButtonContainerElement = document.createElement('div');\n quickchartButtonContainerElement.innerHTML = `\n
\n \n \n\n\n \n
`;\n parentElement.appendChild(quickchartButtonContainerElement);\n }\n\n appendQuickchartButton(table);\n "},"metadata":{},"execution_count":7}],"source":["df.head(10)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":2,"status":"ok","timestamp":1703888312308,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"LS0qhGCvoi3a","outputId":"4b775dcc-1ece-414e-e03b-780687ef7812"},"outputs":[{"output_type":"stream","name":"stdout","text":["Total number of examples in the dataset: 1000\n","47.2% of examples that are self-sufficient\n","52.8% of examples that are need additional context\n"]}],"source":["num_self_sufficient = (df['input'] == '').sum()\n","num_need_context = df.shape[0] - num_self_sufficient\n","\n","print(f\"Total number of examples in the dataset: {df.shape[0]}\")\n","\n","print(f\"{round(num_self_sufficient/df.shape[0] * 100, 2)}% of examples that are self-sufficient\")\n","print(f\"{round(num_need_context/df.shape[0] * 100, 2)}% of examples that are need additional context\")"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":523},"executionInfo":{"elapsed":799,"status":"ok","timestamp":1703888314371,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"TjjSCoZIpB8i","outputId":"6fcdfc0f-0359-4976-a4ea-b5e865d79a20"},"outputs":[{"output_type":"stream","name":"stdout","text":["Average number of tokens in the instruction column: 23\n","Average number of tokens in the input column: 8\n","Average number of tokens in the output column: 65\n","\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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hZKSEluHQERUswTFZDIhNDQUb7/9NgCge/fuOH78OJYvX464uLg6CRAApk6dipSUFGm58hR0ZGTkfb/i0el0GDBggOz+Sn1QDblvAPtnS7c/FZmIyFZqlKA0bdoUwcHBZmUdOnTAl19+CQDQaDQAgLy8PLMbXeXl5aFbt25SnTsfRV9eXo6CggJp+zupVCqoVCqLcicnp2oN7tWtZ48act8A9s8W5BYPET2canQNYa9evXDq1Cmzsp9//hmBgYEAgKCgIGg0GuzcuVNaX1RUhJycHGi1WgCAVqtFYWGh2d08d+3aBZPJhPDw8Fp3hIiIiBqOGp1BmTRpEh5//HG8/fbbePbZZ3HgwAGsXLkSK1euBHBrUt3EiRMxd+5ctGnTRrrMOCAgAEOHDgVw64zLwIEDMX78eCxfvhxGoxHJyckYMWJEta7gqY1OqdthqLDOhL9z86Kt0g4RERHdXY0SlB49emDDhg2YOnUqZs+ejaCgICxevBixsbFSnTfeeAM3btxAQkICCgsL8cQTT2Dbtm3SPVAA4NNPP0VycjL69+8v3ahtyZIl1usVERER2bUa30n2mWeewTPPPHPX9QqFArNnz8bs2bPvWsfb27vaN2UjIiKihw/vY01ERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESywwSFiIiIZIcJChEREckOExQiIiKSHSYoREREJDtMUIiIiEh2mKAQERGR7DBBISIiItlhgkJERESy80AJyrx586BQKDBx4kSprLS0FElJSfDx8YG7uztiYmKQl5dntt358+cRHR0NV1dX+Pn5YfLkySgvL3+QUIiIiKgBqXWCcvDgQaxYsQJdunQxK580aRI2bdqEdevWISsrCxcvXsTw4cOl9RUVFYiOjkZZWRn27duHNWvWICMjAzNmzKh9L4iIiKhB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\n"},"metadata":{}}],"source":["# Calculating the length of each cell in each column\n","df['num_characters_instruction'] = df['instruction'].apply(lambda x: len(x))\n","df['num_characters_input'] = df['input'].apply(lambda x: len(x))\n","df['num_characters_output'] = df['output'].apply(lambda x: len(x))\n","\n","# Show Distribution\n","df.hist(column=['num_characters_instruction', 'num_characters_input', 'num_characters_output'])\n","\n","# Calculating the average\n","average_chars_instruction = df['num_characters_instruction'].mean()\n","average_chars_input = df['num_characters_input'].mean()\n","average_chars_output = df['num_characters_output'].mean()\n","\n","print(f'Average number of tokens in the instruction column: {(average_chars_instruction / 3):.0f}')\n","print(f'Average number of tokens in the input column: {(average_chars_input / 3):.0f}')\n","print(f'Average number of tokens in the output column: {(average_chars_output / 3):.0f}', end=\"\\n\\n\")"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":322,"status":"ok","timestamp":1703808189674,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"-mpSiGGHrWme","outputId":"bc66852a-cedc-4db7-ea71-40b0860a082d"},"outputs":[{"data":{"text/plain":["(898, 3)"]},"execution_count":16,"metadata":{},"output_type":"execute_result"}],"source":["df[df['split'] == 0][['instruction', 'input',\t'output']].shape"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KRjyPoE_sRBU"},"outputs":[],"source":["json_result = df[df['split'] == 0][['instruction', 'input',\t'output']].to_json(orient='records')"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"UAOgoitzsrxn"},"outputs":[],"source":["with open('training_data.json', 'w') as file:\n"," file.write(json_result)"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":406,"status":"ok","timestamp":1703808214266,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"zuccYgJjsyot","outputId":"907c1d0a-e99c-45d3-b917-135e26858e53"},"outputs":[{"name":"stdout","output_type":"stream","text":["config.json data.json\tmulti-lora-fine-tune sample_data training_data.json\n"]}],"source":["!ls"]},{"cell_type":"markdown","metadata":{"id":"dEKoBKrzqJhu"},"source":["## Fine-tune"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":5881,"status":"ok","timestamp":1703887815985,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"},"user_tz":480},"id":"6erZ2lsyqDpn","outputId":"a5d7c818-2053-4550-d192-d72ea3a6cb79"},"outputs":[{"output_type":"stream","name":"stdout","text":["Cloning into 'multi-lora-fine-tune'...\n","remote: Enumerating objects: 1034, done.\u001b[K\n","remote: Counting objects: 100% (453/453), done.\u001b[K\n","remote: Compressing objects: 100% (161/161), done.\u001b[K\n","remote: Total 1034 (delta 323), reused 331 (delta 289), pack-reused 581\u001b[K\n","Receiving objects: 100% (1034/1034), 6.33 MiB | 1.34 MiB/s, done.\n","Resolving deltas: 100% (573/573), done.\n"]}],"source":["!git clone https://github.com/TUDB-Labs/multi-lora-fine-tune.git"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"yJQw3FrEqNCW"},"outputs":[],"source":["!pip install -r multi-lora-fine-tune/requirements.txt"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"kEXjcWRLqRIl"},"outputs":[],"source":["config_string = \"\"\"\n","{\n"," \"cutoff_len\": 256,\n"," \"group_by_length\": false,\n"," \"expand_right\": true,\n"," \"pad_token_id\": -1,\n"," \"save_step\": 2000,\n"," \"early_stop_test_step\": 2000,\n"," \"train_lora_candidate_num\": 4,\n"," \"train_lora_simultaneously_num\": 2,\n"," \"train_strategy\": \"optim\",\n"," \"lora\": [\n"," {\n"," \"name\": \"lora_0\",\n"," \"output\": \"lora_0\",\n"," \"optim\": \"adamw\",\n"," \"lr\": 3e-4,\n"," \"batch_size\": 16,\n"," \"micro_batch_size\": 4,\n"," \"test_batch_size\": 64,\n"," \"num_epochs\": 30,\n"," \"r\": 8,\n"," \"alpha\": 16,\n"," \"dropout\": 0.05,\n"," \"target_modules\": {\n"," \"q_proj\": true,\n"," \"k_proj\": false,\n"," \"v_proj\": true,\n"," \"o_proj\": false,\n"," \"w1_proj\": false,\n"," \"w2_proj\": false,\n"," \"w3_proj\": false\n"," },\n"," \"data\": \"training_data.json\",\n"," \"prompt\": \"multi-lora-fine-tune/template/template_demo.json\"\n"," },\n"," {\n"," \"name\": \"lora_1\",\n"," \"output\": \"lora_1\",\n"," \"optim\": \"adamw\",\n"," \"lr\": 3e-4,\n"," \"batch_size\": 16,\n"," \"micro_batch_size\": 4,\n"," \"test_batch_size\": 64,\n"," \"num_epochs\": 1,\n"," \"r\": 8,\n"," \"alpha\": 16,\n"," \"dropout\": 0.05,\n"," \"target_modules\": {\n"," \"q_proj\": true,\n"," \"k_proj\": false,\n"," \"v_proj\": true,\n"," \"o_proj\": false,\n"," \"w1_proj\": false,\n"," \"w2_proj\": false,\n"," \"w3_proj\": false\n"," },\n"," \"data\": \"multi-lora-fine-tune/data/data_demo.json\",\n"," \"prompt\": \"multi-lora-fine-tune/template/template_demo.json\"\n"," }\n"," ]\n","}\n","\"\"\"\n","\n","with open(\"./config.json\", \"w\") as f:\n"," f.write(config_string)\n"]},{"cell_type":"code","execution_count":null,"metadata":{"colab":{"background_save":true},"id":"MSlAyiJetEgy"},"outputs":[],"source":["!python multi-lora-fine-tune/mlora.py \\\n"," --base_model openlm-research/open_llama_3b \\\n"," --config config.json"]},{"cell_type":"markdown","metadata":{"id":"Ls8iGBTow0fr"},"source":["## Inference"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"365__VkJw3q-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1703887700168,"user_tz":480,"elapsed":3257,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"}},"outputId":"a91ce7f0-2d3c-4fb6-97a5-772771122e7e"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/gdrive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/gdrive')"]},{"cell_type":"code","source":["!ls /content/gdrive/MyDrive"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"qF0wPXQdnpkQ","executionInfo":{"status":"ok","timestamp":1703887725085,"user_tz":480,"elapsed":5,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"}},"outputId":"57991fe2-4166-4dad-c6ad-52cef0c64e05"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":[" aclImdb\t\t\t\t\t\t Notability\n","'Colab Notebooks'\t\t\t\t\t 'Notability (1)'\n"," data\t\t\t\t\t\t\t 'Notability (2)'\n"," data.xlsx\t\t\t\t\t\t stop_words.txt\n","'History courses info'\t\t\t\t\t transcript.pdf\n","'Instagram Likes Classification Project Summary.gslides' 'Yufei Wang - CV_V6.pdf'\n"," lora_0\n"]}]},{"cell_type":"code","source":["!pip install peft"],"metadata":{"id":"m5iFzwIinB7K"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from peft import PeftModel\n","from transformers import GenerationConfig, LlamaForCausalLM, LlamaTokenizer\n","import torch"],"metadata":{"id":"sGXOOCcnnCWT"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["base_model = 'openlm-research/open_llama_3b'\n","lora_weights = '/content/gdrive/MyDrive/lora_0'\n","\n","tokenizer = LlamaTokenizer.from_pretrained(base_model)\n","model = LlamaForCausalLM.from_pretrained(\n"," base_model,\n"," load_in_8bit=True,\n"," torch_dtype=torch.float16,\n"," device_map=\"cuda:0\",\n",")\n","model = PeftModel.from_pretrained(\n"," model,\n"," lora_weights,\n"," torch_dtype=torch.float16,\n",")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":209,"referenced_widgets":["4fa918c5a8f849cd812ac83ec7fe2f1e","6bfaee2361b646a5a21c2ae5e1023257","efcf8af77a114e74aaff95a20438702a","0dd4b00f793742eca9f87d73712e0b0e","6968c61c31604aca80e5745daaaf7ef6","500144acbc8c4fa1b06f026320ba8844","d98f83b1034d44ce84d2d133134d627c","287a2d39097c4e3ea09866f1340293dc","c1af2047df5d41ae8a6d0e0579a888cf","44414614da424efd8aac1788111a1d74","4191aaf7508840ceb0edbe05ed5d55fd","2ec956ffc8af48ea9c2ed605b9a1232a","9adda1cb7776459487337c79cd8de2ec","f6fce7b0d0d14b2b896b53c982173658","3460185852014621b82f51e14e0d4311","b43003bd11e5487f8f3f6957ffba03c8","cf9827ba6c814668816ae1501755ae4c","1187729f2eb947ec8c9fb5c44d5f4c6a","cfa193662e0c4f7b8d66c0ebc255a781","5b0c4e5306d244dfb16cc34ef70fc9a5","c7a6752ad86d4cb0b02e4638659e389a","85866eb60ef3492582cc2e373748010a","fef1536a9ec9495cb9a3582564cae4cc","7c85981816a04a7db6d71266d790ff2a","dff5f6a0ce3448d8846312716cebeb2c","515e810367c24f0687bd744303eb80fb","c0a01985d43b4a47a004eef011844308","3416a9c05e504b5f9fa69c852f1304b0","1d55b6f3bda446e797b0858e6db59d67","15b832b3cfe64f80a4d90053520ea985","1339381ed22e4350b9f6dcf65cf0f358","e15c5a3c547b436f827cc8552f2d2615","1d57926c94284cf8a9f524189023123a","d272281fa4ca48bb8d902408bb6897fc","4840bd8c3101481bbb0e12b9dacec08b","143717384ab544038e5952fbef276e8c","77937929d9f04aa6a07b240aed165ce8","e99fc782ccc04610b7dbfa40ae5f4c09","9ee756f4a494461eb8973268657cc4d9","5152e80bee06480b9de3d54ddd302705","8c6fed8ed357422cb4eb8593c2372624","0e323895b54f42619f153c610d98133e","2695a39b12e340f8985c5d22c09dbe6d","8e5be166caf744a5b754817c7a31f9bf","51d03f632f1042d5a1dab3d2bfa51a14","e81913c8e9214d29953fd4e021391d0d","b7723546836e45fb978de0dd907329e9","8ae07af1f213483da91759986df99abc","a41e518f1449498b839e9b73539d169f","b9168e27f69b405d885a94e1801bf7c1","b51b668afdbc4a5488513853b94b760b","7e827c582b1c45f392cde01d5e05b643","b9d1e2f19c334f3b96e97c9b318d9468","58fb40eb4c994e38bbbf441ea274cc25","fc514bcf67f0418891792e51f30b73af","3606fa920d1f4d60872e739f4ca9b7ad","7fbd2ed58abe422dab2ee763ccc150c5","7f5d53cd9fae4bc5882bd8f1e0b3e3af","942df0378c62436a932e6ac57e388b7a","628020138bfc43e98b410d3226a47e35","b00c24c6257a42baa45934eb2120af32","3c283f77ce5b424e9829881d43327482","808740bdd78542a89da085a8eb946763","414bb5d9b41d46c6a3a6d819b9c35f24","25a6399de4db4ae4b32a012736115f8b","ab5411ad9d7a4ec7b5f3833ae24675b9"]},"id":"653kdOManF1r","executionInfo":{"status":"ok","timestamp":1703888258080,"user_tz":480,"elapsed":257358,"user":{"displayName":"Yufei Wang","userId":"15670977446030042093"}},"outputId":"21c1ec5a-e018-4b68-969c-f4cb418b68db"},"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["tokenizer.model: 0%| | 0.00/534k [00:00 y:\\n ... \n","120 import java.util.Random; \\n \\npublic class Ge... \n","146 SELECT department, COUNT(employee_ID)\\nFROM em... \n","153 SELECT SUM(CASE WHEN gender = 'female' THEN sa... \n","170 // Algorithm to find the largest element in an... \n","203 \"\"\"\\nWrite a code to find the maximum in a giv... \n","212 \"\"\"\\nCreate a program to compute the checksum ... \n","249 import mysql.connector\\n\\nmydb = mysql.connect... \n","253 def calculator():\\n number1 = int(input(\"Pl... \n","257 mylist = [x for x in mylist if x % 3 == 0] \n","313 def greet_user(name):\\n \"\"\"\\n Greet the ... \n","327 def multiply(x,y):\\n if(y == 0):\\n return ... \n","344
\\n
\\n \n","
\n","\n","\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
instructioninputoutput
34Create a JSX code that renders a \"Hello, World...import React from \"react\";\\n\\nfunction App() {...
58Generate a random number between 0 and 1 (incl...Math.random(); // a random number between 0 an...
96Create a quick-sort algorithm in Python.def quick_sort(arr):\\n \"\"\"Sort a list of nu...
99Write a function that takes in a list of numbe...list = [8, 2, 14, 25]def find_greatest(list):\\n \"\"\"Print out the...
109Create a function to calculate the maximum of ...def max_of_two(x, y):\\n if x > y:\\n ...
120Write a Java program to generate random numbersimport java.util.Random; \\n \\npublic class Ge...
146Write an SQL query to select the number of emp...SELECT department, COUNT(employee_ID)\\nFROM em...
153Write an SQL query to calculate the difference...SELECT SUM(CASE WHEN gender = 'female' THEN sa...
170Write an algorithm to find the largest element...[8, 11, 12, 5, 3]// Algorithm to find the largest element in an...
203Write a code to find the maximum in a given li...mylist = [1,2,3,4,5]\"\"\"\\nWrite a code to find the maximum in a giv...
212Create a program to compute the checksum of a ...data_packet = [0xff, 0x0a, 0x1b, 0x3f]\"\"\"\\nCreate a program to compute the checksum ...
249Connect to a MySQL database and select all row...import mysql.connector\\n\\nmydb = mysql.connect...
253Write a simple calculator program.def calculator():\\n number1 = int(input(\"Pl...
257Change the following array so that it only con...mylist = [2, 4, 5, 6, 7, 11, 12, 22]mylist = [x for x in mylist if x % 3 == 0]
313Create a program which will take the user's na...name = 'John'def greet_user(name):\\n \"\"\"\\n Greet the ...
327Write a code to multiple two numbers without u...def multiply(x,y):\\n if(y == 0):\\n return ...
344Create an HTML form with radio buttons for sel...<form>\\n <label>Gender:</label><br>\\n <input...
382Write a Python code snippet to print the pyram...4* \\n ***\\n *****\\n *******
398Write a Python function to check if a given st...word1 = \"cat\"\\nword2 = \"tac\"def is_anagram(word1, word2):\\n return sorted(...
404Describe how to debug a C++ program using GDB.Debugging a C++ program using GDB involves run...
432Write a Python script to find the common eleme...list1 = [1, 2, 3, 5, 7]\\nlist2 = [2, 3, 4, 5, 6]def common_elements(list1, list2):\\n common...
440Create a function to convert a given number fr...def dec_to_binary(num):\\n binary = \"\"\\n ...
442Implement a Java program for finding the index...public int binarySearch(int[] arr, int val){\\n...
449Write a SQL query to join two tables on a spec...Table 1:\\nid name age\\n1 a 15\\n2 ...SELECT table1.id, table1.name, table1.age, tab...
466Describe the details of the try-except stateme...The try-except statement in Python is used to ...
482Convert the following code from Swift to Java.let age = 25int age = 25;
527Create an array in Java with 10 floating-point...// Create an array \\nfloat arr[] = {1.1, 2.2, ...
552Create a binary search tree in JavaScript.class Node { \\n constructor(data) \\n { \\n ...
562Write a code to find the square of the first n...def square_of_first_n_number(n):\\n \"\"\"Find ...
624Perform a linear search in a list named 'mylis...mylist = [1, 2, 3, 4, 5, 6, 7]\\ntarget = 4def linear_search(mylist, target):\\n for i in ...
643Build a deep learning model in Python to predi...# import libraries\\nimport numpy as np\\nimport...
645Write a JavaScript function to sort an array o...function sortArray(arr) {\\n return arr.sort(fu...
655Create a loop in JavaScript that prints the nu...for (let i = 1; i <= 10; i++) {\\n console.l...
662Calculate the factorial of a given number.The number is 75040
697Describe how to add an element in a linked lis...// To add an element in a linked list in Pytho...
718What is the purpose of the \"break\" keyword in ...The \"break\" keyword is used to immediately bre...
745Concatenate the two strings below, with a spac...A = \"Hello\"\\nB = \"World!\"A + ' ' + B
750Write a bash script to list the content of the...#!/bin/bash\\n\\nls
751Create a JavaScript object to represent a pers...let person = {\\n name: \"John Doe\",\\n age: 25...
768Write a SQL query to select the row with the c...SELECT * FROM customers WHERE customer_id = 'C...
776Write a JavaScript code to add two numbers usi...let a = prompt('Enter the first number:');\\nle...
779Edit the provided CSS rule to make all element....myClass { \\n font-size: 16px;\\n}.myClass { \\n font-size: 16px;\\n font-weight...
813Write a method that prints out a square of siz...n=5public static void printSquare(int n) { \\n ...
836Rewrite the following SQL query so that it pro...SELECT * FROM Orders WHERE OrderId IN (SELECT ...SELECT Orders.* \\nFROM Orders \\nINNER JOIN Ord...
838Create an array of ten unique numbers within t...int[] numbers = {10, 13, 16, 23, 25, 37, 41, 4...
877You should create a Java program to implement ...public class BinarySearch \\n{ \\n // Returns...
903Write a SQL query to retrieve all the rows fro...SELECT * FROM customers;
910You are given a list of numbers. Write a progr...[1, 2, 3, 2, 1]def is_palindrome(arr):\\n rev_arr = arr[::-1]...
922Generate a string of 5 random characters from ...import random\\n\\ndef random_string():\\n cha...
964Create a neural network in Python to recognize...MNIST hand-written digit datasetThe code to create a neural network in Python ...
981Write a database query to retrieve the names o...SELECT name \\nFROM authors;
\n","
\n","
\n","\n","
\n"," \n","\n"," \n","\n"," \n","
\n","\n","\n","
\n"," \n","\n","\n","\n"," \n","
\n","
\n"," \n"],"application/vnd.google.colaboratory.module+javascript":"\n import \"https://ssl.gstatic.com/colaboratory/data_table/881c4a0d49046431/data_table.js\";\n\n const table = window.createDataTable({\n data: [[{\n 'v': 34,\n 'f': \"34\",\n },\n\"Create a JSX code that renders a \\\"Hello, World!\\\" message in the browser.\",\n\"\",\n\"import React from \\\"react\\\";\\n\\nfunction App() {\\n return (\\n
\\n

Hello, World!<\\/h1>\\n <\\/div>\\n );\\n}\\n\\nexport default App;\"],\n [{\n 'v': 58,\n 'f': \"58\",\n },\n\"Generate a random number between 0 and 1 (inclusively).\",\n\"\",\n\"Math.random(); // a random number between 0 and 1 (inclusively)\"],\n [{\n 'v': 96,\n 'f': \"96\",\n },\n\"Create a quick-sort algorithm in Python.\",\n\"\",\n\"def quick_sort(arr):\\n \\\"\\\"\\\"Sort a list of numbers in ascending order using the Quick-Sort algorithm\\\"\\\"\\\"\\n if len(arr) == 0:\\n return []\\n\\n pivot = arr[0]\\n left_arr = [x for x in arr if x < pivot]\\n right_arr = [x for x in arr if x > pivot]\\n return quick_sort(left_arr) + [pivot] + quick_sort(right_arr)\"],\n [{\n 'v': 99,\n 'f': \"99\",\n },\n\"Write a function that takes in a list of numbers and prints out the greatest number.\",\n\"list = [8, 2, 14, 25]\",\n\"def find_greatest(list):\\n \\\"\\\"\\\"Print out the greatest number from a list of numbers.\\\"\\\"\\\"\\n greatest = list[0]\\n for num in list:\\n if num > greatest:\\n greatest = num\\n print('The greatest number is: ', greatest)\"],\n [{\n 'v': 109,\n 'f': \"109\",\n },\n\"Create a function to calculate the maximum of two numbers.\",\n\"\",\n\"def max_of_two(x, y):\\n if x > y:\\n return x\\n else:\\n return y\"],\n [{\n 'v': 120,\n 'f': \"120\",\n },\n\"Write a Java program to generate random numbers\",\n\"\",\n\"import java.util.Random; \\n \\npublic class GenerateRandom { \\n \\n public static void main(String[] args) \\n { \\n \\n Random rand = new Random(); \\n \\n // Generate random integers in range 0 to 999 \\n int x = rand.nextInt(1000); \\n System.out.println(\\\"Random Integers: \\\" + x); \\n \\n // Generate Random doubles \\n double y = rand.nextDouble(); \\n System.out.println(\\\"Random Doubles: \\\" + y); \\n \\n // Generate Random Boolean \\n boolean z = rand.nextBoolean(); \\n System.out.println(\\\"Random Boolean: \\\" + z); \\n } \\n}\"],\n [{\n 'v': 146,\n 'f': \"146\",\n },\n\"Write an SQL query to select the number of employees in each department, sorted by the department name in ascending order.\",\n\"\",\n\"SELECT department, COUNT(employee_ID)\\nFROM employees\\nGROUP BY department\\nORDER BY department ASC;\"],\n [{\n 'v': 153,\n 'f': \"153\",\n },\n\"Write an SQL query to calculate the difference between the total salaries of male and female employees in a table.\",\n\"\",\n\"SELECT SUM(CASE WHEN gender = 'female' THEN salary ELSE 0 END) - SUM(CASE WHEN gender = 'male' THEN salary ELSE 0 END)\\nFROM employees;\"],\n [{\n 'v': 170,\n 'f': \"170\",\n },\n\"Write an algorithm to find the largest element in an array.\",\n\"[8, 11, 12, 5, 3]\",\n\"// Algorithm to find the largest element in an array\\n\\n// Step 1: Create a variable 'max' and initialize it with value of the first element in the array\\nint max = arr[0];\\n\\n// Step 2: Iterate through the array and compare each element with 'max'\\nfor (int i = 1; i < arr.length; i++) {\\n if (arr[i] > max) {\\n max = arr[i];\\n }\\n}\\n\\n// Step 3: Return the value of 'max'\\nreturn max;\"],\n [{\n 'v': 203,\n 'f': \"203\",\n },\n\"Write a code to find the maximum in a given list of integers.\",\n\"mylist = [1,2,3,4,5]\",\n\"\\\"\\\"\\\"\\nWrite a code to find the maximum in a given list of integers\\n\\\"\\\"\\\"\\n\\n# List containing the elements\\nmylist = [1,2,3,4,5]\\n\\n# Finding the maximum element\\nmax = mylist[0]\\n\\n# Looping through each element to find if it is the maximum\\nfor i in range(1,len(mylist)):\\n # Comparing the element with the maximum\\n if mylist[i] > max:\\n max = mylist[i]\\n\\n# Printing the maximum element\\nprint(\\\"Maximum element of the list is\\\", max)\"],\n [{\n 'v': 212,\n 'f': \"212\",\n },\n\"Create a program to compute the checksum of a given data packet\",\n\"data_packet = [0xff, 0x0a, 0x1b, 0x3f]\",\n\"\\\"\\\"\\\"\\nCreate a program to compute the checksum of a given data packet\\n\\\"\\\"\\\"\\n\\ndef compute_checksum(data_packet):\\n checksum = 0\\n for x in data_packet:\\n checksum += x\\n return checksum\\n\\nif __name__ == '__main__':\\n data_packet = [0xff, 0x0a, 0x1b, 0x3f]\\n print(compute_checksum(data_packet))\"],\n [{\n 'v': 249,\n 'f': \"249\",\n },\n\"Connect to a MySQL database and select all rows from Customers where Phone is greater than 1000.\",\n\"\",\n\"import mysql.connector\\n\\nmydb = mysql.connector.connect(\\n host=\\\"localhost\\\",\\n user=\\\"\\\",\\n passwd=\\\"\\\",\\n database=\\\"mydatabase\\\"\\n)\\n\\nmycursor = mydb.cursor()\\n\\nmycursor.execute(\\\"SELECT * FROM customers WHERE phone > 1000\\\")\\n\\nmyresult = mycursor.fetchall()\\n\\nfor x in myresult:\\n print(x)\"],\n [{\n 'v': 253,\n 'f': \"253\",\n },\n\"Write a simple calculator program.\",\n\"\",\n\"def calculator():\\n number1 = int(input(\\\"Please enter first number: \\\"))\\n number2 = int(input(\\\"Please enter second number: \\\"))\\n print(\\\"Please choose operation -\\\\n\\\" \\\\\\n \\\"1. Add\\\\n\\\" \\\\\\n \\\"2. Subtract\\\\n\\\" \\\\\\n \\\"3. Multiply\\\\n\\\" \\\\\\n \\\"4. Divide\\\\n\\\") \\n\\n choice = int(input(\\\"Enter your choice: \\\"))\\n if choice == 1:\\n ans = number1 + number2\\n print(\\\"Answer={}\\\".format(ans))\\n elif choice == 2:\\n ans = number1 - number2\\n print(\\\"Answer={}\\\".format(ans))\\n elif choice == 3:\\n ans = number1 * number2\\n print(\\\"Answer={}\\\".format(ans))\\n elif choice == 4:\\n ans = number1 / number2\\n print(\\\"Answer={}\\\".format(ans))\\n else:\\n print(\\\"Invalid Choice\\\")\"],\n [{\n 'v': 257,\n 'f': \"257\",\n },\n\"Change the following array so that it only contains numbers divisible by 3\",\n\"mylist = [2, 4, 5, 6, 7, 11, 12, 22]\",\n\"mylist = [x for x in mylist if x % 3 == 0]\"],\n [{\n 'v': 313,\n 'f': \"313\",\n },\n\"Create a program which will take the user's name and output a custom message depending on the supplied name\",\n\"name = 'John'\",\n\"def greet_user(name):\\n \\\"\\\"\\\"\\n Greet the user with a custom message depending on the supplied name.\\n \\\"\\\"\\\"\\n if name == 'John':\\n print('Hey there John! Welcome back!')\\n elif name == 'Mary':\\n print('Good morning Mary! How are you doing today?')\\n else:\\n print('Hi there! Welcome to our service!')\"],\n [{\n 'v': 327,\n 'f': \"327\",\n },\n\"Write a code to multiple two numbers without using the multiplication operator.\",\n\"\",\n\"def multiply(x,y):\\n if(y == 0):\\n return 0\\n return x + multiply(x,y-1)\\n\\nmultiply(5,4) # 20\"],\n [{\n 'v': 344,\n 'f': \"344\",\n },\n\"Create an HTML form with radio buttons for selecting gender.\",\n\"\",\n\"\\n