{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "b16631a1", "metadata": {}, "source": [ "# Hugging Face and Sagemaker: fine-tuning a seq2seq model\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a08e66aa", "metadata": {}, "source": [ "# Introduction" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b7423739", "metadata": {}, "source": [ "In this script, we use the [Hugging Face transformers](https://huggingface.co/docs/transformers/index) library to fine-tune a seq2seq model, Pegasus, for medical text summarization tasks. This script was developed and tested in SageMaker Studio.\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "11e80c86", "metadata": {}, "source": [ "## Model" ] }, { "attachments": {}, "cell_type": "markdown", "id": "65958c43", "metadata": {}, "source": [ "[Pegasus](https://huggingface.co/docs/transformers/model_doc/pegasus) is a sequence to sequence (encoder-decoder) model that was introduced by Google AI in 2020. It is specifically designed for abstractive text summarization tasks and has shown impressive results in various benchmark datasets." ] }, { "attachments": {}, "cell_type": "markdown", "id": "976aaa34", "metadata": {}, "source": [ "## Setup " ] }, { "attachments": {}, "cell_type": "markdown", "id": "19de5fc9", "metadata": {}, "source": [ "[Pegasus](https://huggingface.co/docs/transformers/model_doc/pegasus) is a transformer-based model that was introduced by Google AI in 2020. It is specifically designed for abstractive text summarization tasks and has shown impressive results in various benchmark datasets." ] }, { "attachments": {}, "cell_type": "markdown", "id": "bcbbfa60", "metadata": {}, "source": [ "## Dependencies" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e85e6feb", "metadata": {}, "source": [ "Install the required dependencies" ] }, { "cell_type": "code", "execution_count": null, "id": "8bd11e42", "metadata": {}, "outputs": [], "source": [ "%pip install transformers --quiet\n", "%pip install accelerate --quiet\n", "%pip install datasets --quiet\n", "%pip install -U sagemaker --quiet\n", "%pip install s3fs --quiet" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f408437c", "metadata": {}, "source": [ "### Variables and hyperparameters" ] }, { "cell_type": "code", "execution_count": 7, "id": "22c4271b", "metadata": {}, "outputs": [], "source": [ "from datetime import datetime\n", "\n", "# vars\n", "model_checkpoint = 'google/pegasus-xsum'\n", "bucket_name = 'YOUR_BUCKET_NAME'\n", "train_data_path = 'data/train.csv'\n", "test_data_path = 'data/test.csv'\n", "artifact_path = 'training_artifacts/%s/' % datetime.today().strftime('%Y-%m-%d') \n", "\n", "# tokenizer\n", "max_target_length = 32\n", "max_input_length = 512\n", "ds_col_full = \"note\"\n", "ds_col_summ = \"summary\"\n", "\n", "# training\n", "batch_size = 1\n", "num_train_epochs = 5\n", "learning_rate = 1e-3\n", "optimizer_name = 'Adam' # must be a supported algorithm from https://pytorch.org/docs/stable/optim.html" ] }, { "cell_type": "code", "execution_count": 8, "id": "f0d6d733", "metadata": {}, "outputs": [], "source": [ "import boto3\n", "s3 = boto3.client('s3')" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4da6ac75", "metadata": {}, "source": [ "### Getting the data" ] }, { "cell_type": "code", "execution_count": null, "id": "61a2b643", "metadata": {}, "outputs": [], "source": [ "from datasets import load_dataset\n", "dataset = load_dataset(\"csv\", data_files={\n", " \"train\": f's3://{bucket_name}/{train_data_path}', \n", " \"validation\": f's3://{bucket_name}/{test_data_path}'\n", "})" ] }, { "attachments": {}, "cell_type": "markdown", "id": "fed13d64", "metadata": {}, "source": [ "### Tokenizer\n", "Prepares data for the model by mapping text into numerical inputs called tokens" ] }, { "cell_type": "code", "execution_count": 10, "id": "50819eb1", "metadata": {}, "outputs": [], "source": [ "from transformers import AutoTokenizer\n", "\n", "tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)\n", "\n", "def preprocess_function(examples):\n", " model_inputs = tokenizer(\n", " examples[ds_col_full],\n", " max_length=max_input_length,\n", " truncation=True,\n", " padding='max_length'\n", " )\n", " labels = tokenizer(\n", " examples[ds_col_summ], max_length=max_target_length, truncation=True, padding='max_length'\n", " )\n", " model_inputs[\"labels\"] = labels[\"input_ids\"]\n", " return model_inputs" ] }, { "cell_type": "code", "execution_count": null, "id": "8d66a827", "metadata": {}, "outputs": [], "source": [ "tokenized_datasets = dataset.map(preprocess_function, batched=True)\n", "\n", "tokenized_datasets.set_format(\"torch\")\n", "\n", "tokenized_datasets = tokenized_datasets.remove_columns(\n", " dataset[\"train\"].column_names\n", ")" ] }, { "cell_type": "code", "execution_count": 12, "id": "f6089084", "metadata": {}, "outputs": [], "source": [ "from transformers import AutoModelForSeq2SeqLM\n", "\n", "model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e68f4516", "metadata": {}, "source": [ "### Data Collator\n", "Pads data during batching" ] }, { "cell_type": "code", "execution_count": 13, "id": "7bb15232", "metadata": {}, "outputs": [], "source": [ "from transformers import DataCollatorForSeq2Seq\n", "\n", "data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "ddfa5186", "metadata": {}, "source": [ "### Optimizer\n", "The optimizer maintains training state and update parameters based on training loss" ] }, { "cell_type": "code", "execution_count": 14, "id": "fd688874", "metadata": {}, "outputs": [], "source": [ "### Hardcode the optimizer, replaced by following code block\n", "\n", "#from torch.optim import Adam\n", "\n", "#optimizer = Adam(model.parameters(), lr=learning_rate)" ] }, { "cell_type": "code", "execution_count": 15, "id": "b11d192b", "metadata": {}, "outputs": [], "source": [ "# Dynamically select optimizer based on input var\n", "\n", "from importlib import import_module\n", "\n", "module = import_module('torch.optim')\n", "opt_fnc = getattr(module, optimizer_name)\n", "\n", "optimizer = opt_fnc(model.parameters(), lr=learning_rate)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "54032d51", "metadata": {}, "source": [ "### Accelerator\n", "The accelerator enables distributed training" ] }, { "cell_type": "code", "execution_count": 16, "id": "5c63b83c", "metadata": {}, "outputs": [], "source": [ "from accelerate import Accelerator\n", "\n", "accelerator = Accelerator()\n", "model, optimizer = accelerator.prepare(\n", " model, optimizer\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "aa9d9f82", "metadata": {}, "source": [ "### Learning rate scheduler\n", "Manages adjustments to the learning rate" ] }, { "cell_type": "code", "execution_count": 19, "id": "e0e6c26b", "metadata": { "tags": [] }, "outputs": [], "source": [ "from transformers import get_scheduler\n", "\n", "num_update_steps_per_epoch = len(tokenized_datasets[\"train\"]) / batch_size\n", "num_training_steps = num_train_epochs * num_update_steps_per_epoch\n", "\n", "lr_scheduler = get_scheduler(\n", " \"linear\",\n", " optimizer=optimizer,\n", " num_warmup_steps=0,\n", " num_training_steps=num_training_steps\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "95b87bcf-cb89-4e5a-bd23-67fae6cdf88f", "metadata": {}, "source": [ "## Training" ] }, { "cell_type": "code", "execution_count": null, "id": "4e317e00-9f89-43d8-abd4-997f48766480", "metadata": { "tags": [] }, "outputs": [], "source": [ "from transformers import Seq2SeqTrainer\n", "from transformers import Seq2SeqTrainingArguments\n", "\n", "training_args = Seq2SeqTrainingArguments(\n", " output_dir=\"output/\",\n", " save_total_limit=1,\n", " num_train_epochs=num_train_epochs,\n", " per_device_train_batch_size=batch_size,\n", " per_device_eval_batch_size=batch_size,\n", " evaluation_strategy=\"epoch\",\n", " logging_dir=\"output/\",\n", " load_best_model_at_end=True,\n", " disable_tqdm=True,\n", " logging_first_step=True,\n", " logging_steps=1,\n", " save_strategy=\"epoch\",\n", " predict_with_generate=True\n", ")\n", "\n", "trainer = Seq2SeqTrainer(\n", " model=model,\n", " tokenizer=tokenizer,\n", " args=training_args,\n", " train_dataset=tokenized_datasets[\"train\"],\n", " eval_dataset=tokenized_datasets[\"validation\"],\n", " data_collator=data_collator,\n", " optimizers=(optimizer, lr_scheduler)\n", ")\n", " \n", "trainer.train()" ] }, { "cell_type": "code", "execution_count": 17, "id": "bdd1778e", "metadata": { "tags": [] }, "outputs": [], "source": [ "unwrapped_model = accelerator.unwrap_model(trainer.model)\n", "unwrapped_model.save_pretrained('model_dir', save_function=accelerator.save)" ] }, { "cell_type": "code", "execution_count": null, "id": "ed04831c", "metadata": { "tags": [] }, "outputs": [], "source": [ "tokenizer.save_pretrained('model_dir')" ] }, { "cell_type": "code", "execution_count": 21, "id": "a5acc717", "metadata": { "tags": [] }, "outputs": [], "source": [ "with open(\"model_dir/special_tokens_map.json\", \"rb\") as f:\n", " s3.upload_fileobj(f, bucket_name, artifact_path + \"special_tokens_map.json\")\n", "with open(\"model_dir/tokenizer_config.json\", \"rb\") as f:\n", " s3.upload_fileobj(f, bucket_name, artifact_path + \"tokenizer_config.json\")\n", "with open(\"model_dir/tokenizer.json\", \"rb\") as f:\n", " s3.upload_fileobj(f, bucket_name, artifact_path + \"tokenizer.json\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c332b0a8", "metadata": {}, "source": [ "### Zip and save the model to S3" ] }, { "cell_type": "code", "execution_count": null, "id": "6971934d", "metadata": { "tags": [] }, "outputs": [], "source": [ "!cd model_dir/ && tar -czvf model.tar.gz *\n", "!mv model_dir/model.tar.gz ./" ] }, { "cell_type": "code", "execution_count": 23, "id": "57fe54ed", "metadata": { "tags": [] }, "outputs": [], "source": [ "with open(\"model.tar.gz\", \"rb\") as f:\n", " s3.upload_fileobj(f, bucket_name, artifact_path + \"model/model.tar.gz\")" ] } ], "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 } ], "instance_type": "ml.m5.2xlarge", "kernelspec": { "display_name": "Python 3 (Base Python 3.0)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-west-2:236514542706:image/sagemaker-base-python-310-v1" }, "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.8" } }, "nbformat": 4, "nbformat_minor": 5 }