{ "cells": [ { "cell_type": "markdown", "id": "9602a884-85c7-434c-834a-aaa57e5f3ebd", "metadata": { "tags": [] }, "source": [ "# 1. 初始化环境\n", "\n", "初始化环境会做以下几件事情:\n", "\n", "1. 获取当前 region_name/account_id/role 等信息\n", "2. 写一个 get_bucket_and_key 函数用来解析 bucket 和 key" ] }, { "cell_type": "code", "execution_count": null, "id": "025fe198-dfe8-428e-822d-5a395f852e0d", "metadata": {}, "outputs": [], "source": [ "import sagemaker\n", "import json\n", "import io\n", "from PIL import Image\n", "import boto3\n", "\n", "# 获取 Sagemaker 执行的环境,包括它的默认 buck\n", "sagemaker_session = sagemaker.Session()\n", "bucket = sagemaker_session.default_bucket()\n", "role = sagemaker.get_execution_role()\n", "\n", "account_id = boto3.client('sts').get_caller_identity().get('Account')\n", "region_name = boto3.session.Session().region_name\n", "\n", "s3_resource = boto3.resource('s3')\n", "\n", "def get_bucket_and_key(s3uri):\n", " pos = s3uri.find('/', 5)\n", " bucket = s3uri[5 : pos]\n", " key = s3uri[pos + 1 : ]\n", " return bucket, key\n", "\n", "print(\"account_id:\", account_id)\n", "print(\"region_name:\", region_name)" ] }, { "cell_type": "markdown", "id": "cbe620c8-04ba-47f1-8771-930c5d4083a5", "metadata": { "tags": [] }, "source": [ "# 2. 定义模型\n", "\n", "1. 这里的模型指的是 Sagemaker Inference Model,在后面用于创建 Endpoint\n", "2. 这里会实例化一个 model,主要设置了两个参数:\n", " 1. model_data:用于推理的各种 stable diffusion 模型,即之前打包上传的 model.tar.gz 文件(参考 README.md)\n", " 2. image_uri:stable-diffusion-webui 的代码,之前 build push 到 ECR 的用于 Inference 的容器镜像(参考 README.md)\n", "3. 此时只会实例化一个 model,不会在 Sagemaker Inference Model 中创建模型(在 deploy 的时候才会创建)" ] }, { "cell_type": "code", "execution_count": null, "id": "cd4653b5-1b05-4099-bf76-46b725d22583", "metadata": {}, "outputs": [], "source": [ "from sagemaker.model import Model\n", "from sagemaker.predictor import Predictor\n", "\n", "# 模型的环境变量\n", "model_environment = {\n", " 'SAGEMAKER_MODEL_SERVER_TIMEOUT': '1200',\n", " 'ckpt': '/opt/ml/model/Stable-diffusion/YOUR_MODEL.safetensors' # [Need to Define] 默认模型,这里改成你打包的模型里的某个文件名,只需修改模型名称,不需修改路径\n", "}\n", "\n", "# 实例化一个 Sagemaker SDK 的 Model,在后面 deploy\n", "model = Model(\n", " name=\"YOUR_MODEL\", # [Need to Define] 这里改成你想定义的模型名称\n", " model_data=\"s3://YOUR_BUCKET/YOUR_model.tar.gz\", # [Need to Define] 这里改成你上传的 tarball 的 S3 地址\n", " role=sagemaker.get_execution_role(),\n", " image_uri=f'YOUR_ECR_ADDRESS', # [Need to Define] 这里改成你 build push 的 ECR 的镜像地址\n", " env=model_environment,\n", " predictor_cls=Predictor\n", ")" ] }, { "cell_type": "markdown", "id": "7154ee0a-1f91-4ca5-b296-519fbafd150b", "metadata": {}, "source": [ "# 3. 创建部署 Endpoint" ] }, { "cell_type": "markdown", "id": "eedd9e9f-aa14-413a-b5b2-ba3f6c80eee7", "metadata": { "tags": [] }, "source": [ "## 3.1 配置异步推理 Config" ] }, { "cell_type": "code", "execution_count": null, "id": "a37d428a-6ff7-40b5-aaf7-c058cbb5acba", "metadata": {}, "outputs": [], "source": [ "from sagemaker.async_inference import AsyncInferenceConfig # 用于定义异步推理配置\n", "outputs = \"s3://YOUR_BUCKET/outputs/\" # [Need to Define] 这里改成异步推理结果存放的 S3 地址 \n", "async_config = AsyncInferenceConfig(output_path=outputs)\n", "\n", "# AsyncInferenceConfig 还可以配置最大并发调用(max_concurrent_invocations_per_instance)以及使用 SNS 进行推理完成的通知,详细可参考 https://sagemaker.readthedocs.io/en/stable/overview.html" ] }, { "cell_type": "markdown", "id": "f23f12cb-293a-4e46-95ab-c8a74aaf14a5", "metadata": {}, "source": [ "## 3.2 部署异步推理节点" ] }, { "cell_type": "code", "execution_count": null, "id": "ef8991de-7ddb-4c0e-aea5-2c19503c8317", "metadata": {}, "outputs": [], "source": [ "# 部署 Sagemaker Inference Endpoint\n", "predictor = model.deploy(\n", " endpoint_name=f\"YOUR_ENDPOINT_NAME\", # [Need to Define] endpoint_name 改成你的名称\n", " instance_type='ml.g5.2xlarge', # [Need to Define] Sagemaker Inference Endpoint 的机型,初次使用可选 ml.g5.2xlarge,后续根据需求可变更\n", " initial_instance_count=1, # [Need to Define] Sagemaker Inference Endpoint 机器数量,初次使用推荐为 1,后续可配置 autoscaling\n", " async_inference_config=async_config\n", ")\n", "\n", "# 执行会有一段时间,此时可在 Sagemaker 的页面查看 Inference --> Endpoints 查看部署进度\n", "# 也可以点开 Endpoints 的日志确认部署正常\n", "# 部署正常完成后,predictor 将会是一个 AsyncPredictor 对象" ] }, { "cell_type": "markdown", "id": "47a22820-ff12-44fe-920a-ed65b6f48f6c", "metadata": { "tags": [] }, "source": [ "## 3.3 异步推理节点部署完成\n", "\n", "上面代码 model.deploy 的 predictor 结果是一个 AsyncPredictor 对象,可以使用 predict_async 方法进行异步推理" ] }, { "cell_type": "markdown", "id": "303a3d2c-df1a-4ae8-b9b4-1c375585b90a", "metadata": {}, "source": [ "# 4. 测试 Endpoint" ] }, { "cell_type": "markdown", "id": "df446ffb-76e7-4e17-a8ad-f7c07e593365", "metadata": { "tags": [] }, "source": [ "## 4.1 使用标准的 stable-diffusion-webui api 调用 Sagemaker Inference Endpoint 进行测试" ] }, { "cell_type": "code", "execution_count": null, "id": "11cd6f5c-9520-4740-bd40-8d157dd754a1", "metadata": {}, "outputs": [], "source": [ "from sagemaker.serializers import JSONSerializer\n", "from sagemaker.deserializers import JSONDeserializer\n", "\n", "predictor.serializer = JSONSerializer()\n", "predictor.deserializer = JSONDeserializer()\n", "\n", "# inputs 是调用的 payload,和开源 stable-diffusion-webui 一致\n", "inputs = {\n", " 'task': 'text-to-image', \n", " 'model': 'rpg.safetensors',\n", " 'txt2img_payload': {\n", " 'enable_hr': False, \n", " 'denoising_strength': 0.7, \n", " 'firstphase_width': 0, \n", " 'firstphase_height': 0, \n", " 'prompt': 'beautiful (swedish:1.3) , Full body armor made of demon (demon armor:1.3), 1 man, (insanely detailed:1.5), light particle, (mist on the floor:1.3), ((solo)), (highest quality, Alessandro Casagrande, Greg Rutkowski, Sally Mann, concept art, 4k), (colorful), (high sharpness), ((detailed pupils)), red eyes, ((painting:1.1)), (digital painting:1.1), detailed face and eyes,Masterpiece, best quality, highly detailed photo:1, 8k, detailed face,photorealistic, dark and gloomy, fog, thunder background, By jeremy mann, by sandra chevrier, by maciej kuciara,((male demon)), sharp, ((perfect body)), realistic, real shadow, 3d, ((squatting warrior)), ((dark and gloomy castle background:1.3)), thunder sky, thunder, (by Michelangelo), king pose:1,1, side view:1,1', \n", " 'negative_prompt': '(bad art, low detail, pencil drawing:1.6), (plain background, grainy, low quality, mutated hands and fingers:1.5), (watermark, thin lines:1.3), (deformed, signature:1.2), (big nipples, blurry, ugly, bad anatomy, extra limbs, undersaturated, low resolution), disfigured, deformations, out of frame, amputee, bad proportions, extra limb, missing limbs, distortion, floating limbs, out of frame, poorly drawn face, poorly drawn hands, text, malformed, error, missing fingers, cropped, jpeg artifacts, teeth, unsharp', \n", " 'styles': ['None', 'None'], \n", " 'seed': -1.0, \n", " 'subseed': -1.0, \n", " 'subseed_strength': 0, \n", " 'seed_resize_from_h': 0, \n", " 'seed_resize_from_w': 0, \n", " 'sampler_index': 'DPM++ 2S a Karras', \n", " 'batch_size': 1, \n", " 'n_iter': 1, \n", " 'steps': 35, \n", " 'cfg_scale': 7, \n", " 'width': 512, \n", " 'height': 512, \n", " 'restore_faces': True, \n", " 'tiling': False, \n", " 'eta': 1, \n", " 's_churn': 0, \n", " 's_tmax': None, \n", " 's_tmin': 0, \n", " 's_noise': 1, \n", " 'override_settings': {}, \n", " 'script_args': [0, False, False, False, \"\", 1, \"\", 0, \"\", True, False, False]}\n", "}\n", "\n", "# 调用 Sagemaker Inference Endpoint 异步推理\n", "prediction = predictor.predict_async(inputs)\n", "\n", "from sagemaker.async_inference.waiter_config import WaiterConfig\n", "print(f\"Response output path: {prediction.output_path}\") # 获取异步推理结果存放的 S3 地址\n", "print(\"Start Polling to get response:\") # 开始轮询是否推理完成有结果了\n", "\n", "import time\n", "\n", "start = time.time()\n", "\n", "config = WaiterConfig(\n", " max_attempts=100, # 重试次数\n", " delay=10 # 两次重试之间时间间隔\n", " )\n", "\n", "prediction.get_result(config)\n", "\n", "print(f\"Time taken: {time.time() - start}s\") # 推理花费时间\n", "print(\"Inference finished\") # 推理完成已有结果" ] }, { "cell_type": "markdown", "id": "851cb14f-ab83-4e3c-afd7-0e1c2464b01e", "metadata": { "tags": [] }, "source": [ "## 4.2 展示推理结果的图片" ] }, { "cell_type": "code", "execution_count": null, "id": "378f5128-0d1e-4440-81d9-0f88b552fc71", "metadata": {}, "outputs": [], "source": [ "import traceback\n", "from PIL import Image\n", "import base64\n", "from datetime import datetime\n", "\n", "try:\n", " bucket, key = get_bucket_and_key(prediction.output_path) # 获取异步推理结果\n", " obj = s3_resource.Object(bucket, key)\n", " body = obj.get()['Body'].read().decode('utf-8') \n", " # 异步推理结果是一个 json 文件,其中 images 字段是一个 list,表示所有图片\n", " # images 中的每个 item 都是一张图片,用 base64 编码\n", " for image in json.loads(body)['images']:\n", " image = Image.open(io.BytesIO(base64.b64decode(image)))\n", " display(image) # 用 Notebook 原生功能展示图片\n", "except Exception as e:\n", " traceback.print_exc()\n", " print(e)" ] }, { "cell_type": "markdown", "id": "84e94a6f-1434-4f5d-8a89-d68d3df3beb2", "metadata": {}, "source": [ "# 至此,Sagemaker Inference Endpoint 部署过程已全部完成,后续的更新和删除参考下面代码\n" ] }, { "cell_type": "markdown", "id": "b1238090-c0e7-42e4-b1d8-239a08f57c60", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "id": "dca5637e-1da9-4616-84f9-35ef467cf552", "metadata": { "tags": [] }, "source": [ "# 5. 使用已有的 Inference Endpoint 进行异步推理" ] }, { "cell_type": "markdown", "id": "ed7f870d-12ca-47f8-ae50-10539a761e0c", "metadata": { "tags": [] }, "source": [ "## 5.1 使用 Sagemaker SDK 进行推理\n", "\n", "使用 Sagemaker SDK 进行推理比较直观:\n", "1. 实例化一个 AsyncPredictor 对象\n", "2. 调用 AsyncPredictor 的 predict_async 方法进行异步推理\n", "3. 注意,在调用 predict_async 的时候需要指定一个 S3 地址作为 inputs payload 存放的地址" ] }, { "cell_type": "code", "execution_count": null, "id": "d733e636-a766-4c30-b773-a7e10a30aa53", "metadata": {}, "outputs": [], "source": [ "from sagemaker.predictor_async import AsyncPredictor\n", "\n", "# 实例化一个 AsyncPredictor 对象\n", "async_predictor = AsyncPredictor(Predictor(endpoint_name=\"YOUR_ENDPOINT\")) # [Need to Define] endpoint_name 改成你创建的名称\n", "\n", "#=============== 以下代码全部拷贝自 4.1 & 4.2 章节 ===============#\n", "\n", "async_predictor.serializer = JSONSerializer()\n", "async_predictor.deserializer = JSONDeserializer()\n", "\n", "# inputs 是调用的 payload,和开源 stable-diffusion-webui 一致\n", "inputs = {\n", " 'task': 'text-to-image', \n", " 'model': 'rpg.safetensors',\n", " 'txt2img_payload': {\n", " 'enable_hr': False, \n", " 'denoising_strength': 0.7, \n", " 'firstphase_width': 0, \n", " 'firstphase_height': 0, \n", " 'prompt': 'beautiful (swedish:1.3) , Full body armor made of demon (demon armor:1.3), 1 man, (insanely detailed:1.5), light particle, (mist on the floor:1.3), ((solo)), (highest quality, Alessandro Casagrande, Greg Rutkowski, Sally Mann, concept art, 4k), (colorful), (high sharpness), ((detailed pupils)), red eyes, ((painting:1.1)), (digital painting:1.1), detailed face and eyes,Masterpiece, best quality, highly detailed photo:1, 8k, detailed face,photorealistic, dark and gloomy, fog, thunder background, By jeremy mann, by sandra chevrier, by maciej kuciara,((male demon)), sharp, ((perfect body)), realistic, real shadow, 3d, ((squatting warrior)), ((dark and gloomy castle background:1.3)), thunder sky, thunder, (by Michelangelo), king pose:1,1, side view:1,1', \n", " 'negative_prompt': '(bad art, low detail, pencil drawing:1.6), (plain background, grainy, low quality, mutated hands and fingers:1.5), (watermark, thin lines:1.3), (deformed, signature:1.2), (big nipples, blurry, ugly, bad anatomy, extra limbs, undersaturated, low resolution), disfigured, deformations, out of frame, amputee, bad proportions, extra limb, missing limbs, distortion, floating limbs, out of frame, poorly drawn face, poorly drawn hands, text, malformed, error, missing fingers, cropped, jpeg artifacts, teeth, unsharp', \n", " 'styles': ['None', 'None'], \n", " 'seed': -1.0, \n", " 'subseed': -1.0, \n", " 'subseed_strength': 0, \n", " 'seed_resize_from_h': 0, \n", " 'seed_resize_from_w': 0, \n", " 'sampler_index': 'DPM++ 2S a Karras', \n", " 'batch_size': 1, \n", " 'n_iter': 1, \n", " 'steps': 35, \n", " 'cfg_scale': 7, \n", " 'width': 512, \n", " 'height': 512, \n", " 'restore_faces': True, \n", " 'tiling': False, \n", " 'eta': 1, \n", " 's_churn': 0, \n", " 's_tmax': None, \n", " 's_tmin': 0, \n", " 's_noise': 1, \n", " 'override_settings': {}, \n", " 'script_args': [0, False, False, False, \"\", 1, \"\", 0, \"\", True, False, False]}\n", "}\n", "\n", "# 调用 Sagemaker Inference Endpoint 异步推理\n", "prediction = async_predictor.predict_async(inputs, input_path=\"s3://YOUR_BUCKET/\") # [Need to Define]\n", "\n", "from sagemaker.async_inference.waiter_config import WaiterConfig\n", "print(f\"Response output path: {prediction.output_path}\") # 获取异步推理结果存放的 S3 地址\n", "print(\"Start Polling to get response:\") # 开始轮询是否推理完成有结果了\n", "\n", "import time\n", "\n", "start = time.time()\n", "\n", "config = WaiterConfig(\n", " max_attempts=100, # 重试次数\n", " delay=10 # 两次重试之间时间间隔\n", " )\n", "\n", "prediction.get_result(config)\n", "\n", "print(f\"Time taken: {time.time() - start}s\") # 推理花费时间\n", "print(\"Inference finished\") # 推理完成已有结果\n", "\n", "try:\n", " bucket, key = get_bucket_and_key(prediction.output_path) # 获取异步推理结果\n", " obj = s3_resource.Object(bucket, key)\n", " body = obj.get()['Body'].read().decode('utf-8') \n", " # 异步推理结果是一个 json 文件,其中 images 字段是一个 list,表示所有图片\n", " # images 中的每个 item 都是一张图片,用 base64 编码\n", " for image in json.loads(body)['images']:\n", " image = Image.open(io.BytesIO(base64.b64decode(image)))\n", " display(image) # 用 Notebook 原生功能展示图片\n", "except Exception as e:\n", " traceback.print_exc()\n", " print(e)" ] }, { "cell_type": "markdown", "id": "e87e42ee-4ff1-4f56-91f6-e0f8488d127e", "metadata": {}, "source": [ "## 5.2 用 Boto3 调用异步推理节点\n", "\n", "在进行 stable-diffusion Serverless API 部署的过程中,如果 API 只需要进行异步推理而不涉及 Sagemaker 其他操作,推荐使用 Boto3 来实现:\n", "1. 代码依然很直观\n", "2. 不需要安装 Sagemaker SDK 依赖,通常安装 Sagemaker SDK 依赖后的代码包大小会超过限制" ] }, { "cell_type": "code", "execution_count": null, "id": "4a077829-97e1-4861-904c-09a9edfaac50", "metadata": {}, "outputs": [], "source": [ "# 实例化 sagemaker-runtime\n", "sagemaker_client = boto3.client(\"sagemaker-runtime\")\n", "payload = {\n", " 'task': 'text-to-image', \n", " 'model': 'rpg.safetensors',\n", " 'txt2img_payload': {\n", " 'enable_hr': False, \n", " 'denoising_strength': 0.7, \n", " 'firstphase_width': 0, \n", " 'firstphase_height': 0, \n", " 'prompt': 'beautiful (swedish:1.3) , Full body armor made of demon (demon armor:1.3), 1 man, (insanely detailed:1.5), light particle, (mist on the floor:1.3), ((solo)), (highest quality, Alessandro Casagrande, Greg Rutkowski, Sally Mann, concept art, 4k), (colorful), (high sharpness), ((detailed pupils)), red eyes, ((painting:1.1)), (digital painting:1.1), detailed face and eyes,Masterpiece, best quality, highly detailed photo:1, 8k, detailed face,photorealistic, dark and gloomy, fog, thunder background, By jeremy mann, by sandra chevrier, by maciej kuciara,((male demon)), sharp, ((perfect body)), realistic, real shadow, 3d, ((squatting warrior)), ((dark and gloomy castle background:1.3)), thunder sky, thunder, (by Michelangelo), king pose:1,1, side view:1,1', \n", " 'negative_prompt': '(bad art, low detail, pencil drawing:1.6), (plain background, grainy, low quality, mutated hands and fingers:1.5), (watermark, thin lines:1.3), (deformed, signature:1.2), (big nipples, blurry, ugly, bad anatomy, extra limbs, undersaturated, low resolution), disfigured, deformations, out of frame, amputee, bad proportions, extra limb, missing limbs, distortion, floating limbs, out of frame, poorly drawn face, poorly drawn hands, text, malformed, error, missing fingers, cropped, jpeg artifacts, teeth, unsharp', \n", " 'styles': ['None', 'None'], \n", " 'seed': -1.0, \n", " 'subseed': -1.0, \n", " 'subseed_strength': 0, \n", " 'seed_resize_from_h': 0, \n", " 'seed_resize_from_w': 0, \n", " 'sampler_index': 'DPM++ 2S a Karras', \n", " 'batch_size': 1, \n", " 'n_iter': 1, \n", " 'steps': 35, \n", " 'cfg_scale': 7, \n", " 'width': 512, \n", " 'height': 512, \n", " 'restore_faces': True, \n", " 'tiling': False, \n", " 'eta': 1, \n", " 's_churn': 0, \n", " 's_tmax': None, \n", " 's_tmin': 0, \n", " 's_noise': 1, \n", " 'override_settings': {}, \n", " 'script_args': [0, False, False, False, \"\", 1, \"\", 0, \"\", True, False, False]}\n", "}\n", "\n", "import uuid\n", "inference_id = str(uuid.uuid4()) # 生成一个唯一的 id 来识别调用\n", "\n", "S3_InputBucket = \"YOUR_BUCKET\" # [Need to Define]\n", "# 把上面的 payload 写到 S3 的一个位置,作为参数传给后面的 Sagemaker invoke_endpoint_async 调用方法\n", "s3_resource = boto3.resource(\"s3\")\n", "s3_object = s3_resource.Object(S3_InputBucket, f\"inputs/{inference_id}\")\n", "s3_object.put(Body=bytes(json.dumps(payload).encode('UTF-8')))\n", "input_location = f\"s3://{S3_InputBucket}/inputs/{inference_id}\"\n", "\n", "# 使用 Boto3 调用 Sagemaker 异步推理\n", "response = sagemaker_client.invoke_endpoint_async(\n", " EndpointName=\"YOUR_ENDPOINT\", # [Need to Define]\n", " ContentType='application/json',\n", " Accept=\"application/json;jpeg\",\n", " InputLocation=input_location\n", ")\n", "\n", "# 异步推理结果存放的 S3 地址\n", "output_location = response[\"OutputLocation\"]\n", "print(output_location)" ] }, { "cell_type": "code", "execution_count": null, "id": "d71d86b3-8d7d-458c-89a7-0f5236d60c7b", "metadata": {}, "outputs": [], "source": [ "# 此时异步推理可能还未完成\n", "# 可以重复运行当前 Cell 尝试异步推理结果是否已生成\n", "from botocore.exceptions import ClientError\n", "\n", "bucket, key = get_bucket_and_key(output_location)\n", "try:\n", " bucket, key = get_bucket_and_key(output_location) # 获取异步推理结果\n", " obj = s3_resource.Object(bucket, key)\n", " body = obj.get()['Body'].read().decode('utf-8') \n", " # 异步推理结果是一个 json 文件,其中 images 字段是一个 list,表示所有图片\n", " # images 中的每个 item 都是一张图片,用 base64 编码\n", " for image in json.loads(body)['images']:\n", " image = Image.open(io.BytesIO(base64.b64decode(image)))\n", " display(image) # 用 Notebook 原生功能展示图片\n", "except ClientError as e:\n", " if e.response['Error']['Code'] == 'NoSuchKey':\n", " print(\"Results not generated yet.\")\n", " else:\n", " traceback.print_exc()\n", " print(e)" ] }, { "cell_type": "markdown", "id": "ce56f59a-18eb-4e58-bec4-cbad514774c6", "metadata": {}, "source": [ "# 6. 更新 Inference Endpoint" ] }, { "cell_type": "code", "execution_count": 30, "id": "a716baae-16df-4efb-90a5-556fe8e96b30", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "----------------------!" ] } ], "source": [ "predictor = Predictor(endpoint_name=\"YOUR_ENDPOINT\") # [Need to Define] endpoint_name 改成你创建的名称\n", "predictor.update_endpoint(instance_type=\"ml.g4dn.2xlarge\", initial_instance_count=1)\n", "\n", "# 执行可能需要一些时间,此时可以去 Sagemaker 页面 Inference --> Endpoints 处查看更新进度" ] }, { "cell_type": "markdown", "id": "0ff3a1ef-dd9b-414a-bb23-e8d6e13827a4", "metadata": {}, "source": [ "# 7. 删除 Inference Endpoint" ] }, { "cell_type": "code", "execution_count": 31, "id": "49fba6f7-5c14-4ab0-8ea6-3bbb37e4517a", "metadata": { "tags": [] }, "outputs": [], "source": [ "#model = Model(name=\"YOUR_MODEL\", # [Need to Define] 这里改成你想定义的模型名称)\n", "#model.delete_model()\n", "\n", "predictor = Predictor(endpoint_name=\"YOUR_ENDPOINT\") # [Need to Define] endpoint_name 改成你创建的名称\n", "predictor.delete_endpoint()" ] } ], "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.c5.large", "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" } }, "nbformat": 4, "nbformat_minor": 5 }