{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"# PEFT Fine-Tune a Generative AI Model for Dialogue Summarization"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"\n",
"## First, check that the correct kernel is chosen.\n",
"\n",
"\n",
"\n",
"You can click on that to see and check the details of the image, kernel, and instance type.\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from datasets import load_dataset\n",
"from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, GenerationConfig, TrainingArguments, Trainer\n",
"import torch\n",
"import time\n",
"import evaluate\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"# tqdm library makes the loops show a smart progress meter.\n",
"from tqdm import tqdm\n",
"tqdm.pandas()"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## Load Dataset and LLM"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"huggingface_dataset_name = \"knkarthick/dialogsum\"\n",
"\n",
"dataset = load_dataset(huggingface_dataset_name)\n",
"\n",
"dataset"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"model_name='google/flan-t5-base'\n",
"\n",
"original_model = AutoModelForSeq2SeqLM.from_pretrained(model_name, torch_dtype=torch.bfloat16)\n",
"tokenizer = AutoTokenizer.from_pretrained(model_name)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"def print_number_of_trainable_model_parameters(model):\n",
" trainable_model_params = 0\n",
" all_model_params = 0\n",
" for _, param in model.named_parameters():\n",
" all_model_params += param.numel()\n",
" if param.requires_grad:\n",
" trainable_model_params += param.numel()\n",
" return f\"trainable model parameters: {trainable_model_params}\\nall model parameters: {all_model_params}\\npercentage of trainable model parameters: {100 * trainable_model_params / all_model_params}%\"\n",
"\n",
"print(print_number_of_trainable_model_parameters(original_model))"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## Test the Model with Zero Shot Inferencing"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"index = 200\n",
"\n",
"dialogue = dataset['test'][index]['dialogue']\n",
"summary = dataset['test'][index]['summary']\n",
"\n",
"prompt = f\"\"\"\n",
"Summarize the following conversation.\n",
"\n",
"{dialogue}\n",
"\n",
"Summary:\n",
"\"\"\"\n",
"\n",
"inputs = tokenizer(prompt, return_tensors='pt')\n",
"output = tokenizer.decode(\n",
" original_model.generate(\n",
" inputs[\"input_ids\"], \n",
" max_new_tokens=200,\n",
" )[0], \n",
" skip_special_tokens=True\n",
")\n",
"\n",
"dash_line = ('-'.join('' for x in range(100)))\n",
"print(dash_line)\n",
"print(f'INPUT PROMPT:\\n{prompt}')\n",
"print(dash_line)\n",
"print(f'BASELINE HUMAN SUMMARY:\\n{summary}\\n')\n",
"print(dash_line)\n",
"print(f'MODEL GENERATION - ZERO SHOT:\\n{output}')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"## Perform Full Fine-Tuning"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"def tokenize_function(example):\n",
" start_prompt = 'Summarize the following conversation.\\n\\n'\n",
" end_prompt = '\\n\\nSummary: '\n",
" prompt = [start_prompt + dialogue + end_prompt for dialogue in example[\"dialogue\"]]\n",
" example['input_ids'] = tokenizer(prompt, padding=\"max_length\", truncation=True, return_tensors=\"pt\").input_ids\n",
" example['labels'] = tokenizer(example[\"summary\"], padding=\"max_length\", truncation=True, return_tensors=\"pt\").input_ids\n",
" \n",
" return example\n",
"\n",
"tokenized_datasets = dataset.map(tokenize_function, batched=True)\n",
"tokenized_datasets = tokenized_datasets.remove_columns(['id', 'topic', 'dialogue', 'summary',])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tokenized_datasets = tokenized_datasets.filter(lambda example, index: index % 100 == 0, with_indices=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"print(f\"Shapes of the datasets:\")\n",
"print(f\"Training: {tokenized_datasets['train'].shape}\")\n",
"print(f\"Validation: {tokenized_datasets['validation'].shape}\")\n",
"print(f\"Test: {tokenized_datasets['test'].shape}\")\n",
"\n",
"print(tokenized_datasets)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"output_dir = f'./dialogue-summary-training-{str(int(time.time()))}'\n",
"\n",
"training_args = TrainingArguments(\n",
" output_dir=output_dir,\n",
" learning_rate=1e-5,\n",
" num_train_epochs=1,\n",
" weight_decay=0.01,\n",
" logging_steps=1,\n",
" max_steps=1\n",
")\n",
"\n",
"trainer = Trainer(\n",
" model=original_model,\n",
" args=training_args,\n",
" train_dataset=tokenized_datasets['train'],\n",
" eval_dataset=tokenized_datasets['validation']\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"trainer.train()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"!aws s3 cp --recursive s3://dsoaws/models/flan-dialogue-summary-checkpoint/ ./flan-dialogue-summary-checkpoint/"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"!ls -al ./flan-dialogue-summary-checkpoint/pytorch_model.bin"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"instruct_model = AutoModelForSeq2SeqLM.from_pretrained(\"./flan-dialogue-summary-checkpoint\", torch_dtype=torch.bfloat16)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the Model Qualitatively"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"index = 200\n",
"dialogue = dataset['test'][index]['dialogue']\n",
"human_baseline_summary = dataset['test'][index]['summary']\n",
"\n",
"prompt = f\"\"\"\n",
"Summarize the following conversation.\n",
"\n",
"{dialogue}\n",
"\n",
"Summary:\n",
"\"\"\"\n",
"\n",
"input_ids = tokenizer(prompt, return_tensors=\"pt\").input_ids\n",
"\n",
"original_model_outputs = original_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200, num_beams=1))\n",
"original_model_text_output = tokenizer.decode(original_model_outputs[0], skip_special_tokens=True)\n",
"\n",
"instruct_model_outputs = instruct_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200, num_beams=1))\n",
"instruct_model_text_output = tokenizer.decode(instruct_model_outputs[0], skip_special_tokens=True)\n",
"\n",
"print(dash_line)\n",
"print(f'BASELINE HUMAN SUMMARY:\\n{human_baseline_summary}')\n",
"print(dash_line)\n",
"print(f'ORIGINAL MODEL:\\n{original_model_text_output}')\n",
"print(dash_line)\n",
"print(f'INSTRUCT MODEL:\\n{instruct_model_text_output}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the Model Quantitatively"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"rouge = evaluate.load('rouge')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Generate the outputs for the sample of the test dataset (only 10 dialogues and summaries to save time), and save the results."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"dialogues = dataset['test'][0:10]['dialogue']\n",
"human_baseline_summaries = dataset['test'][0:10]['summary']\n",
"\n",
"original_model_summaries = []\n",
"instruct_model_summaries = []\n",
"\n",
"for _, dialogue in enumerate(tqdm(dialogues)):\n",
" prompt = f\"\"\"\n",
"Summarize the following conversation.\n",
"\n",
"{dialogue}\n",
"\n",
"Summary: \"\"\"\n",
" input_ids = tokenizer(prompt, return_tensors=\"pt\").input_ids\n",
"\n",
" original_model_outputs = original_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200))\n",
" original_model_text_output = tokenizer.decode(original_model_outputs[0], skip_special_tokens=True)\n",
" original_model_summaries.append(original_model_text_output)\n",
"\n",
" instruct_model_outputs = instruct_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200))\n",
" instruct_model_text_output = tokenizer.decode(instruct_model_outputs[0], skip_special_tokens=True)\n",
" instruct_model_summaries.append(instruct_model_text_output)\n",
" \n",
"zipped_summaries = list(zip(human_baseline_summaries, original_model_summaries, instruct_model_summaries))\n",
" \n",
"pd.set_option('display.max_colwidth', 500)\n",
"df = pd.DataFrame(zipped_summaries, columns = ['human_baseline_summaries', 'original_model_summaries', 'instruct_model_summaries'])\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"original_model_results = rouge.compute(\n",
" predictions=original_model_summaries,\n",
" references=human_baseline_summaries[0:len(original_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"instruct_model_results = rouge.compute(\n",
" predictions=instruct_model_summaries,\n",
" references=human_baseline_summaries[0:len(instruct_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"print('ORIGINAL MODEL:')\n",
"print(original_model_results)\n",
"print('INSTRUCT MODEL:')\n",
"print(instruct_model_results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"results = pd.read_csv(\"data-peft/dialogue-summary-training-results-peft.csv\")\n",
"\n",
"human_baseline_summaries = results['human_baseline_summaries'].values\n",
"original_model_summaries = results['original_model_summaries'].values\n",
"instruct_model_summaries = results['instruct_model_summaries'].values\n",
"\n",
"original_model_results = rouge.compute(\n",
" predictions=original_model_summaries,\n",
" references=human_baseline_summaries[0:len(original_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"instruct_model_results = rouge.compute(\n",
" predictions=instruct_model_summaries,\n",
" references=human_baseline_summaries[0:len(instruct_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"print('ORIGINAL MODEL:')\n",
"print(original_model_results)\n",
"print('INSTRUCT MODEL:')\n",
"print(instruct_model_results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"print(\"Absolute percentage improvement of INSTRUCT MODEL over HUMAN BASELINE\")\n",
"\n",
"improvement = (np.array(list(instruct_model_results.values())) - np.array(list(original_model_results.values())))\n",
"for key, value in zip(instruct_model_results.keys(), improvement):\n",
" print(f'{key}: {value*100:.2f}%')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Parameter Efficient Fine-Tuning (PEFT)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from peft import LoraConfig, get_peft_model, TaskType\n",
"\n",
"lora_config = LoraConfig(\n",
" r=32, # Rank\n",
" lora_alpha=32,\n",
" target_modules=[\"q\", \"v\"],\n",
" lora_dropout=0.05,\n",
" bias=\"none\",\n",
" task_type=TaskType.SEQ_2_SEQ_LM # FLAN-T5\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"peft_model = get_peft_model(original_model, \n",
" lora_config)\n",
"print(print_number_of_trainable_model_parameters(peft_model))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"output_dir = f'./peft-dialogue-summary-training-{str(int(time.time()))}'\n",
"\n",
"peft_training_args = TrainingArguments(\n",
" output_dir=output_dir,\n",
" auto_find_batch_size=True,\n",
" learning_rate=1e-3, # Higher learning rate than full fine-tuning.\n",
" num_train_epochs=1,\n",
" logging_steps=1,\n",
" max_steps=1 \n",
")\n",
" \n",
"peft_trainer = Trainer(\n",
" model=peft_model,\n",
" args=peft_training_args,\n",
" train_dataset=tokenized_datasets[\"train\"],\n",
")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"peft_trainer.train()\n",
"\n",
"peft_model_path=\"./peft-dialogue-summary-checkpoint-local\"\n",
"\n",
"peft_trainer.model.save_pretrained(peft_model_path)\n",
"tokenizer.save_pretrained(peft_model_path)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"!aws s3 cp --recursive s3://dsoaws/models/peft-dialogue-summary-checkpoint/ ./peft-dialogue-summary-checkpoint-from-s3/ "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"!ls -al ./peft-dialogue-summary-checkpoint-from-s3/adapter_model.bin"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"from peft import PeftModel, PeftConfig\n",
"\n",
"peft_model_base = AutoModelForSeq2SeqLM.from_pretrained(\"google/flan-t5-base\", torch_dtype=torch.bfloat16)\n",
"tokenizer = AutoTokenizer.from_pretrained(\"google/flan-t5-base\")\n",
"\n",
"peft_model = PeftModel.from_pretrained(peft_model_base, \n",
" './peft-dialogue-summary-checkpoint-from-s3/', \n",
" torch_dtype=torch.bfloat16,\n",
" is_trainable=False)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"print(print_number_of_trainable_model_parameters(peft_model))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the Model Qualitatively"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"index = 200\n",
"dialogue = dataset['test'][index]['dialogue']\n",
"baseline_human_summary = dataset['test'][index]['summary']\n",
"\n",
"prompt = f\"\"\"\n",
"Summarize the following conversation.\n",
"\n",
"{dialogue}\n",
"\n",
"Summary: \"\"\"\n",
"\n",
"input_ids = tokenizer(prompt, return_tensors=\"pt\").input_ids\n",
"\n",
"original_model_outputs = original_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200, num_beams=1))\n",
"original_model_text_output = tokenizer.decode(original_model_outputs[0], skip_special_tokens=True)\n",
"\n",
"instruct_model_outputs = instruct_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200, num_beams=1))\n",
"instruct_model_text_output = tokenizer.decode(instruct_model_outputs[0], skip_special_tokens=True)\n",
"\n",
"peft_model_outputs = peft_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200, num_beams=1))\n",
"peft_model_text_output = tokenizer.decode(peft_model_outputs[0], skip_special_tokens=True)\n",
"\n",
"print(dash_line)\n",
"print(f'BASELINE HUMAN SUMMARY:\\n{human_baseline_summary}')\n",
"print(dash_line)\n",
"print(f'ORIGINAL MODEL:\\n{original_model_text_output}')\n",
"print(dash_line)\n",
"print(f'INSTRUCT MODEL:\\n{instruct_model_text_output}')\n",
"print(dash_line)\n",
"print(f'PEFT MODEL: {peft_model_text_output}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Evaluate the Model Quantitatively"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"dialogues = dataset['test'][0:10]['dialogue']\n",
"human_baseline_summaries = dataset['test'][0:10]['summary']\n",
"\n",
"original_model_summaries = []\n",
"instruct_model_summaries = []\n",
"peft_model_summaries = []\n",
"\n",
"for idx, dialogue in enumerate(tqdm(dialogues)):\n",
" prompt = f\"\"\"\n",
"Summarize the following conversation.\n",
"\n",
"{dialogue}\n",
"\n",
"Summary: \"\"\"\n",
" \n",
" input_ids = tokenizer(prompt, return_tensors=\"pt\").input_ids\n",
"\n",
" human_baseline_text_output = human_baseline_summaries[idx]\n",
" \n",
" original_model_outputs = original_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200))\n",
" original_model_text_output = tokenizer.decode(original_model_outputs[0], skip_special_tokens=True)\n",
"\n",
" instruct_model_outputs = instruct_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200))\n",
" instruct_model_text_output = tokenizer.decode(instruct_model_outputs[0], skip_special_tokens=True)\n",
"\n",
" peft_model_outputs = peft_model.generate(input_ids=input_ids, generation_config=GenerationConfig(max_new_tokens=200))\n",
" peft_model_text_output = tokenizer.decode(peft_model_outputs[0], skip_special_tokens=True)\n",
"\n",
" original_model_summaries.append(original_model_text_output)\n",
" instruct_model_summaries.append(instruct_model_text_output)\n",
" peft_model_summaries.append(peft_model_text_output)\n",
"\n",
"zipped_summaries = list(zip(human_baseline_summaries, original_model_summaries, instruct_model_summaries, peft_model_summaries))\n",
" \n",
"df = pd.DataFrame(zipped_summaries, columns = ['human_baseline_summaries', 'original_model_summaries', 'instruct_model_summaries', 'peft_model_summaries'])\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"rouge = evaluate.load('rouge')\n",
"\n",
"original_model_results = rouge.compute(\n",
" predictions=original_model_summaries,\n",
" references=human_baseline_summaries[0:len(original_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"instruct_model_results = rouge.compute(\n",
" predictions=instruct_model_summaries,\n",
" references=human_baseline_summaries[0:len(instruct_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"peft_model_results = rouge.compute(\n",
" predictions=peft_model_summaries,\n",
" references=human_baseline_summaries[0:len(peft_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"print('ORIGINAL MODEL:')\n",
"print(original_model_results)\n",
"print('INSTRUCT MODEL:')\n",
"print(instruct_model_results)\n",
"print('PEFT MODEL:')\n",
"print(peft_model_results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"human_baseline_summaries = results['human_baseline_summaries'].values\n",
"original_model_summaries = results['original_model_summaries'].values\n",
"instruct_model_summaries = results['instruct_model_summaries'].values\n",
"peft_model_summaries = results['peft_model_summaries'].values\n",
"\n",
"original_model_results = rouge.compute(\n",
" predictions=original_model_summaries,\n",
" references=human_baseline_summaries[0:len(original_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"instruct_model_results = rouge.compute(\n",
" predictions=instruct_model_summaries,\n",
" references=human_baseline_summaries[0:len(instruct_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"peft_model_results = rouge.compute(\n",
" predictions=peft_model_summaries,\n",
" references=human_baseline_summaries[0:len(peft_model_summaries)],\n",
" use_aggregator=True,\n",
" use_stemmer=True,\n",
")\n",
"\n",
"print('ORIGINAL MODEL:')\n",
"print(original_model_results)\n",
"print('INSTRUCT MODEL:')\n",
"print(instruct_model_results)\n",
"print('PEFT MODEL:')\n",
"print(peft_model_results)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"print(\"Absolute percentage improvement of PEFT MODEL over HUMAN BASELINE\")\n",
"\n",
"improvement = (np.array(list(peft_model_results.values())) - np.array(list(original_model_results.values())))\n",
"for key, value in zip(peft_model_results.keys(), improvement):\n",
" print(f'{key}: {value*100:.2f}%')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"print(\"Absolute percentage improvement of PEFT MODEL over INSTRUCT MODEL\")\n",
"\n",
"improvement = (np.array(list(peft_model_results.values())) - np.array(list(instruct_model_results.values())))\n",
"for key, value in zip(peft_model_results.keys(), improvement):\n",
" print(f'{key}: {value*100:.2f}%')"
]
},
{
"cell_type": "markdown",
"metadata": {
"tags": []
},
"source": [
"# Release Resources"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"%%html\n",
"\n",
"
Shutting down your kernel for this notebook to release resources.
\n", "\n", " \n", "" ] } ], "metadata": { "availableInstances": [ { "_defaultOrder": 0, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.t3.medium", "vcpuNum": 2 }, { "_defaultOrder": 1, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.t3.large", "vcpuNum": 2 }, { "_defaultOrder": 2, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.t3.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 3, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.t3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 4, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5.large", "vcpuNum": 2 }, { "_defaultOrder": 5, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 6, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 7, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 8, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 9, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 10, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 11, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 12, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5d.large", "vcpuNum": 2 }, { "_defaultOrder": 13, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5d.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 14, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5d.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 15, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5d.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 16, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5d.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 17, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5d.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 18, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5d.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 19, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 20, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": true, "memoryGiB": 0, "name": "ml.geospatial.interactive", "supportedImageNames": [ "sagemaker-geospatial-v1-0" ], "vcpuNum": 0 }, { "_defaultOrder": 21, "_isFastLaunch": true, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.c5.large", "vcpuNum": 2 }, { "_defaultOrder": 22, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.c5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 23, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.c5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 24, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.c5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 25, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 72, "name": "ml.c5.9xlarge", "vcpuNum": 36 }, { "_defaultOrder": 26, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 96, "name": "ml.c5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 27, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 144, "name": "ml.c5.18xlarge", "vcpuNum": 72 }, { "_defaultOrder": 28, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.c5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 29, "_isFastLaunch": true, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g4dn.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 30, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g4dn.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 31, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g4dn.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 32, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g4dn.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 33, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g4dn.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 34, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g4dn.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 35, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 61, "name": "ml.p3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 36, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 244, "name": "ml.p3.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 37, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 488, "name": "ml.p3.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 38, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.p3dn.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 39, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.r5.large", "vcpuNum": 2 }, { "_defaultOrder": 40, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.r5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 41, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.r5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 42, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.r5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 43, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.r5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 44, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.r5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 45, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 512, "name": "ml.r5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 46, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.r5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 47, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 48, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 49, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 50, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 51, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 52, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 53, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.g5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 54, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.g5.48xlarge", "vcpuNum": 192 }, { "_defaultOrder": 55, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 56, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4de.24xlarge", "vcpuNum": 96 } ], "colab": { "name": "Fine-tune a language model", "provenance": [] }, "instance_type": "ml.m5.2xlarge", "kernelspec": { "display_name": "Python 3 (Data Science)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/datascience-1.0" }, "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.7.10" }, "vscode": { "interpreter": { "hash": "aee8b7b246df8f9039afb4144a1f6fd8d2ca17a180786b69acc140d282b71a49" } } }, "nbformat": 4, "nbformat_minor": 4 }