{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "01bdf1a6-6d49-4c6a-9fb1-3073b09bd7af", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "## LangChain 経由で Amazon Kendra を使った RAG を実装する\n", "\n", "![architecture.png](./figs/architecture.png)\n", "\n", "こちらのサンプルでは、AWS でのインテリジェントな検索を実現する Amazon Kendra を使った検索拡張生成(RAG, Retrieval Augmented Generation)の実現方法を解説します。 \n", "\n", "LangChain 経由で SageMaker を使う例は [LangChain 経由で SageMaker でホストした大規模言語モデル (LLM) を使う (Notebook)](./langchain-sagemaker-intro.ipynb) で紹介しているので、SageMaker 上で立ち上げた大規模言語モデル(LLM)の利用方法の詳細についてはこちらを参照してください。 \n", "\n", "別のサンプルと同様に、HuggingFace 上で rinna 社が公開している [rinna/japanese-gpt-neox-3.6b-instruction-ppo](https://huggingface.co/rinna/japanese-gpt-neox-3.6b-instruction-ppo) を使用します。 \n", "\n", "こちらの Notebook は以下の環境で動作確認を行なっています。\n", "\n", "- SageMaker Studio Notebooks\n", " - `ml.t3.medium`: `Data Science 3.0`\n", "- SageMaker Notebooks\n", " - `ml.t3.medium`: `conda_python3`\n", "\n", "[各インスタンスの料金についてはこちら](https://aws.amazon.com/jp/sagemaker/pricing/)をご確認ください。 \n", " \n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "8150d5b7-a862-48c5-ae20-b56dd4738d74", "metadata": {}, "source": [ "## Amazon Kendra とは\n", "\n", "Amazon Kendra は、機械学習を活用したマネージドな検索サービスです。設定手順も簡素化されており誰でも簡単に検索システムを構築可能です。 \n", "\n", "Amazon Kendra では主に以下のタイプの質問および検索をサポートしています。 \n", "- Factoid 型の質問: 「Kendra が一般利用可能になったのはいつですか?」などの誰が、何を、いつ、どこで、といったことを問う質問\n", "- Non-Factoid 型の質問: 「Kendra はどのようなサービスですか?」などの理由や事象の説明に基づく回答を求める質問\n", "- キーワードまたは自然言語による検索: 「Kendra チュートリアル」や「Kendra のチュートリアル」といった検索\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "fae36e72-7d56-4fbf-b512-857007b7ff9c", "metadata": { "tags": [] }, "source": [ "## 前準備\n", "\n", "事前準備として LLM を SageMaker Realtime Endpoint でホストします。 \n", "下記の Notebook を実行することでエンドポイントを立てます。 \n", "`git pull https://github.com/aws-samples/aws-ml-jp.git` などでこのサンプルコードをダウンロードしてきている場合は `tasks/generative-ai/text-to-text/fine-tuning/instruction-tuning/Transformers/Rinna_Neox_Inference_ja.ipynb` の path を参照してください。 \n", "https://github.com/aws-samples/aws-ml-jp/blob/main/tasks/generative-ai/text-to-text/fine-tuning/instruction-tuning/Transformers/Rinna_Neox_Inference_ja.ipynb\n" ] }, { "cell_type": "code", "execution_count": null, "id": "2efee707-0033-46a1-ba4b-80fa85310366", "metadata": { "tags": [] }, "outputs": [], "source": [ "# endpoint_name = <エンドポイント名>\n", "endpoint_name = \"Rinna-Inference\"" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d7a51950-0d54-47e4-a3be-454b02874b33", "metadata": { "tags": [] }, "source": [ "#### Kendra Index の作成\n", "\n", "今回はユーザーからの質問に対して、Kendra からの検索結果を組み合わせる形で LLM に作文してもらいます。 \n", "そのためにはまず Kendra に検索対象となるドキュメントを登録します。今回は下記のブログの手順に従ってインデックスを作成した前提で進めていきます。 \n", "- [Amazon Kendra で簡単に検索システムを作ってみよう ! - 変化を求めるデベロッパーを応援するウェブマガジン | AWS](https://aws.amazon.com/jp/builders-flash/202302/kendra-search-system) \n", "\n", "他にも[AWS ドキュメント (Getting started with the Amazon Kendra console)](https://docs.aws.amazon.com/ja_jp/kendra/latest/dg/gs-console.html)や[Simple Lex Kendra JP (サンプルプロジェクト)](https://github.com/aws-samples/simple-lex-kendra-jp)などが参考になります。 \n", "\n", "作成した Kendra インデックスの ID を下記のパラメータに置き換えます。 \n", "\n", "![kendra-index](./figs/kendra-index.png)" ] }, { "cell_type": "code", "execution_count": null, "id": "cd8dd829-7bf3-41f4-ace2-ccd1fb6a1f1b", "metadata": { "tags": [] }, "outputs": [], "source": [ "kendra_index_id = # ここの値を置き換える" ] }, { "attachments": {}, "cell_type": "markdown", "id": "460a1749-9fbc-409f-a5a9-b29fb22a47c0", "metadata": { "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ "### 必要権限の設定\n", "\n", "今回のサンプルでは Kendra に対しても検索クエリが叩けるような権限を付与する必要があります。 \n", "下記の `` と `` と `` を適宜書き換える形でポリシーを作成し SageMaker Studio もしくは SageMaker Notebook インスタンスの実行ロールにアタッチします。 \n", "\n", "```json\n", "{\n", " \"Version\": \"2012-10-17\",\n", " \"Statement\": [\n", " {\n", " \"Sid\": \"VisualEditor0\",\n", " \"Effect\": \"Allow\",\n", " \"Action\": [\n", " \"kendra:Query\",\n", " \"kendra:Retrieve\"\n", " ],\n", " \"Resource\": \"arn:aws:kendra:::index/\"\n", " }\n", " ]\n", "}\n", "```\n", "\n", "詳しくは[こちらのドキュメント](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-roles.html)を参照してください。" ] }, { "attachments": {}, "cell_type": "markdown", "id": "0efe9ec5-a2ae-4ec3-99e9-f61d2ce2ddcf", "metadata": { "tags": [] }, "source": [ "### 必要モジュールのインストール\n", "\n", "まずは、必要モジュールのインストールをします。" ] }, { "cell_type": "code", "execution_count": null, "id": "6c24d9de-c00e-4c38-82a7-478e82976ea5", "metadata": { "scrolled": true, "tags": [] }, "outputs": [], "source": [ "!pip install 'langchain>=0.0.215'\n", "!pip install -U sagemaker boto3" ] }, { "attachments": {}, "cell_type": "markdown", "id": "14e45929-901c-4685-ab8f-d0b2c738597d", "metadata": {}, "source": [ "#### 必要モジュールのインストール\n", "\n", "今回のサンプルで使用する必要モジュールのインストールをしていきます。 \n", "Kendra の利用には LangChain で提供されている AmazonKendraRetriever を使用します。 " ] }, { "cell_type": "code", "execution_count": null, "id": "b48eeaf7-b8eb-47d3-b9fc-8ee08ed4b48d", "metadata": { "tags": [] }, "outputs": [], "source": [ "import sys\n", "import json\n", "import os\n", "from typing import Dict\n", "\n", "import boto3\n", "from langchain.chains import RetrievalQA\n", "from langchain.prompts import PromptTemplate\n", "from langchain import SagemakerEndpoint\n", "from langchain.llms.sagemaker_endpoint import LLMContentHandler\n", "from langchain.retrievers import AmazonKendraRetriever" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d1aabc88-fb48-4cfc-a68c-73f0cf4c0e08", "metadata": {}, "source": [ "#### Kendra Retriever の作成" ] }, { "cell_type": "code", "execution_count": null, "id": "1722ed92-f431-43bc-9c53-0a6cebe32784", "metadata": { "tags": [] }, "outputs": [], "source": [ "region_name = \"us-east-1\" # 今使用しているリージョンに置き換えてください" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f9730533-b809-4f90-a072-0a526d3d4ca1", "metadata": {}, "source": [ "Kendra Client の設定をします。ここで検索結果のフィルタリングを行う際の一般的な設定も指定します。 \n", "ここでは例として言語コードを日本語である `ja` に指定することで日本語として登録されたデータソースに対してクエリを叩くよう設定しています。" ] }, { "cell_type": "code", "execution_count": null, "id": "6b6152e7-5d51-4153-aa58-b69ab794dd29", "metadata": { "tags": [] }, "outputs": [], "source": [ "kendra_client = boto3.client(\"kendra\", region_name=region_name)\n", "language_code = \"ja\"\n", "retriever = AmazonKendraRetriever(\n", " client=kendra_client,\n", " index_id=kendra_index_id,\n", " attribute_filter={\n", " \"EqualsTo\": {\n", " \"Key\": \"_language_code\",\n", " \"Value\": {\"StringValue\": language_code},\n", " }\n", " }\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "db18ebcc-fca4-4981-8e47-087b45916322", "metadata": {}, "source": [ "retriever.get_relevant_documents を呼び出すと Kendra に対して検索を実施できます。" ] }, { "cell_type": "code", "execution_count": null, "id": "4216b53a-9456-42e7-a6a8-11681ef5d23c", "metadata": { "tags": [] }, "outputs": [], "source": [ "retriever.get_relevant_documents(\"Lambda関数で使用できるメモリの最大値は?\")" ] }, { "attachments": {}, "cell_type": "markdown", "id": "c4a38bd1-89c3-43eb-a953-ac4827f972d4", "metadata": { "tags": [] }, "source": [ "### Kendra を使った Chain を作成する\n", "\n", "ここからは LangChain を使って Kendra からの検索結果を使った応答を SageMaker 上にホストした LLM にやらせてみます。\n", "\n", "SageMaker 周りのコードの詳細ついてはサンプル [LangChain 経由で SageMaker でホストした大規模言語モデル (LLM) を使う](https://github.com/aws-samples/aws-ml-jp/blob/main/tasks/generative-ai/text-to-text/inference/langchain/langchain-sagemaker-intro.ipynb)で解説しているので適宜参照してください。 \n", "\n", "本サンプルでは Kendra に関係するコードの解説を中心的に行います。 \n", "\n", "以下のセルは、Kendra と SageMaker を使って、質問応答(Q&A)システムを構築しています。ここでは、チャット形式の対話を行うために、言語モデルと情報検索モデルを組み合わせた「Retrieval Chain」(情報検索チェーン)を構築します。" ] }, { "cell_type": "code", "execution_count": null, "id": "f7f82c43-d89e-4792-bdec-25ee6e24f3a9", "metadata": { "tags": [] }, "outputs": [], "source": [ "kendra_client = boto3.client(\"kendra\", region_name=region_name)\n", "\n", "\n", "class ContentHandler(LLMContentHandler):\n", " content_type = \"application/json\"\n", " accepts = \"application/json\"\n", "\n", " def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes:\n", " input_str = json.dumps(\n", " {\n", " \"input\": prompt.replace(\"\\n\", \"\"), \n", " \"instruction\": \"\", \n", " **model_kwargs\n", " })\n", " return input_str.encode('utf-8')\n", " \n", " def transform_output(self, output: bytes) -> str:\n", " response_json = json.loads(output.read().decode(\"utf-8\"))\n", " return response_json.replace(\"\", \"\\n\")\n", "\n", "def build_chain(prompt: PromptTemplate) -> RetrievalQA:\n", " \"\"\"Kendra を使った Retrieval Chain の構築\n", " \"\"\"\n", " content_handler = ContentHandler()\n", " llm = SagemakerEndpoint(\n", " endpoint_name=endpoint_name, \n", " region_name=region_name, \n", " model_kwargs={\n", " \"max_new_tokens\": 128,\n", " \"temperature\": 0.7,\n", " \"do_sample\": True,\n", " \"pad_token_id\": 0,\n", " \"bos_token_id\": 2,\n", " \"eos_token_id\": 3, #265, # 「。」の ID に相当。\n", " \"stop_ids\": [50278, 50279, 50277, 1, 0],\n", " },\n", " content_handler=content_handler\n", " )\n", " language_code = \"ja\"\n", " # Amazon Kendra Retriever を設定します\n", " retriever = AmazonKendraRetriever(\n", " client=kendra_client,\n", " index_id=kendra_index_id,\n", " top_k=2,\n", " attribute_filter={\n", " \"EqualsTo\": {\n", " \"Key\": \"_language_code\",\n", " \"Value\": {\"StringValue\": language_code},\n", " }\n", " }\n", " )\n", " chain_type_kwargs = {\n", " \"prompt\": prompt\n", " } \n", " qa = RetrievalQA.from_chain_type(\n", " llm=llm,\n", " chain_type=\"stuff\",\n", " retriever=retriever,\n", " chain_type_kwargs = chain_type_kwargs,\n", " return_source_documents=True,\n", " verbose=True\n", " )\n", " return qa\n", "\n", "\n", "def run_chain(chain, prompt: str):\n", " \"\"\"構築した chain を実行する関数\n", " \"\"\"\n", " return chain(prompt)\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "id": "80c5f82c-30b0-4b25-97e8-b69aade0591d", "metadata": {}, "source": [ "### Chain を呼び出す\n", "\n", "ここから定義した chain を作成して実際に呼び出してみます。 \n", "\n", "そのために、Kendra からの検索結果を踏まえた上で LLM に要約の指示を出すプロンプトを指定します。 \n", "(より良い結果のためにはプロンプトの工夫が重要なので、ぜひご自身で試行錯誤してみてください。)" ] }, { "cell_type": "code", "execution_count": null, "id": "7f6a9a2d-3225-4a5d-9c32-0c3a153fc460", "metadata": { "tags": [] }, "outputs": [], "source": [ "prompt_template =\"\"\"\n", "システム: 以下は、ユーザーとシステムとの会話です。システムは資料から抜粋して質問に答えます。資料にない内容は答えず「わかりません」と答えます。\n", "\n", "{context}\n", "\n", "上記の資料に基づき以下の質問について資料から抜粋して回答してください。資料にない内容は答えず「わかりません」と答えてください。\n", "\n", "ユーザー: {question}\n", "システム:\n", "\"\"\"\n", "prompt = PromptTemplate(\n", " template=prompt_template, input_variables=[\"context\", \"question\"]\n", ")" ] }, { "cell_type": "code", "execution_count": null, "id": "bfff486d-366d-47b9-b9da-50f50e54202d", "metadata": { "tags": [] }, "outputs": [], "source": [ "chat_history=[]\n", "chain = build_chain(prompt)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "eba9948e-a967-4dd3-ab3b-255dd86293ff", "metadata": {}, "source": [ "では実際にクエリを叩いてみましょう" ] }, { "cell_type": "code", "execution_count": null, "id": "be7a80db-2422-4f59-98c7-964c57db5dad", "metadata": { "tags": [] }, "outputs": [], "source": [ "query = \"Lambdaで利用できるメモリの最大値は?\"\n", "result = run_chain(chain, query)\n", "print(result[\"result\"])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "d3cd9672-babf-4dff-bfbc-4c53256fc984", "metadata": {}, "source": [ "LLM によって要約された結果を確認することができました。" ] }, { "cell_type": "code", "execution_count": null, "id": "7bd26bf5-d69a-43aa-aa4d-f99cf9af44f8", "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 }, { "_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.t3.medium", "kernelspec": { "display_name": "Python 3 (PyTorch 1.13 Python 3.9 CPU Optimized)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-east-1:081325390199:image/pytorch-1.13-cpu-py39" }, "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.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }