{ "cells": [ { "cell_type": "markdown", "id": "c261e5f4-17a8-40da-beb9-599f1717e0fe", "metadata": {}, "source": [ "### 1. 安装HuggingFace 并下载模型到本地" ] }, { "cell_type": "code", "execution_count": null, "id": "02785614-9268-41c8-85a5-d579490edbbf", "metadata": { "tags": [] }, "outputs": [], "source": [ "!pip install huggingface-hub -Uqq\n", "!pip install -U sagemaker" ] }, { "cell_type": "code", "execution_count": null, "id": "9e6bd7ee-16a3-4f5a-8857-8bbba83eb9e7", "metadata": { "tags": [] }, "outputs": [], "source": [ "from huggingface_hub import snapshot_download\n", "from pathlib import Path\n", "\n", "local_model_path = Path(\"./LLM_chatglm2_model\")\n", "local_model_path.mkdir(exist_ok=True)\n", "model_name = \"THUDM/chatglm2-6b\"\n", "commit_hash = \"b259b27320263629b0afccef134c54028233673d\"" ] }, { "cell_type": "code", "execution_count": null, "id": "94e8abc5-a58e-40e2-b1e6-fbf48307c716", "metadata": { "tags": [] }, "outputs": [], "source": [ "snapshot_download(repo_id=model_name, revision=commit_hash, cache_dir=local_model_path)" ] }, { "cell_type": "markdown", "id": "8d666c79-b039-4258-ac3b-46b19e63c3b8", "metadata": {}, "source": [ "### 2. 把模型拷è´åˆ°S3为åŽç»éƒ¨ç½²åšå‡†å¤‡" ] }, { "cell_type": "code", "execution_count": null, "id": "e9431deb-6359-442d-847b-1563f8dd3854", "metadata": { "tags": [] }, "outputs": [], "source": [ "import sagemaker\n", "from sagemaker import image_uris\n", "import boto3\n", "import os\n", "import time\n", "import json\n", "\n", "role = sagemaker.get_execution_role() # execution role for the endpoint\n", "sess = sagemaker.session.Session() # sagemaker session for interacting with different AWS APIs\n", "bucket = sess.default_bucket() # bucket to house artifacts\n", "\n", "region = sess._region_name\n", "account_id = sess.account_id()\n", "\n", "s3_client = boto3.client(\"s3\")\n", "sm_client = boto3.client(\"sagemaker\")\n", "smr_client = boto3.client(\"sagemaker-runtime\")" ] }, { "cell_type": "code", "execution_count": null, "id": "40dd8f16-ae7c-48bf-8e52-1a15425fa74d", "metadata": { "tags": [] }, "outputs": [], "source": [ "s3_model_prefix = \"LLM-RAG/workshop/LLM_chatglm2_model\" # folder where model checkpoint will go\n", "model_snapshot_path = list(local_model_path.glob(\"**/snapshots/*\"))[0]\n", "s3_code_prefix = \"LLM-RAG/workshop/LLM_chatglm2_deploy_code\"\n", "print(f\"s3_code_prefix: {s3_code_prefix}\")\n", "print(f\"model_snapshot_path: {model_snapshot_path}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "067292c9-c066-4649-a61f-b460a24da584", "metadata": { "tags": [] }, "outputs": [], "source": [ "!aws s3 cp --recursive {model_snapshot_path} s3://{bucket}/{s3_model_prefix}" ] }, { "cell_type": "markdown", "id": "696b70c3-90f1-4175-95bf-568bafbcd383", "metadata": {}, "source": [ "### 3. 模型部署准备(entrypoint脚本,容器镜åƒï¼ŒæœåŠ¡é…置)" ] }, { "cell_type": "code", "execution_count": null, "id": "6f7c4277-4480-42c6-aee6-1fbcca94eb82", "metadata": { "tags": [] }, "outputs": [], "source": [ "inference_image_uri = (\n", " f\"763104351884.dkr.ecr.{region}.amazonaws.com/djl-inference:0.21.0-deepspeed0.8.3-cu117\"\n", ")\n", "\n", "#ä¸å›½åŒºéœ€è¦æ›¿æ¢ä¸ºä¸‹é¢çš„image_uri\n", "# inference_image_uri = (\n", "# f\"727897471807.dkr.ecr.{region}.amazonaws.com.cn/djl-inference:0.21.0-deepspeed0.8.3-cu117\"\n", "# )\n", "\n", "print(f\"Image going to be used is ---- > {inference_image_uri}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "8d771bdb-11d2-45d2-9bef-face29221838", "metadata": { "tags": [] }, "outputs": [], "source": [ "!mkdir -p LLM_chatglm2_deploy_code" ] }, { "cell_type": "code", "execution_count": null, "id": "e5348ecb-43df-4094-97d8-a6723004862a", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%writefile LLM_chatglm2_deploy_code/model.py\n", "from djl_python import Input, Output\n", "import torch\n", "import logging\n", "import math\n", "import os\n", "\n", "from transformers import pipeline, AutoModel, AutoTokenizer\n", "\n", "def load_model(properties):\n", " tensor_parallel = properties[\"tensor_parallel_degree\"]\n", " model_location = properties['model_dir']\n", " if \"model_id\" in properties:\n", " model_location = properties['model_id']\n", " logging.info(f\"Loading model in {model_location}\")\n", " \n", " tokenizer = AutoTokenizer.from_pretrained(model_location, trust_remote_code=True)\n", " \n", " model = AutoModel.from_pretrained(model_location, trust_remote_code=True).half().cuda()\n", " \n", " # model.requires_grad_(False)\n", " # model.eval()\n", " \n", " return model, tokenizer\n", "\n", "\n", "model = None\n", "tokenizer = None\n", "generator = None\n", "\n", "\n", "def handle(inputs: Input):\n", " global model, tokenizer\n", " if not model:\n", " model, tokenizer = load_model(inputs.get_properties())\n", "\n", " if inputs.is_empty():\n", " return None\n", " data = inputs.get_as_json()\n", " \n", " input_sentences = data[\"inputs\"]\n", " params = data[\"parameters\"]\n", " history = data[\"history\"]\n", " \n", " # chat(tokenizer, query: str, history: List[Tuple[str, str]] = None, \n", " # max_length: int = 2048, num_beams=1, do_sample=True, top_p=0.7, \n", " # temperature=0.95, logits_processor=None, **kwargs)\n", " response, history = model.chat(tokenizer, input_sentences, history=history, **params)\n", " \n", " result = {\"outputs\": response, \"history\" : history}\n", " return Output().add_as_json(result)" ] }, { "cell_type": "code", "execution_count": null, "id": "68348a83-627b-4924-a216-c2946441659b", "metadata": { "tags": [] }, "outputs": [], "source": [ "print(f\"option.s3url ==> s3://{bucket}/{s3_model_prefix}/\")" ] }, { "cell_type": "markdown", "id": "a06d1e60-3914-4059-a08f-05ac26761165", "metadata": {}, "source": [ "#### Note: option.s3url 需è¦æŒ‰ç…§è‡ªå·±çš„è´¦å·è¿›è¡Œä¿®æ”¹, å¯ä»¥æ‹·è´ä¸Šä¸€ä¸ªcell的输出" ] }, { "cell_type": "code", "execution_count": null, "id": "8996fe44-8e70-468b-abc1-38187cb33f4f", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%writefile LLM_chatglm2_deploy_code/serving.properties\n", "engine=Python\n", "option.tensor_parallel_degree=1\n", "option.s3url = s3://sagemaker-us-west-2-106839800180/LLM-RAG/workshop/LLM_chatglm2_model/" ] }, { "cell_type": "markdown", "id": "feef22a2-27b9-4018-a46b-6a99b532512f", "metadata": {}, "source": [ "#### 注æ„: 必须把transformerså‡çº§åˆ°4.27.1以上,å¦åˆ™ä¼šå‡ºçŽ° [Issue344](https://github.com/THUDM/ChatGLM-6B/issues/344)\n", "\n", "如果是ä¸å›½åŒºå»ºè®®æ·»åŠ 国内的pipé•œåƒ,如下代ç 所示\n", "```\n", "%%writefile LLM_chatglm_deploy_code/requirements.txt\n", "-i https://pypi.tuna.tsinghua.edu.cn/simple\n", "transformers==4.28.1\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "7b7e76c6-6dbc-47fc-9f47-4765c526ab76", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%writefile LLM_chatglm2_deploy_code/requirements.txt\n", "transformers==4.28.1" ] }, { "cell_type": "code", "execution_count": null, "id": "0ae6734a-aacd-410d-818d-0a962697c3c4", "metadata": { "tags": [] }, "outputs": [], "source": [ "!rm model.tar.gz\n", "!cd LLM_chatglm2_deploy_code && rm -rf \".ipynb_checkpoints\"\n", "!tar czvf model.tar.gz LLM_chatglm2_deploy_code" ] }, { "cell_type": "code", "execution_count": null, "id": "0f77dc76-6d8c-4665-ba88-f03e887c136c", "metadata": { "tags": [] }, "outputs": [], "source": [ "s3_code_artifact = sess.upload_data(\"model.tar.gz\", bucket, s3_code_prefix)\n", "print(f\"S3 Code or Model tar ball uploaded to --- > {s3_code_artifact}\")" ] }, { "cell_type": "markdown", "id": "a5853daa-b8a3-4485-8c0a-64bf83e93a18", "metadata": {}, "source": [ "### 4. 创建模型 & 创建endpoint" ] }, { "cell_type": "code", "execution_count": null, "id": "ef974ca1-9638-45a8-9145-ea9d03b2b072", "metadata": { "tags": [] }, "outputs": [], "source": [ "from sagemaker.utils import name_from_base\n", "import boto3\n", "\n", "model_name = name_from_base(f\"chatglm2\") #Note: Need to specify model_name\n", "print(model_name)\n", "print(f\"Image going to be used is ---- > {inference_image_uri}\")\n", "\n", "create_model_response = sm_client.create_model(\n", " ModelName=model_name,\n", " ExecutionRoleArn=role,\n", " PrimaryContainer={\n", " \"Image\": inference_image_uri,\n", " \"ModelDataUrl\": s3_code_artifact\n", " },\n", " \n", ")\n", "model_arn = create_model_response[\"ModelArn\"]\n", "\n", "print(f\"Created Model: {model_arn}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "233bb3a4-d737-41ad-8fcc-7082c6278e8c", "metadata": { "tags": [] }, "outputs": [], "source": [ "endpoint_config_name = f\"{model_name}-config\"\n", "endpoint_name = f\"{model_name}-endpoint\"\n", "\n", "#Note: ml.g4dn.2xlarge 也å¯ä»¥é€‰æ‹©\n", "endpoint_config_response = sm_client.create_endpoint_config(\n", " EndpointConfigName=endpoint_config_name,\n", " ProductionVariants=[\n", " {\n", " \"VariantName\": \"variant1\",\n", " \"ModelName\": model_name,\n", " \"InstanceType\": \"ml.g5.2xlarge\",\n", " \"InitialInstanceCount\": 1,\n", " # \"VolumeSizeInGB\" : 400,\n", " # \"ModelDataDownloadTimeoutInSeconds\": 2400,\n", " \"ContainerStartupHealthCheckTimeoutInSeconds\": 15*60,\n", " },\n", " ],\n", ")\n", "endpoint_config_response" ] }, { "cell_type": "code", "execution_count": null, "id": "734a39b0-473e-4421-94c8-74d2b4105038", "metadata": { "tags": [] }, "outputs": [], "source": [ "create_endpoint_response = sm_client.create_endpoint(\n", " EndpointName=f\"{endpoint_name}\", EndpointConfigName=endpoint_config_name\n", ")\n", "print(f\"Created Endpoint: {create_endpoint_response['EndpointArn']}\")" ] }, { "cell_type": "markdown", "id": "1262e826-a810-401d-a5a9-f62febb24e5f", "metadata": {}, "source": [ "#### æŒç»æ£€æµ‹æ¨¡åž‹éƒ¨ç½²è¿›åº¦" ] }, { "cell_type": "code", "execution_count": null, "id": "08969928-6b9e-4d9c-a033-a31f5f77bdfb", "metadata": { "tags": [] }, "outputs": [], "source": [ "import time\n", "\n", "resp = sm_client.describe_endpoint(EndpointName=endpoint_name)\n", "status = resp[\"EndpointStatus\"]\n", "print(\"Status: \" + status)\n", "\n", "while status == \"Creating\":\n", " time.sleep(60)\n", " resp = sm_client.describe_endpoint(EndpointName=endpoint_name)\n", " status = resp[\"EndpointStatus\"]\n", " print(\"Status: \" + status)\n", "\n", "print(\"Arn: \" + resp[\"EndpointArn\"])\n", "print(\"Status: \" + status)" ] }, { "cell_type": "markdown", "id": "d985b427-3959-46f7-9a50-5a2b45e2d513", "metadata": {}, "source": [ "### 5. 模型测试" ] }, { "cell_type": "code", "execution_count": null, "id": "e56bfdaa-3469-4784-aa8a-e32177cde3f2", "metadata": { "tags": [] }, "outputs": [], "source": [ "%%time\n", "import json\n", "import boto3\n", "\n", "smr_client = boto3.client(\"sagemaker-runtime\")\n", "\n", "parameters = {\n", " \"max_length\": 2048,\n", " \"temperature\": 0.01,\n", " \"num_beams\": 1, # >1å¯èƒ½ä¼šæŠ¥é”™ï¼Œ\"probability tensor contains either `inf`, `nan` or element < 0\"ï¼› å³ä½¿remove_invalid_values=True也ä¸èƒ½è§£å†³\n", " \"do_sample\": False,\n", " \"top_p\": 0.7,\n", " \"logits_processor\" : None,\n", " # \"remove_invalid_values\" : True\n", "}" ] }, { "cell_type": "code", "execution_count": null, "id": "bd86caf8-01e9-41eb-9199-478ba471a02b", "metadata": { "tags": [] }, "outputs": [], "source": [ "prompts1 = \"\"\"ä½ æ˜¯æŠ€æœ¯é¢†åŸŸçš„æ™ºèƒ½é—®ç”机器人AIBotï¼Œè¯·ä¸¥æ ¼æ ¹æ®å括å·ä¸çš„资料æå–相关信æ¯ï¼Œå›žç”用户的å„ç§é—®é¢˜\n", "```\n", "作业调度工具:Crontabã€Airflowã€TaskCTLã€Moiaã€Oozie\\n\\n(2).ETLæµç¨‹çš„设计\\n\\nETL是将数æ®ä»Žæºç«¯ç»è¿‡æŠ½å–(extract)ã€è½¬æ¢ï¼ˆtransform)ã€åŠ 载(load)至目的端的一个数æ®æµåŠ¨è¿‡ç¨‹ï¼›å¯¹äºŽæ•°æ®ä»“库的建设,ETL是其ä¸ä¸€ä¸ªæ¯”较\\n\\né‡è¦çš„çŽ¯èŠ‚ï¼Œé€šå¸¸ä¼šæ ¹æ®ä»¥ä¸‹æ¥éª¤æ¥å®ŒæˆETL的设计:\\n\\n1.业务场景的分æž\\n\\n2.æºæ•°æ®çš„抽å–ç–ç•¥åŠæ•°æ®çš„转æ¢è§„则\\n\\n3.æ•°æ®æµç¨‹çš„控制\\n\\n4.æ•°æ®è´¨é‡æ ¡éªŒå’ŒETL作业监控\\n\\n(3).æ•°æ®æ¨¡åž‹çš„设计\\n\\næ•°æ®æ¨¡åž‹æ˜¯æŒ‡ä½¿ç”¨ä½¿ç”¨å®žä½“ã€å±žæ€§åŠå…¶å…³ç³»å¯¹ä¼ä¸šè¿è¥å’Œé€»è¾‘规则进行统一的定义ã€ç¼–ç 和命åï¼›å¯ä»¥é€šè¿‡å¯¹å®žä½“和实体之间关系的定义和æ述,æ¥è¡¨è¾¾å…·ä½“业务之间的关系;数æ®ä»“库模型是数æ®æ¨¡åž‹ä¸é’ˆå¯¹ç‰¹å®šçš„æ•°æ®ä»“库应用系统的一ç§ç‰¹å®šçš„æ•°æ®æ¨¡åž‹ã€‚\\n\\n1.æ•°æ®ä»“库数æ®æ¨¡åž‹çš„作用:\\n\\n11_文档资料\\n\\n12_版本上线\\n\\n13_æ•°æ®èµ„产\\n\\n14_æœåŠ¡ç»´æŠ¤\\n\\n15_项目\\n\\n16_AI业务\\n\\n17_测试相关\\n\\n18_问题跟踪\\n\\nE编辑\\n\\nW关注\\n\\nS分享\\n\\n\\n\\n工具\\n\\n技术ä¸å¿ƒ\\n\\næ•°æ®æ™ºèƒ½éƒ¨\\n\\næ•°æ®æ™ºèƒ½éƒ¨ 主页\\n\\n10_å‚考资料\\n\\n浅谈数æ®ä»“库体系\\n\\n转至元数æ®ç»“å°¾\\n\\n\\n\\n\\n\\nCreated and last modified by 龙佟佟 on å一月 15, 2018\\n\\n转至元数æ®èµ·å§‹\\n\\næ•°æ®ä»“库(Data Warehouse) 是一个é¢å‘主题的(Subject-Oriented) ã€é›†æˆçš„( Integrate ) ã€ç›¸å¯¹ç¨³å®šçš„(Non-Volatile ) ã€åæ˜ åŽ†å²å˜åŒ–( Time-Variant) çš„æ•°æ®é›†åˆç”¨äºŽæ”¯æŒç®¡ç†å†³ç–。\\n\\n一ã€æ•°æ®ä»“库设计方法论\\n\\n2.ETL任务调度信æ¯ã€è¾“入输出:由于数æ®ä¸å¿ƒçš„作业都是采用crontab工具调度kettle作业,但任务调度信æ¯ä¸å¥½èŽ·å–,目å‰é‡‡ç”¨è§£æžkettle日志的方å¼æ¥èŽ·å–跑批任务的调度信æ¯ä¸”ä¿¡æ¯å˜å‚¨åœ¨mysqlæ•°æ®åº“çš„t99_sys_etl_job_information表ä¸ï¼›åŽç»ETL作业è¿ç§»åˆ°airflow上时任务调度信æ¯å¯ä»¥ç›´æŽ¥åœ¨airflow的元数æ®åº“ä¸èŽ·å–(å¯è§†åŒ–展示 Neo4j)。\\n\\n3.表ä¾èµ–æ˜ å°„å…³ç³» :目å‰é‡‡ç”¨äººå·¥ç»´æŠ¤çš„æ–¹å¼å¹¶å˜å‚¨åˆ°mysqlæ•°æ®åº“çš„t99_sys_etl_table_base_info表ä¸ï¼›åŽç»å°†å®Œå–„相关信æ¯ï¼ˆè¡¨æ•°æ®å¤§å°ï¼Œæ•°æ®çƒåº¦ï¼Œæ›´æ–°é¢‘率ç‰ï¼‰ã€‚\\n\\n4.æ•°æ®ä»“库的模型定义:数æ®ä¸å¿ƒçš„æ•°æ®æ¨¡åž‹ä¸å¤šï¼Œç›®å‰ä¹Ÿåªæ˜¯é‡‡ç”¨äººå·¥æ‰‹åŠ¨ç»´æŠ¤çš„æ–¹å¼æ¥ç®¡ç†çš„;由于模型都是通过SQLçš„æ–¹å¼è¿›è¡Œæ•°æ®é€»è¾‘åŠ å·¥çš„ï¼ŒåŽç»å¯ä»¥é‡‡ç”¨\\n\\n作业调度工具:Crontabã€Airflowã€TaskCTLã€Moiaã€Oozie\\n\\n(2).ETLæµç¨‹çš„设计\\n\\nETL是将数æ®ä»Žæºç«¯ç»è¿‡æŠ½å–(extract)ã€è½¬æ¢ï¼ˆtransform)ã€åŠ 载(load)至目的端的一个数æ®æµåŠ¨è¿‡ç¨‹ï¼›å¯¹äºŽæ•°æ®ä»“库的建设,ETL是其ä¸ä¸€ä¸ªæ¯”较\\n\\né‡è¦çš„çŽ¯èŠ‚ï¼Œé€šå¸¸ä¼šæ ¹æ®ä»¥ä¸‹æ¥éª¤æ¥å®ŒæˆETL的设计:\\n\\n1.业务场景的分æž\\n\\n2.æºæ•°æ®çš„抽å–ç–ç•¥åŠæ•°æ®çš„转æ¢è§„则\\n\\n3.æ•°æ®æµç¨‹çš„控制\\n\\n4.æ•°æ®è´¨é‡æ ¡éªŒå’ŒETL作业监控\\n\\n(3).æ•°æ®æ¨¡åž‹çš„设计\\n\\næ•°æ®æ¨¡åž‹æ˜¯æŒ‡ä½¿ç”¨ä½¿ç”¨å®žä½“ã€å±žæ€§åŠå…¶å…³ç³»å¯¹ä¼ä¸šè¿è¥å’Œé€»è¾‘规则进行统一的定义ã€ç¼–ç 和命åï¼›å¯ä»¥é€šè¿‡å¯¹å®žä½“和实体之间关系的定义和æ述,æ¥è¡¨è¾¾å…·ä½“业务之间的关系;数æ®ä»“库模型是数æ®æ¨¡åž‹ä¸é’ˆå¯¹ç‰¹å®šçš„æ•°æ®ä»“库应用系统的一ç§ç‰¹å®šçš„æ•°æ®æ¨¡åž‹ã€‚\\n\\n1.æ•°æ®ä»“库数æ®æ¨¡åž‹çš„作用:\n", "```\n", "用户: æ•°æ®ä»“库构建有哪些作业调度工具?\n", "AIBot:\"\"\"\n", "response_model = smr_client.invoke_endpoint(\n", " EndpointName=endpoint_name,\n", " Body=json.dumps(\n", " {\n", " \"inputs\": prompts1,\n", " \"parameters\": parameters,\n", " \"history\" : []\n", " }\n", " ),\n", " ContentType=\"application/json\",\n", " )\n", "\n", "response_model['Body'].read().decode('utf8')" ] }, { "cell_type": "code", "execution_count": null, "id": "a6afe140-25a8-4c7f-a797-1f8427348d04", "metadata": { "tags": [] }, "outputs": [], "source": [ "prompt=\"\"\"ä½ æ˜¯æŠ€æœ¯é¢†åŸŸçš„æ™ºèƒ½é—®ç”机器人AIBotï¼Œè¯·ä¸¥æ ¼æ ¹æ®å括å·ä¸çš„资料æå–相关信æ¯ï¼Œå›žç”用户的å„ç§é—®é¢˜\n", "```\n", "\\n11_文档资料\\n\\n12_版本上线\\n\\n13_æ•°æ®èµ„产\\n\\n14_æœåŠ¡ç»´æŠ¤\\n\\n15_项目\\n\\n16_AI业务\\n\\n17_测试相关\\n\\n18_问题跟踪\\n\\nE编辑\\n\\nW关注\\n\\nS分享\\n\\n\\n\\n工具\\n\\n技术ä¸å¿ƒ\\n\\næ•°æ®æ™ºèƒ½éƒ¨\\n\\næ•°æ®æ™ºèƒ½éƒ¨ 主页\\n\\n10_å‚考资料\\n\\n浅谈数æ®ä»“库体系\\n\\n转至元数æ®ç»“å°¾\\n\\n\\n\\n\\n\\nCreated and last modified by 龙佟佟 on å一月 15, 2018\\n\\n转至元数æ®èµ·å§‹\\n\\næ•°æ®ä»“库(Data Warehouse) 是一个é¢å‘主题的(Subject-Oriented) ã€é›†æˆçš„( Integrate ) ã€ç›¸å¯¹ç¨³å®šçš„(Non-Volatile ) ã€åæ˜ åŽ†å²å˜åŒ–( Time-Variant) çš„æ•°æ®é›†åˆç”¨äºŽæ”¯æŒç®¡ç†å†³ç–。\\n\\n一ã€æ•°æ®ä»“库设计方法论\\n\\n作业调度工具:Crontabã€Airflowã€TaskCTLã€Moiaã€Oozie\\n\\n(2).ETLæµç¨‹çš„设计\\n\\nETL是将数æ®ä»Žæºç«¯ç»è¿‡æŠ½å–(extract)ã€è½¬æ¢ï¼ˆtransform)ã€åŠ 载(load)至目的端的一个数æ®æµåŠ¨è¿‡ç¨‹ï¼›å¯¹äºŽæ•°æ®ä»“库的建设,ETL是其ä¸ä¸€ä¸ªæ¯”较\\n\\né‡è¦çš„çŽ¯èŠ‚ï¼Œé€šå¸¸ä¼šæ ¹æ®ä»¥ä¸‹æ¥éª¤æ¥å®ŒæˆETL的设计:\\n\\n1.业务场景的分æž\\n\\n2.æºæ•°æ®çš„抽å–ç–ç•¥åŠæ•°æ®çš„转æ¢è§„则\\n\\n3.æ•°æ®æµç¨‹çš„控制\\n\\n4.æ•°æ®è´¨é‡æ ¡éªŒå’ŒETL作业监控\\n\\n(3).æ•°æ®æ¨¡åž‹çš„设计\\n\\næ•°æ®æ¨¡åž‹æ˜¯æŒ‡ä½¿ç”¨ä½¿ç”¨å®žä½“ã€å±žæ€§åŠå…¶å…³ç³»å¯¹ä¼ä¸šè¿è¥å’Œé€»è¾‘规则进行统一的定义ã€ç¼–ç 和命åï¼›å¯ä»¥é€šè¿‡å¯¹å®žä½“和实体之间关系的定义和æ述,æ¥è¡¨è¾¾å…·ä½“业务之间的关系;数æ®ä»“库模型是数æ®æ¨¡åž‹ä¸é’ˆå¯¹ç‰¹å®šçš„æ•°æ®ä»“库应用系统的一ç§ç‰¹å®šçš„æ•°æ®æ¨¡åž‹ã€‚\\n\\n1.æ•°æ®ä»“库数æ®æ¨¡åž‹çš„作用:\\n\\næ¯ç§å®žçŽ°æ–¹æ³•éƒ½æœ‰åˆ©å¼Šï¼Œé€šå¸¸æƒ…况是两ç§çš„组åˆï¼›å› 为数æ®ä»“库在开始构建时一般是用自底å‘上的方法进行的。当在使用阶段性数æ®ä»“库项目模型æ¥æž„建业务范围架构ä¸çš„一系列数æ®é›†å¸‚时,å¯ä»¥ä¸€ä¸ª 接一个地集æˆä¸åŒä¸šåŠ¡ä¸»é¢˜é¢†åŸŸä¸çš„æ•°æ®é›†å¸‚,从而形æˆè®¾è®¡è‰¯å¥½çš„业务数æ®ä»“库体系结构。\\n\\n二ã€æ•°æ®ä»“库的æ建(ä¼ ç»Ÿåž‹æ•°ä»“)\\n\\næ•°æ®ä»“库是一个过程而ä¸æ˜¯ä¸€ä¸ªé¡¹ç›®ï¼Œä¸€èˆ¬æƒ…况下å¯ä»¥æŒ‰ç…§ä»¥ä¸‹å››ä¸ªæ¥éª¤åŽ»æ建一套数æ®ä»“库;\\n\\n需求/现状 --> 架构 --> 实现 --> 测试/å‘布\\n\\n1.需求\\n\\n在æ建数仓å‰éƒ½ä¼šæœ‰å‰æœŸçš„éœ€æ±‚è°ƒç ”å’Œåˆ†æžå‡†å¤‡å·¥ä½œï¼Œå¹¶ä»Žå„个部门的角度定义计划和需求;其ä¸éœ€æ±‚å¯ä»¥å¤§è‡´åˆ†ä¸ºä»¥ä¸‹ä¸‰ç±»ï¼š\\n\\n(1)业务需求:一般指数æ®ä»“库最终用户的信æ¯éœ€æ±‚ï¼›\\n\\n(2)åˆè§„需求:一般是ä¼ä¸šä¸ŠæŠ¥çš„æ•°æ®éœ€æ±‚ï¼›\\n\\n(3)ETL需求:指数仓建设过程ä¸çš„æ•°æ®éœ€æ±‚,如数æ®è´¨é‡è¯„估(å¯ä»¥æ›´å¥½çš„了解数æ®å†…容ã€ç»“构和质é‡ï¼‰ã€‚\\n\\n2.架构\\n\\n(1)当å‰æž¶æž„\\n\\næ•°æ®ä»“库通常采用分层体系架构,一般简å•çš„æ•°æ®ä»“库会分为三层,贴æºå±‚ ,历å²å˜å‚¨å±‚,æ•°æ®æ¨¡åž‹å±‚:\\n\\n<1>è´´æºå±‚:把æºåº“ä¸çš„æ•°æ®åŒæ¥åˆ°æ•°æ®ä»“ä¸æ¥ï¼Œä¸€èˆ¬éƒ½ä¼šä¸Žæºä½“系数æ®ä¿æŒä¸€è‡´ï¼ˆä¸€æ–¹é¢èƒ½å¤Ÿä¿è¯æˆ‘们数æ®ä»“库的数æ®æ¥æºæ˜¯çœŸå®žå˜åœ¨çš„,å¦ä¸€æ–¹é¢åœ¨å‡ºäº†é—®é¢˜æ–¹ä¾¿è¿›è¡Œæ ¸å¯¹)。\\n\\n对于贴æºå±‚抽å–æºç³»ç»Ÿçš„æ•°æ®ï¼Œä¸€èˆ¬æœ‰ä¸¤ç§æ–¹å¼ï¼š1.å…¨é‡æŠ½å– 2.增é‡æŠ½å–\\n\\n<2>历å²å±‚:åŒæ¥è´´æºå±‚æ•°æ®å¹¶ä¿å˜åŽ†å²å˜åŒ–çš„æ•°æ®;该层通常都会采用FS-LDM主题域模型æ¥å¯¹è¡¨è¿›è¡Œåˆ’分。\\n\\n对于历å²å±‚æ¥è¯´ï¼Œä¸€èˆ¬æœ‰ä¸‰ç§å˜å‚¨æ–¹å¼:1.增é‡åˆ‡ç‰‡ 2.å…¨é‡åˆ‡ç‰‡ 3.增é‡æ‹‰é“¾ (具体表设计需è¦æ ¹æ®ä¸šåŠ¡ï¼Œå˜å‚¨å’Œä½¿ç”¨æ¥ç»¼åˆè¯„估)\n", "```\n", "用户: æ•°æ®ä»“库æå»ºçš„éœ€æ±‚æœ‰å“ªå‡ ç±»\n", "AIBot: \"\"\"\n", "\n", "response_model = smr_client.invoke_endpoint(\n", " EndpointName=endpoint_name,\n", " Body=json.dumps(\n", " {\n", " \"inputs\": prompt,\n", " \"parameters\": parameters,\n", " \"history\" : []\n", " }\n", " ),\n", " ContentType=\"application/json\",\n", " )\n", "\n", "response_model['Body'].read().decode('utf8')" ] }, { "cell_type": "markdown", "id": "21c8b703-e312-4964-8be9-a754468e07cd", "metadata": {}, "source": [ "#### 清除模型Endpointå’Œconfig" ] }, { "cell_type": "code", "execution_count": null, "id": "f70d116f-4fb1-4f04-8732-3d6e4fb520de", "metadata": { "tags": [] }, "outputs": [], "source": [ "!aws sagemaker delete-endpoint --endpoint-name chatglm2-2023-06-27-06-53-41-986-endpoint" ] }, { "cell_type": "code", "execution_count": null, "id": "184e4d1d-3d62-43df-9b17-5d64ece928bd", "metadata": { "tags": [] }, "outputs": [], "source": [ "!aws sagemaker delete-endpoint-config --endpoint-config-name chatglm2-2023-06-27-06-53-41-986-config" ] }, { "cell_type": "code", "execution_count": null, "id": "707e8f09", "metadata": {}, "outputs": [], "source": [ "!aws sagemaker delete-model --model-name chatglm2-2023-06-27-06-53-41-986" ] } ], "metadata": { "availableInstances": [ { "_defaultOrder": 0, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.t3.medium", "vcpuNum": 2 }, { "_defaultOrder": 1, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.t3.large", "vcpuNum": 2 }, { "_defaultOrder": 2, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.t3.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 3, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.t3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 4, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5.large", "vcpuNum": 2 }, { "_defaultOrder": 5, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 6, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 7, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 8, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 9, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 10, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 11, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 12, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5d.large", "vcpuNum": 2 }, { "_defaultOrder": 13, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5d.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 14, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5d.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 15, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5d.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 16, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5d.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 17, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5d.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 18, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5d.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 19, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 20, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": true, "memoryGiB": 0, "name": "ml.geospatial.interactive", "supportedImageNames": [ "sagemaker-geospatial-v1-0" ], "vcpuNum": 0 }, { "_defaultOrder": 21, "_isFastLaunch": true, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.c5.large", "vcpuNum": 2 }, { "_defaultOrder": 22, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.c5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 23, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.c5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 24, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.c5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 25, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 72, "name": "ml.c5.9xlarge", "vcpuNum": 36 }, { "_defaultOrder": 26, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 96, "name": "ml.c5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 27, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 144, "name": "ml.c5.18xlarge", "vcpuNum": 72 }, { "_defaultOrder": 28, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.c5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 29, "_isFastLaunch": true, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g4dn.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 30, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g4dn.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 31, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g4dn.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 32, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g4dn.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 33, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g4dn.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 34, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g4dn.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 35, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 61, "name": "ml.p3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 36, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 244, "name": "ml.p3.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 37, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 488, "name": "ml.p3.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 38, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.p3dn.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 39, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.r5.large", "vcpuNum": 2 }, { "_defaultOrder": 40, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.r5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 41, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.r5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 42, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.r5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 43, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.r5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 44, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.r5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 45, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 512, "name": "ml.r5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 46, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.r5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 47, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 48, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 49, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 50, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 51, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 52, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 53, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.g5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 54, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.g5.48xlarge", "vcpuNum": 192 }, { "_defaultOrder": 55, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 56, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4de.24xlarge", "vcpuNum": 96 } ], "instance_type": "ml.m5.large", "kernelspec": { "display_name": "Python 3 (Data Science 3.0)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-west-2:236514542706:image/sagemaker-data-science-310-v1" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }