{ "cells": [ { "cell_type": "markdown", "id": "3f07cbcc-de13-4889-8c08-662cd12f1f36", "metadata": {}, "source": [ "# RWKV SageMaker Finetuning\n", "\n", "This is a sample code to finetune and deploy RWKV on SageMaker." ] }, { "cell_type": "code", "execution_count": null, "id": "c9cfaff7-f9ef-4244-b5e8-0e49581e7c20", "metadata": {}, "outputs": [], "source": [ "!pip install transformers" ] }, { "cell_type": "code", "execution_count": null, "id": "8230fde4-8b19-43bf-be9d-23c83a0f556d", "metadata": { "tags": [] }, "outputs": [], "source": [ "import sagemaker, boto3, json, os\n", "import pandas as pd\n", "import numpy as np\n", "from sagemaker import get_execution_role\n", "from sagemaker.pytorch.model import PyTorchModel\n", "from sagemaker.huggingface import HuggingFace\n", "\n", "role = get_execution_role()\n", "region = boto3.Session().region_name\n", "sess = sagemaker.Session()\n", "bucket = sess.default_bucket()\n", "\n", "sagemaker.__version__" ] }, { "cell_type": "markdown", "id": "579df76e-e2f1-45f5-bcd6-fddb5567a682", "metadata": {}, "source": [ "## Download and Tokenize Dataset\n", "\n", "We will use Databricks-dolly-15k as sample dataset to finetune the model. (License: [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/legalcode))\n", "\n", "You may also choose to use custom dataset." ] }, { "cell_type": "code", "execution_count": null, "id": "537e465c-8dae-46bb-8ea3-26e621c5bbc4", "metadata": { "tags": [] }, "outputs": [], "source": [ "# Download Databricks Dolly 15k dataset\n", "!curl -L https://huggingface.co/datasets/databricks/databricks-dolly-15k/resolve/main/databricks-dolly-15k.jsonl --create-dirs -o data/databricks-dolly-15k.jsonl" ] }, { "cell_type": "code", "execution_count": null, "id": "f2861b8a-a1c7-4a95-ab55-beb2a69356b2", "metadata": { "tags": [] }, "outputs": [], "source": [ "!head -n 2 data/databricks-dolly-15k.jsonl" ] }, { "cell_type": "code", "execution_count": null, "id": "9165409e-e395-46e4-945d-0844f76f7af3", "metadata": { "tags": [] }, "outputs": [], "source": [ "# Download Tokenizer\n", "!curl https://raw.githubusercontent.com/BlinkDL/RWKV-LM/main/RWKV-v4/20B_tokenizer.json --create-dirs -o data/20B_tokenizer.json" ] }, { "cell_type": "code", "execution_count": null, "id": "c0ca3a42-73a0-4591-a206-d4419a719373", "metadata": { "tags": [] }, "outputs": [], "source": [ "# Tokenize Input\n", "from transformers import PreTrainedTokenizerFast\n", "\n", "def generate_prompt(instruction, input, output):\n", " if input != \"\":\n", " return f\"\"\"Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n", "# Instruction:\n", "{instruction}\n", "# Input:\n", "{input}\n", "# Response:\n", "{output}\n", "<|endoftext|>\n", "\"\"\"\n", " else:\n", " return f\"\"\"Below is an instruction that describes a task. Write a response that appropriately completes the request.\n", "# Instruction:\n", "{instruction}\n", "# Response:\n", "{output}\n", "<|endoftext|>\n", "\"\"\"\n", "\n", "def tokenize_and_save(input_file):\n", " dataset = pd.read_json(input_file, orient='records', lines=True)\n", " dataset = dataset.rename(columns={\"context\": \"input\", \"response\": \"output\"})\n", " dataset = dataset.to_dict(orient='records')\n", "\n", " output = \"\"\n", " for item in dataset:\n", " if len(item.keys()) > 0:\n", " output += generate_prompt(\n", " item[\"instruction\"].strip(),\n", " item[\"input\"].strip(),\n", " item[\"output\"].strip()\n", " )\n", "\n", " np.set_printoptions(precision=4, suppress=True, linewidth=200)\n", "\n", " tokenizer = PreTrainedTokenizerFast(tokenizer_file='data/20B_tokenizer.json')\n", " output_file = 'data/train.npy'\n", " data_raw = output\n", " data_code = tokenizer.encode(data_raw)\n", " print(f'Tokenized length = {len(data_code)}')\n", "\n", " out = np.array(data_code, dtype='uint16')\n", " np.save(output_file, out, allow_pickle=False)\n", "\n", "tokenize_and_save('data/databricks-dolly-15k.jsonl')" ] }, { "cell_type": "code", "execution_count": null, "id": "b3b306cf-fdaa-421b-89db-78de9c0b139e", "metadata": { "tags": [] }, "outputs": [], "source": [ "input_train = sess.upload_data(\n", " path=\"./data/train.npy\",\n", " key_prefix=\"Dolly\"\n", ")\n", "input_train" ] }, { "cell_type": "markdown", "id": "f63b73ac-e0e9-498d-b002-f3e9b53e2fcf", "metadata": {}, "source": [ "## Prepare Model" ] }, { "cell_type": "code", "execution_count": null, "id": "47778c00-5fd2-4d87-89ef-b9ea4642ec78", "metadata": { "tags": [] }, "outputs": [], "source": [ "base_model_name = \"RWKV-4-Pile-169M\"\n", "\n", "\n", "if base_model_name == \"RWKV-4-Pile-169M\":\n", " base_model_file = \"RWKV-4-Pile-169M-20220807-8023.pth\"\n", " n_layer = 12\n", " n_embd = 768\n", "elif base_model_name == \"RWKV-4-Pile-430M\":\n", " base_model_file = \"RWKV-4-Pile-430M-20220808-8066.pth\"\n", " n_layer = 24\n", " n_embd = 1024\n", "elif base_model_name == \"RWKV-4-Pile-1B5\":\n", " base_model_file = \"RWKV-4-Pile-1B5-20220903-8040.pth\"\n", " n_layer = 24\n", " n_embd = 2048\n", "elif base_model_name == \"RWKV-4-Pile-3B\":\n", " base_model_file = \"RWKV-4-Pile-3B-20221008-8023.pth\"\n", " n_layer = 32\n", " n_embd = 2560\n", "elif base_model_name == \"RWKV-4-Pile-7B\":\n", " base_model_file = \"RWKV-4-Pile-7B-20221115-8047.pth\"\n", " n_layer = 32\n", " n_embd = 4096\n", "elif base_model_name == \"RWKV-4-Pile-14B\":\n", " base_model_file = \"RWKV-4-Pile-14B-20230213-8019.pth\"\n", " n_layer = 40\n", " n_embd = 5120\n", "\n", "base_model_url = f\"https://huggingface.co/BlinkDL/{base_model_name.lower()}/resolve/main/{base_model_file}\"\n", "base_model_path = f\"scripts/code/base_models/{base_model_file}\"" ] }, { "cell_type": "markdown", "id": "00fd9e7c-b7fc-4107-a21d-9d1b3fd23162", "metadata": {}, "source": [ "## Train" ] }, { "cell_type": "code", "execution_count": null, "id": "346d75b0-b761-4b69-b106-bc7d66ddacc4", "metadata": { "tags": [] }, "outputs": [], "source": [ "hyperparameters={\n", " 'load_model': f\"/tmp/{base_model_file}\",\n", " 'model_url': base_model_url,\n", " 'proj_dir': '/opt/ml/model',\n", " 'data_file': '/opt/ml/input/data/train/train.npy',\n", " 'data_type': 'numpy',\n", " 'vocab_size': 50277,\n", " 'ctx_len': 384,\n", " 'epoch_save': 5,\n", " 'epoch_count': 3,\n", " 'max_epochs': 3, # Added to stop training\n", " 'n_layer': n_layer,\n", " 'n_embd': n_embd,\n", " 'epoch_steps': 1000,\n", " 'micro_bsz': 8,\n", " 'accelerator': \"gpu\",\n", " 'devices': 1,\n", " 'precision': 'bf16',\n", " 'strategy': \"deepspeed_stage_2\",\n", " 'enable_progress_bar': False, # Added to Reduce Log\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "35e5e800-0b62-4af7-a69b-c767db354e6d", "metadata": { "scrolled": true, "tags": [] }, "outputs": [], "source": [ "huggingface_estimator = HuggingFace(\n", " base_job_name=\"RWKV\",\n", " role=role,\n", " entry_point='train.py',\n", " source_dir='./scripts/code',\n", " instance_type='ml.g5.2xlarge',\n", " instance_count=1,\n", " volume_size=200,\n", " transformers_version='4.26',\n", " pytorch_version='1.13',\n", " py_version='py39',\n", " # use_spot_instances=True,\n", " hyperparameters=hyperparameters,\n", ")\n", "huggingface_estimator.fit({'train': input_train})" ] }, { "cell_type": "markdown", "id": "523768e4-cde1-4d32-8239-41fb34d25079", "metadata": {}, "source": [ "## Download and Extract Model" ] }, { "cell_type": "code", "execution_count": null, "id": "3596166b-514e-44fb-adbd-050dd26abdfc", "metadata": {}, "outputs": [], "source": [ "import boto3\n", "import sagemaker\n", "\n", "def get_latest_training_job_artifact(base_job_name):\n", " sagemaker_client = boto3.client('sagemaker')\n", " response = sagemaker_client.list_training_jobs(NameContains=base_job_name, SortBy='CreationTime', SortOrder='Descending')\n", " training_job_arn = response['TrainingJobSummaries'][0]['TrainingJobArn']\n", " training_job_description = sagemaker_client.describe_training_job(TrainingJobName=training_job_arn.split('/')[-1])\n", " return training_job_description['ModelArtifacts']['S3ModelArtifacts']\n", "\n", "try:\n", " model_data = huggingface_estimator.model_data\n", "except:\n", " # Retrieve artifact url when kernel is restarted\n", " model_data = get_latest_training_job_artifact('RWKV')\n", " \n", "!aws s3 cp {model_data} rwkv.tar.gz" ] }, { "cell_type": "code", "execution_count": null, "id": "6169defe-d8c0-472d-a8bc-c1b245b13db8", "metadata": { "tags": [] }, "outputs": [], "source": [ "import tarfile\n", "tarf = tarfile.open('rwkv.tar.gz', 'r:gz')\n", "files = tarf.getnames()\n", "files = sorted(tarf.getnames())\n", "target_file = files[-2]\n", "print(files, target_file)" ] }, { "cell_type": "code", "execution_count": null, "id": "c49cbf18-0a74-42a7-bfbd-37188a4f4ef1", "metadata": { "tags": [] }, "outputs": [], "source": [ "!rm -rf scripts/model && mkdir scripts/model\n", "!tar -xf rwkv.tar.gz -C scripts/model --no-same-owner {target_file}\n", "!cp data/20B_tokenizer.json scripts/model\n", "!ls scripts/model" ] }, { "cell_type": "markdown", "id": "69e619a3-b7a6-49e7-8c3b-207aed37e61a", "metadata": {}, "source": [ "## Package and Upload Model" ] }, { "cell_type": "code", "execution_count": null, "id": "00277a09-e838-44d1-88a0-93cd8d5b7fb2", "metadata": { "scrolled": true, "tags": [] }, "outputs": [], "source": [ "%cd scripts\n", "!tar --exclude base_models -czvf ../package.tar.gz *\n", "%cd -" ] }, { "cell_type": "code", "execution_count": null, "id": "76e1da20-e6dc-434b-8f11-a80a33a4daac", "metadata": { "tags": [] }, "outputs": [], "source": [ "model_path = sess.upload_data('package.tar.gz', bucket=bucket, key_prefix=f\"RWKV\")\n", "model_path" ] }, { "cell_type": "markdown", "id": "5cf44a77-115e-4c7c-96d0-1ed4065cf5a9", "metadata": {}, "source": [ "## Deploy Model" ] }, { "cell_type": "code", "execution_count": null, "id": "f333ef49-769a-4200-91f4-1564c9d4ead3", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sagemaker.async_inference import AsyncInferenceConfig\n", "from sagemaker.serializers import JSONSerializer\n", "\n", "endpoint_name = \"RWKV\"\n", "\n", "huggingface_model = PyTorchModel(\n", " model_data=model_path,\n", " framework_version=\"1.13\",\n", " py_version='py39',\n", " role=role,\n", " name=endpoint_name,\n", " env={\n", " \"model_params\": json.dumps({\n", " \"model_path\": \"model/\" + target_file,\n", " \"tokenizer_path\": \"model/20B_tokenizer.json\", # path relative to model package\n", " \"strategy\": \"cuda bf16\",\n", " }),\n", " }\n", ")\n", "\n", "# deploy model to SageMaker Inference\n", "predictor = huggingface_model.deploy(\n", " initial_instance_count=1,\n", " instance_type='ml.g5.2xlarge',\n", " endpoint_name=endpoint_name,\n", " serializer=JSONSerializer(),\n", " async_inference_config=AsyncInferenceConfig()\n", ")" ] }, { "cell_type": "markdown", "id": "e9c99cbe-2ec2-4019-864e-c01f733d2a12", "metadata": {}, "source": [ "## Run Inference" ] }, { "cell_type": "code", "execution_count": null, "id": "fa15a167-9d83-4332-95ce-7564d361b2ee", "metadata": { "tags": [] }, "outputs": [], "source": [ "import sagemaker\n", "from sagemaker.predictor import Predictor\n", "from sagemaker.predictor_async import AsyncPredictor\n", "from sagemaker.serializers import JSONSerializer\n", "from sagemaker.deserializers import NumpyDeserializer, JSONDeserializer\n", "\n", "endpoint_name = \"RWKV\"\n", "\n", "predictor_client = AsyncPredictor(\n", " predictor=Predictor(\n", " endpoint_name=endpoint_name,\n", " sagemaker_session=sagemaker.Session(),\n", " serializer=JSONSerializer(),\n", " deserializer=NumpyDeserializer()\n", " ),\n", " name=endpoint_name\n", ")\n", "data = {\n", " \"instruction\": \"When did Virgin Australia start operating?\",\n", " \"input\": \"Virgin Australia, the trading name of Virgin Australia Airlines Pty Ltd, is an Australian-based airline. It is the largest airline by fleet size to use the Virgin brand. It commenced services on 31 August 2000 as Virgin Blue, with two aircraft on a single route.[3] It suddenly found itself as a major airline in Australia's domestic market after the collapse of Ansett Australia in September 2001. The airline has since grown to directly serve 32 cities in Australia, from hubs in Brisbane, Melbourne and Sydney.[4]\",\n", "}\n", "response = predictor_client.predict(\n", " data=data\n", ")\n", "print(response)" ] }, { "cell_type": "markdown", "id": "ff0ee0ab-e30d-49a7-845b-aa303ada0afa", "metadata": {}, "source": [ "## Delete Endpoint" ] }, { "cell_type": "code", "execution_count": null, "id": "fce6b8bf-4a0a-4305-9e13-a5735fd288f0", "metadata": { "tags": [] }, "outputs": [], "source": [ "predictor.delete_model()\n", "predictor.delete_endpoint()" ] }, { "cell_type": "code", "execution_count": null, "id": "a2c77c9b-3bc8-46c2-9788-c47c6c61ad00", "metadata": {}, "outputs": [], "source": [] } ], "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 } ], "instance_type": "ml.t3.medium", "kernelspec": { "display_name": "Python 3 (Data Science)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-west-2:236514542706: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" } }, "nbformat": 4, "nbformat_minor": 5 }