{ "cells": [ { "cell_type": "markdown", "id": "3f07cbcc-de13-4889-8c08-662cd12f1f36", "metadata": {}, "source": [ "# RWKV SageMaker LoRA Finetuning\n", "\n", "RWKV を LoRA Finetuning し、SageMaker でデプロイするサンプルコード。\n", "\n", "例として、日本語が 10% 学習に使用されている RWKV Raven 7B を利用します。必要に応じてモデルを変更してご利用ください。" ] }, { "cell_type": "code", "execution_count": null, "id": "c9cfaff7-f9ef-4244-b5e8-0e49581e7c20", "metadata": { "scrolled": true, "tags": [] }, "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", "Fine Tuning 用の日本語データをフォルダに配置してアップロードします。\n", "\n", "ここでは例として [Databricks Dolly 15k](https://github.com/databrickslabs/dolly/tree/master/data) データセットを日本語に翻訳したものを利用します。(License: [Creative Commons Attribution-ShareAlike 3.0 Unported License](https://creativecommons.org/licenses/by-sa/3.0/legalcode))" ] }, { "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/kunishou/databricks-dolly-15k-ja/resolve/main/databricks-dolly-15k-ja.json --create-dirs -o ./data/databricks-dolly-15k-ja.json" ] }, { "cell_type": "code", "execution_count": null, "id": "806fd846-a86c-4bfb-870a-1cbd3503ef61", "metadata": { "tags": [] }, "outputs": [], "source": [ "!head ./data/databricks-dolly-15k-ja.json" ] }, { "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)\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-ja.json')" ] }, { "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-raven\"\n", "model_size = \"3B\"\n", "\n", "# List of models trained on Japanese. Feel free to change here.\n", "if model_size == \"3B\":\n", " base_model_file = \"RWKV-4-Raven-3B-v11-Eng49%25-Chn49%25-Jpn1%25-Other1%25-20230429-ctx4096.pth\"\n", " n_layer = 32\n", " n_embd = 2560\n", "elif model_size == \"7B\":\n", " base_model_file = \"RWKV-4-Raven-7B-v10-Eng89%25-Jpn10%25-Other1%25-20230420-ctx4096.pth\"\n", " n_layer = 32\n", " n_embd = 4096\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", " 'lora': True,\n", " 'lora_r': 8,\n", " 'lora_alpha': 32,\n", " 'lora_dropout': 0.01,\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", " max_wait=86400,\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 = 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 -xvf rwkv.tar.gz -C scripts/model --no-same-owner {target_file}\n", "!cp data/20B_tokenizer.json 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_url\": base_model_url,\n", " \"model_path\": f\"/tmp/{base_model_file}\",\n", " \"tokenizer_path\": \"model/20B_tokenizer.json\", # path relative to model package\n", " \"strategy\": \"cuda bf16\",\n", " \"lora\": \"model/\" + target_file,\n", " \"lora_alpha\": hyperparameters[\"lora_alpha\"]\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\": \"ヴァージン・オーストラリア航空はいつから運航を開始したのですか?\",\n", " \"input\": \"ヴァージン・オーストラリア航空(Virgin Australia Airlines Pty Ltd)の商号で、オーストラリアを拠点とする航空会社です。ヴァージン・グループを使用する航空会社の中で、保有機材数では最大の航空会社である。2000年8月31日にヴァージン・ブルー航空として、2機の航空機で単一路線で運航を開始した[3]。2001年9月のアンセット・オーストラリア航空の破綻後、突然オーストラリア国内市場の大手航空会社としての地位を確立した。その後、ブリスベン、メルボルン、シドニーをハブとして、オーストラリア国内の32都市に直接乗り入れるまでに成長した[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 }