From 9a40e6e4634658e5439936310fda1d30e1d97093 Mon Sep 17 00:00:00 2001 From: Armando Diaz Date: Mon, 8 Jul 2024 14:05:49 -0400 Subject: [PATCH 1/3] distributed inference deployment on sagemaker --- .../Llama2-TensorRT-LLM-SageMaker.ipynb | 662 +++++++++++++++++ .../Llama2-vLLM-SageMaker.ipynb | 655 +++++++++++++++++ .../Llama3-TensorRT-LLM-SageMaker.ipynb | 628 ++++++++++++++++ .../Llama3-vLLM-SageMaker.ipynb | 689 ++++++++++++++++++ 4 files changed, 2634 insertions(+) create mode 100644 distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb create mode 100644 distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb create mode 100644 distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb create mode 100644 distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb diff --git a/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb b/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb new file mode 100644 index 0000000..1f3b051 --- /dev/null +++ b/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb @@ -0,0 +1,662 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploy Llama 2 on Amazon SageMaker with TensorRT-LLM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "[Llama 2](https://llama.meta.com/llama2/) are pretrained models trained on 2 trillion tokens with a 4k context length. Its fine-tuned chat models have been trained on over 1 million human annotations. Llama 2 has undergone internal and external adversarial testing across fine-tuned models to identify potential toxicity, bias, and other gaps in performance. To learn more about Llama 2 models, click [here](https://llama.meta.com/llama2/).\n", + "\n", + "SageMaker has rolled out [TensorRT-LLM container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) which now provides users with the ability to leverage the managed serving capabilities and help to provide the un-differentiated heavy lifting.\n", + "\n", + "In this notebook, we combine the strengths of two powerful tools: [DJL](https://docs.djl.ai/) (Deep Java Library) for the serving framework and [TensorRT-LLM](https://nvidia.github.io/TensorRT-LLM/) for distributed large language model inference on Nvidia. DJLServing, a high-performance universal model serving solution powered by DJL, handles the overall serving architecture.\n", + "\n", + "In our setup, vLLM handles the core LLM inference tasks, leveraging its optimizations to achieve high performance and low latency. DJLServing manages the broader serving infrastructure, handling incoming requests, load balancing, and coordinating with vLLM for efficient inference.\n", + "\n", + "This combination allows us to deploy the `Llama 2 7B` model across GPUs on the `ml.g5.12xlarge` instance with optimal resource utilization. vLLM's efficiencies in memory management and request handling enable us to serve this large model with improved throughput compared to traditional serving methods. To learn more about DJL, DJLServing, and TensorRT-LLM you can refer to this [blog post](https://aws.amazon.com/blogs/machine-learning/boost-inference-performance-for-llms-with-new-amazon-sagemaker-containers/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "NOTE: Llama models are licensed under a bespoke commercial license that balances open access to the models with responsibility and protections in place to help address potential misuse. Their license allows for broad commercial use, as well as for developers to create and redistribute additional work on top of Llama models. For more details, their licenses can be found at [Meta Llama 2](https://llama.meta.com/license/) and [Meta Llama 3](https://llama.meta.com/llama3/license/).\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Reach out to Mistral to explore Codestral for commercial use cases: [Contact the Mistral team](https://mistral.ai/contact/)\n", + "\n", + "##### More on the Mistral AI Non-Production License: [Mistral AI Non-Production License](https://mistral.ai/news/mistral-ai-non-production-license-mnpl/)\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Create an Amazon SageMaker Notebook Instance - [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)\n", + " - For Notebook Instance type, choose `ml.t3.medium`.\n", + "2. For Select Kernel, choose [conda_python3](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html).\n", + "3. Install the required packages." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "NOTE:\n", + "\n", + "- For Amazon SageMaker Studio, select Kernel \"Python 3 (ipykernel)\".\n", + "\n", + "- For Amazon SageMaker Studio Classic, select Image \"Base Python 3.0\" and Kernel \"Python 3\".\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this notebook you would need to install the following dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install boto3==1.34.132 -qU --force --quiet --no-warn-conflicts\n", + "!pip install sagemaker==2.224.2 -qU --force --quiet --no-warn-conflicts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml\n", + "sagemaker.config INFO - Not applying SDK defaults from location: /home/ec2-user/.config/sagemaker/config.yaml\n" + ] + } + ], + "source": [ + "import boto3\n", + "import json\n", + "import sagemaker" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.224.2\n" + ] + } + ], + "source": [ + "print(sagemaker.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initialize parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker role arn: arn:aws:iam::570598552974:role/txt2sql-SageMakerExecutionRole-PAgMr5TND4x0\n", + "sagemaker session region: us-east-1\n" + ] + } + ], + "source": [ + "# execution role for the endpoint\n", + "role = sagemaker.get_execution_role()\n", + "\n", + "# sagemaker session for interacting with different AWS APIs\n", + "sess = sagemaker.session.Session()\n", + "\n", + "# Region\n", + "region_name = sess._region_name\n", + "\n", + "print(f\"sagemaker role arn: {role}\")\n", + "print(f\"sagemaker session region: {region_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Image URI of the DJL Container" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LMI DLCs offer a low-code interface that simplifies using state-of-the-art inference optimization techniques and hardware. LMI allows you to apply tensor parallelism; the latest efficient attention, batching, quantization, and memory management techniques; token streaming; and much more, by just requiring the model ID and optional model parameters. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See available Large Model Inference DLC's [here](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) and for more details [here](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/lmi/announcements/deepspeed-deprecation.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DCL Image going to be used is ---- > 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.28.0-tensorrtllm0.9.0-cu122\n" + ] + } + ], + "source": [ + "inference_image_uri = sagemaker.image_uris.retrieve(\n", + " framework=\"djl-tensorrtllm\",\n", + " region=region_name,\n", + " version=\"0.28.0\"\n", + ")\n", + "print(f\"DCL Image going to be used is ---- > {inference_image_uri}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Available Environment Variable Configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of settings that we use in this configuration file:\n", + "\n", + "- `HF_MODEL_ID`: The model id of a pretrained model hosted inside a model repository on [huggingface.co](https://huggingface.co/models). The container uses this model id to download the corresponding model repository on huggingface.co. This is an optional setting and is not needed in the scenario where you are brining your own model. If you are getting your own model, you can include the URI of the Amazon S3 bucket that contains the model.\n", + "- `HF_TOKEN`: Some models on the HuggingFace Hub are gated and require permission from the owner to access. To deploy a gated model from the HuggingFace Hub using LMI, you must provide an [Access Token](https://huggingface.co/docs/hub/security-tokens) via this environment variable.\n", + "- `OPTION_ENGINE`: The engine for DJL to use. In this case, we intend to use [MPI](https://docs.djl.ai/docs/serving/serving/docs/lmi/conceptual_guide/lmi_engine.html). MPI is used to operate on single machine multi-gpu or multiple machines multi-gpu use cases.\n", + "- `OPTION_DTYPE`: The data type you plan to cast the model weights to. If not provided, LMI will use fp16.\n", + "- `OPTION_TGI_COMPAT`: To get the same response output as HuggingFace's Text Generation Inference, you can use the env `OPTION_TGI_COMPAT=true`.\n", + "- `OPTION_TASK`: The task used in Hugging Face for different pipelines. Default is text-generation. For further reading on DJL parameters on SageMaker, follow the [link](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/deepspeed_user_guide.html)\n", + "- `OPTION_ROLLING_BATCH`: Enables continuous batching (iteration level batching) with one of the supported backends. Available backends differ by container, see [Inference Library Configurations](https://docs.djl.ai/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#inference-library-configuration) for mappings.\n", + " - In the TensorRT-LLM Container:\n", + " - use `OPTION_ROLLING_BATCH=trtllm` to use TensorRT-LLM (this is the default)\n", + "- `TENSOR_PARALLEL_DEGREE`: Set to the number of GPU devices over which DeepSpeed needs to partition the model. This parameter also controls the no of workers per model which will be started up when DJL serving runs. Setting this to `max`, which will shard the model across all available GPUs. As an example if we have a 8 GPU machine and we are creating 8 partitions then we will have 1 worker per model to serve the requests.\n", + "- `OPTION_MAX_INPUT_LEN`: Maximum input token size you expect the model to have per request. This is a compilation parameter that set to the model for Just-in-Time compilation. If you set this value too low, the model will unable to consume the long input. LMI also validates this at runtime for each request.\n", + "- `OPTION_MAX_OUTPUT_LEN`: Maximum output token size you expect the model to have per request. This is a compilation parameter that set to the model for Just-in-Time compilation. If you set this value too low, the model will unable to produce tokens beyond the value you set.\n", + "- `OPTION_TRUST_REMOTE_CODE`: If the model artifacts contain custom modeling code, you should set this to true after validating the custom code is not malicious. If you are using a HuggingFace Hub model id, you should also specify HF_REVISION to ensure you are using artifacts and code that you have validated.\n", + "\n", + "For more details on the configuration options and an exhaustive list, you can refer the [documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-large-model-configuration.html) and [LMI Starting Guide](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/trt_llm_user_guide.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create SageMaker endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Hugging Face Model Id\n", + "model_id = \"meta-llama/Llama-2-7b-chat-hf\"\n", + "\n", + "# Environment variables\n", + "hf_token = \"\" # Use for gated models\n", + "rolling_batch = \"trtllm\"\n", + "max_output_len = 4096\n", + "\n", + "env = {}\n", + "env['HF_MODEL_ID'] = model_id\n", + "env['OPTION_ROLLING_BATCH'] = rolling_batch\n", + "env['OPTION_DTYPE'] = \"fp16\"\n", + "env['OPTION_TGI_COMPAT'] = \"true\"\n", + "env['OPTION_ENGINE'] = \"MPI\"\n", + "env['OPTION_TASK'] = \"text-generation\"\n", + "env['TENSOR_PARALLEL_DEGREE'] = \"max\"\n", + "env['OPTION_MAX_INPUT_LEN'] = json.dumps(max_output_len - 1)\n", + "env['OPTION_MAX_OUTPUT_LEN'] = json.dumps(max_output_len)\n", + "env['OPTION_DEVICE_MAP'] = \"auto\"\n", + "# env['OPTION_TRUST_REMOTE_CODE'] = \"true\"\n", + "\n", + "# Include HF token for gated models\n", + "if hf_token != \"\":\n", + " env['HF_TOKEN'] = hf_token\n", + "else:\n", + " print(\"Llama models are gated, please add your HF token before you continue.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "instance_type: ml.g5.12xlarge\n", + "model_id: meta-llama/Llama-2-7b-chat-hf\n", + "endpoint_name: llama2-7b-chat-tensorrt-llm-2024-07-06-11-32-41-078\n" + ] + } + ], + "source": [ + "# SageMaker Instance Type\n", + "instance_type = \"ml.g5.12xlarge\"\n", + "\n", + "# Endpoint name\n", + "endpoint_name_prefix = \"llama2-7b-chat-tensorrt-llm\"\n", + "endpoint_name = sagemaker.utils.name_from_base(endpoint_name_prefix)\n", + "\n", + "print(f\"instance_type: {instance_type}\")\n", + "print(f\"model_id: {model_id}\")\n", + "print(f\"endpoint_name: {endpoint_name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Deploy model to an endpoint\n", + "model = sagemaker.Model(\n", + " image_uri=inference_image_uri,\n", + " role=role,\n", + " env=env\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------!" + ] + } + ], + "source": [ + "model.deploy(\n", + " initial_instance_count=1,\n", + " instance_type=instance_type,\n", + " endpoint_name=endpoint_name,\n", + " container_startup_health_check_timeout=900,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run inference and chat with the model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Supported Inference Parameters\n", + "\n", + "---\n", + "This model supports the following inference payload parameters:\n", + "\n", + "* **max_new_tokens:** Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer.\n", + "* **temperature:** Controls the randomness in the output. Higher temperature results in output sequence with low-probability words and lower temperature results in output sequence with high-probability words. If `temperature` -> 0, it results in greedy decoding. If specified, it must be a positive float.\n", + "* **top_p:** In each step of text generation, sample from the smallest possible set of words with cumulative probability `top_p`. If specified, it must be a float between 0 and 1.\n", + "* **return_full_text:** If True, input text will be part of the output generated text. If specified, it must be boolean. The default value for it is False.\n", + "\n", + "You may specify any subset of the parameters mentioned above while invoking an endpoint. \n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample code generation questions\n", + "\n", + "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", + "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", + "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", + "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", + "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", + "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", + "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using SageMaker SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with the endpoint created in the prior step\n", + "predictor = sagemaker.Predictor(\n", + " endpoint_name=endpoint_name,\n", + " sagemaker_session=sess,\n", + " serializer=sagemaker.serializers.JSONSerializer(),\n", + " deserializer=sagemaker.deserializers.JSONDeserializer(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "01. Define Your Website's Purpose and Goals:\n", + "Determine the purpose and goals of your website, including the message you want to convey, the audience you want to reach, and the actions you want visitors to take.\n", + "\n", + "02. Choose a Domain Name:\n", + "Select a unique and memorable domain name that reflects the content and purpose of your website. This is the address that visitors will use to access your website.\n", + "\n", + "03. Choose a Web Host:\n", + "Find a reliable and affordable web host that meets your needs, including storage space, bandwidth, and technical support.\n", + "\n", + "04. Plan Your Website's Structure:\n", + "Develop a website outline or wireframe that organizes your content into logical sections and subsections. This will help you create a clear and intuitive navigation menu.\n", + "\n", + "05. Create Content:\n", + "Write and gather content for your website, including text, images, videos, and other media. Make sure your content is well-written, informative, and optimized for search engines.\n", + "\n", + "06. Design Your Website:\n", + "Design your website's layout and visual elements, including colors, fonts, and images. Use a design tool or work with a web designer to create a visually appealing and user-friendly website.\n", + "\n", + "07. Add Interactive Elements:\n", + "Incorporate interactive elements such as forms, contact pages, and social media feeds to engage visitors and encourage them to take action.\n", + "\n", + "08. Test and Launch:\n", + "Test your website for functionality, usability, and search engine optimization. Make any necessary revisions and launch your website to the public.\n", + "\n", + "09. Maintain and Update:\n", + "Regularly update your website's content and design to keep visitors engaged and ensure that your website remains relevant and accessible.\n", + "\n", + "10. Monitor and Analyze:\n", + "Use analytics tools to track your website's traffic, engagement, and conversion rates. Monitor your website's performance and make data-driven decisions to improve its effectiveness over time.\n", + "\n", + "By following these 10 simple steps, you can create a professional-looking and effective website that meets your business goals and appeals to your target audience.\n" + ] + } + ], + "source": [ + "prompt = \"\"\"[INST] <>\n", + "{system_prompt}\n", + "<>\n", + "\n", + "{message_prompt} [/INST] \"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"Building a website can be done in 10 simple steps:\"\n", + ")\n", + "\n", + "inputs = {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 512,\n", + " \"do_sample\": False\n", + " }\n", + "}\n", + "response = predictor.predict(inputs)\n", + "print(response[0]['generated_text'].strip().replace('', ''))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using Boto3 SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with boto3 using the endpoint created from prior step\n", + "smr_client = boto3.client(\"sagemaker-runtime\")" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Sure, I'd be happy to help! Here is a basic recipe for homemade mayonnaise:\n", + "\n", + "Ingredients:\n", + "\n", + "* 2 egg yolks\n", + "* 1/2 cup (120 ml) neutral-tasting oil, such as canola or grapeseed\n", + "* 1 tablespoon lemon juice or vinegar\n", + "* Salt and pepper to taste\n", + "\n", + "Instructions:\n", + "\n", + "1. In a small bowl, whisk together the egg yolks and lemon juice or vinegar until well combined.\n", + "2. Slowly pour the oil into the egg yolk mixture, whisking constantly. You can use an electric mixer on low speed or whisk by hand.\n", + "3. Continue whisking until the mixture thickens and emulsifies, which should take about 5-7 minutes. You will know it's ready when the mixture has doubled in volume and is smooth and creamy.\n", + "4. Taste and adjust the seasoning as needed with salt and pepper.\n", + "5. Cover and refrigerate the mayonnaise for at least 30 minutes before using.\n", + "\n", + "That's it! Homemade mayonnaise can be used as a sandwich spread, salad dressing, or dip. Enjoy!\n", + "\n", + "Note: If you want to make a vegan mayonnaise, you can replace the egg yolks with 1/4 cup (60 ml) of mashed avocado or a flax egg (1 tablespoon ground flaxseed + 3 tablespoons water, mixed and allowed to gel for 5 minutes).\n" + ] + } + ], + "source": [ + "prompt = \"\"\"[INST] <>\n", + "{system_prompt}\n", + "<>\n", + "\n", + "{message_prompt} [/INST]\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"\"\"what is the recipe of mayonnaise?\"\"\"\n", + ")\n", + "\n", + "response = smr_client.invoke_endpoint(\n", + " EndpointName=endpoint_name,\n", + " Body=json.dumps(\n", + " {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " },\n", + " }\n", + " ),\n", + " ContentType=\"application/json\",\n", + ")[\"Body\"].read().decode(\"utf8\")\n", + "\n", + "print(json.loads(response)[0]['generated_text'].replace('', ''))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "In this post, we demonstrated how to use SageMaker large model inference containers to host Codestral 22B. We used DeepSpeed’s model parallel techniques with multiple GPUs on a single SageMaker machine learning instance. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean Up" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# Delete the endpoint\n", + "sess.delete_endpoint(endpoint_name)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# In case the end point failed we still want to delete the model\n", + "sess.delete_endpoint_config(endpoint_name)\n", + "model.delete_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conda_python3", + "language": "python", + "name": "conda_python3" + }, + "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.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb b/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb new file mode 100644 index 0000000..f93148e --- /dev/null +++ b/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb @@ -0,0 +1,655 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploy Llama 2 on Amazon SageMaker with vLLM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "[Llama 2](https://llama.meta.com/llama2/) are pretrained models trained on 2 trillion tokens with a 4k context length. Its fine-tuned chat models have been trained on over 1 million human annotations. Llama 2 has undergone internal and external adversarial testing across fine-tuned models to identify potential toxicity, bias, and other gaps in performance. To learn more about Llama 2 models, click [here](https://llama.meta.com/llama2/).\n", + "\n", + "SageMaker has rolled out [vLLM container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) which now provides users with the ability to leverage the managed serving capabilities and help to provide the un-differentiated heavy lifting.\n", + "\n", + "In this notebook, we combine the strengths of two powerful tools: [DJL](https://docs.djl.ai/) (Deep Java Library) for the serving framework and [vLLM](https://docs.vllm.ai/en/stable/) for distributed large language model inference. DJLServing, a high-performance universal model serving solution powered by DJL, handles the overall serving architecture.\n", + "\n", + "In our setup, vLLM handles the core LLM inference tasks, leveraging its optimizations to achieve high performance and low latency. DJLServing manages the broader serving infrastructure, handling incoming requests, load balancing, and coordinating with vLLM for efficient inference.\n", + "\n", + "This combination allows us to deploy the `Llama 2 7B` model across GPUs on the `ml.g5.12xlarge` instance with optimal resource utilization. vLLM's efficiencies in memory management and request handling enable us to serve this large model with improved throughput compared to traditional serving methods. To learn more about DJL, DJLServing, and vLLM you can refer to this [blog post](https://aws.amazon.com/blogs/machine-learning/boost-inference-performance-for-mixtral-and-llama-2-models-with-new-amazon-sagemaker-containers/).\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "NOTE: Llama models are licensed under a bespoke commercial license that balances open access to the models with responsibility and protections in place to help address potential misuse. Their license allows for broad commercial use, as well as for developers to create and redistribute additional work on top of Llama models. For more details, their licenses can be found at [Meta Llama 2](https://llama.meta.com/license/) and [Meta Llama 3](https://llama.meta.com/llama3/license/).\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Create an Amazon SageMaker Notebook Instance - [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)\n", + " - For Notebook Instance type, choose `ml.t3.medium`.\n", + "2. For Select Kernel, choose [conda_python3](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html).\n", + "3. Install the required packages." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "NOTE:\n", + "\n", + "- For Amazon SageMaker Studio, select Kernel \"Python 3 (ipykernel)\".\n", + "\n", + "- For Amazon SageMaker Studio Classic, select Image \"Base Python 3.0\" and Kernel \"Python 3\".\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this notebook you would need to install the following dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install boto3==1.34.132 -qU --force --quiet --no-warn-conflicts\n", + "!pip install sagemaker==2.224.2 -qU --force --quiet --no-warn-conflicts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml\n", + "sagemaker.config INFO - Not applying SDK defaults from location: /home/ec2-user/.config/sagemaker/config.yaml\n" + ] + } + ], + "source": [ + "import boto3\n", + "import json\n", + "import sagemaker" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.224.2\n" + ] + } + ], + "source": [ + "print(sagemaker.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initialize parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker role arn: arn:aws:iam::570598552974:role/txt2sql-SageMakerExecutionRole-PAgMr5TND4x0\n", + "sagemaker session region: us-east-1\n" + ] + } + ], + "source": [ + "# execution role for the endpoint\n", + "role = sagemaker.get_execution_role()\n", + "\n", + "# sagemaker session for interacting with different AWS APIs\n", + "sess = sagemaker.session.Session()\n", + "\n", + "# Region\n", + "region_name = sess._region_name\n", + "\n", + "print(f\"sagemaker role arn: {role}\")\n", + "print(f\"sagemaker session region: {region_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Image URI of the DJL Container" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LMI DLCs offer a low-code interface that simplifies using state-of-the-art inference optimization techniques and hardware. LMI allows you to apply tensor parallelism; the latest efficient attention, batching, quantization, and memory management techniques; token streaming; and much more, by just requiring the model ID and optional model parameters. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See available Large Model Inference DLC's [here](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) and for more details [here](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/lmi/announcements/deepspeed-deprecation.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DCL Image going to be used is ---- > 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.28.0-lmi10.0.0-cu124\n" + ] + } + ], + "source": [ + "inference_image_uri = sagemaker.image_uris.retrieve(\n", + " framework=\"djl-lmi\",\n", + " region=region_name,\n", + " version=\"0.28.0\"\n", + ")\n", + "print(f\"DCL Image going to be used is ---- > {inference_image_uri}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Available Environment Variable Configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of settings that we use in this configuration file:\n", + "\n", + "- `HF_MODEL_ID`: The model id of a pretrained model hosted inside a model repository on [huggingface.co](https://huggingface.co/models). The container uses this model id to download the corresponding model repository on huggingface.co. This is an optional setting and is not needed in the scenario where you are brining your own model. If you are getting your own model, you can include the URI of the Amazon S3 bucket that contains the model.\n", + "- `HF_TOKEN`: Some models on the HuggingFace Hub are gated and require permission from the owner to access. To deploy a gated model from the HuggingFace Hub using LMI, you must provide an [Access Token](https://huggingface.co/docs/hub/security-tokens) via this environment variable.\n", + "- `OPTION_ENGINE`: The engine for DJL to use. In this case, we intend to use [vLLM](https://docs.vllm.ai/en/stable/) and hence set it as **Python**.\n", + "- `OPTION_DTYPE`: The data type you plan to cast the model weights to. If not provided, LMI will use fp16.\n", + "- `OPTION_TGI_COMPAT`: To get the same response output as HuggingFace's Text Generation Inference, you can use the env `OPTION_TGI_COMPAT=true`.\n", + "- `OPTION_TASK`: The task used in Hugging Face for different pipelines. Default is text-generation. For further reading on DJL parameters on SageMaker, follow the [link](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/deepspeed_user_guide.html)\n", + "- `OPTION_ROLLING_BATCH`: Enables continuous batching (iteration level batching) with one of the supported backends. Available backends differ by container, see [Inference Library Configurations](https://docs.djl.ai/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#inference-library-configuration) for mappings.\n", + " - In the LMI Container:\n", + " - to use vLLM, use `OPTION_ROLLING_BATCH=vllm`\n", + " - to use lmi-dist, use `OPTION_ROLLING_BATCH=lmi-dist`\n", + " - to use huggingface accelerate, use `OPTION_ROLLING_BATCH=auto` for text generation models, or option.rolling_batch=disable for non-text generation models.\n", + "- `TENSOR_PARALLEL_DEGREE`: Set to the number of GPU devices over which DeepSpeed needs to partition the model. This parameter also controls the no of workers per model which will be started up when DJL serving runs. Setting this to `max`, which will shard the model across all available GPUs. As an example if we have a 8 GPU machine and we are creating 8 partitions then we will have 1 worker per model to serve the requests.\n", + "- `OPTION_DEVICE_MAP`: The HuggingFace accelerate device_map to use.\n", + "- `OPTION_TRUST_REMOTE_CODE`: If the model artifacts contain custom modeling code, you should set this to true after validating the custom code is not malicious. If you are using a HuggingFace Hub model id, you should also specify HF_REVISION to ensure you are using artifacts and code that you have validated.\n", + "\n", + "For more details on the configuration options and an exhaustive list, you can refer the [documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-large-model-configuration.html) and [LMI Starting Guide](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/starting-guide.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create SageMaker endpoint" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some key differences between the available backends in LMI:\n", + "\n", + "+ **LMI-Distributed Library** – This is the AWS framework to run inference with LLMs, inspired from OSS, to achieve the best possible latency and accuracy on the result. LMI-Dist employs optimized default configurations, such as GPU core counting, to ensure efficient performance and resource utilization.\n", + "+ **LMI vLLM** – This is the AWS backend implementation of the memory-efficient vLLM inference library" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Hugging Face Model Id\n", + "model_id = \"meta-llama/Llama-2-7b-chat-hf\"\n", + "\n", + "# Environment variables\n", + "hf_token = \"\" # Use for gated models\n", + "rolling_batch = \"vllm\" # \"vllm\", \"lmi-dist\"\n", + "\n", + "env = {}\n", + "env['HF_MODEL_ID'] = model_id\n", + "env['OPTION_ROLLING_BATCH'] = rolling_batch\n", + "env['OPTION_DTYPE'] = \"fp16\"\n", + "env['OPTION_TGI_COMPAT'] = \"true\"\n", + "\n", + "if rolling_batch != \"lmi-dist\":\n", + " env['OPTION_ENGINE'] = \"Python\"\n", + " env['OPTION_TASK'] = \"text-generation\"\n", + " env['TENSOR_PARALLEL_DEGREE'] = \"max\"\n", + " env['OPTION_DEVICE_MAP'] = \"auto\"\n", + " # env['OPTION_TRUST_REMOTE_CODE'] = \"true\"\n", + " \n", + "# Include HF token for gated models\n", + "if hf_token != \"\":\n", + " env['HF_TOKEN'] = hf_token\n", + "else:\n", + " print(\"Llama models are gated, please add your HF token before you continue.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "instance_type: ml.g5.12xlarge\n", + "model_id: meta-llama/Llama-2-7b-chat-hf\n", + "endpoint_name: llama2-7b-chat-vllm-2024-07-08-17-27-28-261\n" + ] + } + ], + "source": [ + "# SageMaker Instance Type\n", + "instance_type = \"ml.g5.12xlarge\"\n", + "\n", + "# Endpoint name\n", + "endpoint_name_prefix = \"llama2-7b-chat-vllm\"\n", + "endpoint_name = sagemaker.utils.name_from_base(endpoint_name_prefix)\n", + "\n", + "print(f\"instance_type: {instance_type}\")\n", + "print(f\"model_id: {model_id}\")\n", + "print(f\"endpoint_name: {endpoint_name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Deploy model to an endpoint\n", + "model = sagemaker.Model(\n", + " image_uri=inference_image_uri,\n", + " role=role,\n", + " env=env\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--------------!" + ] + } + ], + "source": [ + "model.deploy(\n", + " initial_instance_count=1,\n", + " instance_type=instance_type,\n", + " endpoint_name=endpoint_name,\n", + " container_startup_health_check_timeout=900,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run inference and chat with the model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Supported Inference Parameters\n", + "\n", + "---\n", + "This model supports the following inference payload parameters:\n", + "\n", + "* **max_new_tokens:** Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer.\n", + "* **temperature:** Controls the randomness in the output. Higher temperature results in output sequence with low-probability words and lower temperature results in output sequence with high-probability words. If `temperature` -> 0, it results in greedy decoding. If specified, it must be a positive float.\n", + "* **top_p:** In each step of text generation, sample from the smallest possible set of words with cumulative probability `top_p`. If specified, it must be a float between 0 and 1.\n", + "* **return_full_text:** If True, input text will be part of the output generated text. If specified, it must be boolean. The default value for it is False.\n", + "\n", + "You may specify any subset of the parameters mentioned above while invoking an endpoint. \n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample code generation questions\n", + "\n", + "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", + "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", + "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", + "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", + "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", + "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", + "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using SageMaker SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with the endpoint created in the prior step\n", + "predictor = sagemaker.Predictor(\n", + " endpoint_name=endpoint_name,\n", + " sagemaker_session=sess,\n", + " serializer=sagemaker.serializers.JSONSerializer(),\n", + " deserializer=sagemaker.deserializers.JSONDeserializer(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "01. Define Your Website's Purpose: Determine the purpose of your website, including the type of content, audience, and goals.\n", + "\n", + "02. Choose a Domain Name: Select a unique and memorable domain name that reflects your website's purpose and is easy to spell and remember.\n", + "\n", + "03. Select a Web Host: Choose a reliable and affordable web host that meets your website's needs, including storage space, bandwidth, and technical support.\n", + "\n", + "04. Plan Your Website's Structure: Create a basic structure for your website, including the main pages and subpages, and organize them in a logical and intuitive manner.\n", + "\n", + "05. Design Your Website: Create a visually appealing design for your website, including the layout, colors, fonts, and images, that reflects your brand and appeals to your target audience.\n", + "\n", + "06. Write and Publish Content: Create high-quality, engaging and informative content for your website, including text, images, videos, and other media, that meets the needs of your target audience.\n", + "\n", + "07. Set Up Navigation and Menus: Create navigation and menus that are easy to use and help visitors find the information they need, including a homepage, about page, contact page, and any other relevant pages.\n", + "\n", + "08. Add Interactive Elements: Incorporate interactive elements such as forms, quizzes, and other interactive features that engage visitors and encourage them to take action.\n", + "\n", + "09. Optimize for Search Engines: Optimize your website for search engines by using keywords, meta tags, and other techniques to improve your website's visibility and ranking in search results.\n", + "\n", + "10. Launch and Maintain Your Website: Launch your website and continue to maintain it by updating content, fixing broken links, and monitoring analytics to ensure it is running smoothly and meeting your goals.\n", + "\n", + "By following these 10 simple steps, you can create a professional-looking and effective website that meets your needs and resonates with your target audience.\n" + ] + } + ], + "source": [ + "prompt = \"\"\"[INST] <>\n", + "{system_prompt}\n", + "<>\n", + "\n", + "{message_prompt} [/INST] \"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"Building a website can be done in 10 simple steps:\"\n", + ")\n", + "\n", + "inputs = {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " }\n", + "}\n", + "response = predictor.predict(inputs)\n", + "print(response[0]['generated_text'].strip())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using Boto3 SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with boto3 using the endpoint created from prior step\n", + "smr_client = boto3.client(\"sagemaker-runtime\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Of course! Mayonnaise is a popular condiment made from a mixture of egg yolks, oil, vinegar or lemon juice, and seasonings. Here's a basic recipe for homemade mayonnaise:\n", + "\n", + "Ingredients:\n", + "\n", + "* 2 egg yolks\n", + "* 1/2 cup (120 ml) neutral-tasting oil, such as canola or grapeseed\n", + "* 1 tablespoon (15 ml) vinegar or lemon juice\n", + "* 1/2 teaspoon (2.5 ml) salt\n", + "* 1/4 teaspoon (1.25 ml) sugar (optional)\n", + "* 1/4 teaspoon (1.25 ml) mustard powder (optional)\n", + "\n", + "Instructions:\n", + "\n", + "1. In a small bowl, whisk together the egg yolks and salt until well combined.\n", + "2. Slowly pour in the oil while continuously whisking the mixture. You can do this by hand with a whisk or use an electric mixer on low speed.\n", + "3. Once you've added about half of the oil, add the vinegar or lemon juice and continue whisking until the mixture thickens and emulsifies. This should take about 5-7 minutes.\n", + "4. Taste and adjust the seasoning as needed. If the mayonnaise is too thick, add a little water. If it's too thin, add more oil.\n", + "5. Cover the bowl with plastic wrap and let the mayonnaise sit at room temperature for at least 30 minutes before using. This will allow the flavors to meld together and the mayonnaise to thicken further.\n", + "\n", + "That's it! You can use this basic recipe as a starting point and adjust the seasonings to suit your taste preferences. Some common variations include adding a little bit of Dijon mustard for a tangier flavor or some chopped fresh herbs for added flavor and color. Enjoy!\n" + ] + } + ], + "source": [ + "prompt = \"\"\"[INST] <>\n", + "{system_prompt}\n", + "<>\n", + "\n", + "{message_prompt} [/INST]\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"\"\"what is the recipe of mayonnaise?\"\"\"\n", + ")\n", + "\n", + "response = smr_client.invoke_endpoint(\n", + " EndpointName=endpoint_name,\n", + " Body=json.dumps(\n", + " {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " },\n", + " }\n", + " ),\n", + " ContentType=\"application/json\",\n", + ")[\"Body\"].read().decode(\"utf8\")\n", + "\n", + "print(json.loads(response)[0]['generated_text'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "In this post, we demonstrated how to use SageMaker large model inference containers to host Codestral 22B. We used DeepSpeed’s model parallel techniques with multiple GPUs on a single SageMaker machine learning instance. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean Up" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Delete the endpoint\n", + "sess.delete_endpoint(endpoint_name)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# In case the end point failed we still want to delete the model\n", + "sess.delete_endpoint_config(endpoint_name)\n", + "model.delete_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conda_python3", + "language": "python", + "name": "conda_python3" + }, + "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.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb b/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb new file mode 100644 index 0000000..8b0c76d --- /dev/null +++ b/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb @@ -0,0 +1,628 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploy Llama 3 on Amazon SageMaker with TensorRT-LLM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "[Llama 3](https://llama.meta.com/llama3/) are pretrained models trained over 15 trillion tokens, – a training dataset 7x larger than that used for Llama 2, with a 8k context length. The models excels at text summarization and accuracy, text classification and nuance, sentiment analysis and nuance reasoning, language modeling, dialogue systems, code generation, and following instructions. To learn more about Llama 3 models, click [here](https://llama.meta.com/llama3/).\n", + "\n", + "SageMaker has rolled out [TensorRT-LLM container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) which now provides users with the ability to leverage the managed serving capabilities and help to provide the un-differentiated heavy lifting.\n", + "\n", + "In this notebook, we combine the strengths of two powerful tools: [DJL](https://docs.djl.ai/) (Deep Java Library) for the serving framework and [TensorRT-LLM](https://nvidia.github.io/TensorRT-LLM/) for distributed large language model inference on Nvidia. DJLServing, a high-performance universal model serving solution powered by DJL, handles the overall serving architecture.\n", + "\n", + "In our setup, vLLM handles the core LLM inference tasks, leveraging its optimizations to achieve high performance and low latency. DJLServing manages the broader serving infrastructure, handling incoming requests, load balancing, and coordinating with vLLM for efficient inference.\n", + "\n", + "This combination allows us to deploy the `Llama 3 8B` model across GPUs on the `ml.g5.12xlarge` instance with optimal resource utilization. vLLM's efficiencies in memory management and request handling enable us to serve this large model with improved throughput compared to traditional serving methods. To learn more about DJL, DJLServing, and TensorRT-LLM you can refer to this [blog post](https://aws.amazon.com/blogs/machine-learning/boost-inference-performance-for-llms-with-new-amazon-sagemaker-containers/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Create an Amazon SageMaker Notebook Instance - [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)\n", + " - For Notebook Instance type, choose `ml.t3.medium`.\n", + "2. For Select Kernel, choose [conda_python3](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html).\n", + "3. Install the required packages." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "NOTE:\n", + "\n", + "- For Amazon SageMaker Studio, select Kernel \"Python 3 (ipykernel)\".\n", + "\n", + "- For Amazon SageMaker Studio Classic, select Image \"Base Python 3.0\" and Kernel \"Python 3\".\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this notebook you would need to install the following dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install boto3==1.34.132 -qU --force --quiet --no-warn-conflicts\n", + "!pip install sagemaker==2.224.2 -qU --force --quiet --no-warn-conflicts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml\n", + "sagemaker.config INFO - Not applying SDK defaults from location: /home/ec2-user/.config/sagemaker/config.yaml\n" + ] + } + ], + "source": [ + "import boto3\n", + "import json\n", + "import sagemaker" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.224.2\n" + ] + } + ], + "source": [ + "print(sagemaker.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initialize parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker role arn: arn:aws:iam::570598552974:role/txt2sql-SageMakerExecutionRole-PAgMr5TND4x0\n", + "sagemaker session region: us-east-1\n" + ] + } + ], + "source": [ + "# execution role for the endpoint\n", + "role = sagemaker.get_execution_role()\n", + "\n", + "# sagemaker session for interacting with different AWS APIs\n", + "sess = sagemaker.session.Session()\n", + "\n", + "# Region\n", + "region_name = sess._region_name\n", + "\n", + "print(f\"sagemaker role arn: {role}\")\n", + "print(f\"sagemaker session region: {region_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Image URI of the DJL Container" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LMI DLCs offer a low-code interface that simplifies using state-of-the-art inference optimization techniques and hardware. LMI allows you to apply tensor parallelism; the latest efficient attention, batching, quantization, and memory management techniques; token streaming; and much more, by just requiring the model ID and optional model parameters. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See available Large Model Inference DLC's [here](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) and for more details [here](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/lmi/announcements/deepspeed-deprecation.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DCL Image going to be used is ---- > 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.28.0-tensorrtllm0.9.0-cu122\n" + ] + } + ], + "source": [ + "inference_image_uri = sagemaker.image_uris.retrieve(\n", + " framework=\"djl-tensorrtllm\",\n", + " region=region_name,\n", + " version=\"0.28.0\"\n", + ")\n", + "print(f\"DCL Image going to be used is ---- > {inference_image_uri}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Available Environment Variable Configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of settings that we use in this configuration file:\n", + "\n", + "- `HF_MODEL_ID`: The model id of a pretrained model hosted inside a model repository on [huggingface.co](https://huggingface.co/models). The container uses this model id to download the corresponding model repository on huggingface.co. This is an optional setting and is not needed in the scenario where you are brining your own model. If you are getting your own model, you can include the URI of the Amazon S3 bucket that contains the model.\n", + "- `HF_TOKEN`: Some models on the HuggingFace Hub are gated and require permission from the owner to access. To deploy a gated model from the HuggingFace Hub using LMI, you must provide an [Access Token](https://huggingface.co/docs/hub/security-tokens) via this environment variable.\n", + "- `OPTION_ENGINE`: The engine for DJL to use. In this case, we intend to use [MPI](https://docs.djl.ai/docs/serving/serving/docs/lmi/conceptual_guide/lmi_engine.html). MPI is used to operate on single machine multi-gpu or multiple machines multi-gpu use cases.\n", + "- `OPTION_DTYPE`: The data type you plan to cast the model weights to. If not provided, LMI will use fp16.\n", + "- `OPTION_TGI_COMPAT`: To get the same response output as HuggingFace's Text Generation Inference, you can use the env `OPTION_TGI_COMPAT=true`.\n", + "- `OPTION_TASK`: The task used in Hugging Face for different pipelines. Default is text-generation. For further reading on DJL parameters on SageMaker, follow the [link](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/deepspeed_user_guide.html)\n", + "- `OPTION_ROLLING_BATCH`: Enables continuous batching (iteration level batching) with one of the supported backends. Available backends differ by container, see [Inference Library Configurations](https://docs.djl.ai/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#inference-library-configuration) for mappings.\n", + " - In the TensorRT-LLM Container:\n", + " - use `OPTION_ROLLING_BATCH=trtllm` to use TensorRT-LLM (this is the default)\n", + "- `TENSOR_PARALLEL_DEGREE`: Set to the number of GPU devices over which DeepSpeed needs to partition the model. This parameter also controls the no of workers per model which will be started up when DJL serving runs. Setting this to `max`, which will shard the model across all available GPUs. As an example if we have a 8 GPU machine and we are creating 8 partitions then we will have 1 worker per model to serve the requests.\n", + "- `OPTION_MAX_INPUT_LEN`: Maximum input token size you expect the model to have per request. This is a compilation parameter that set to the model for Just-in-Time compilation. If you set this value too low, the model will unable to consume the long input. LMI also validates this at runtime for each request.\n", + "- `OPTION_MAX_OUTPUT_LEN`: Maximum output token size you expect the model to have per request. This is a compilation parameter that set to the model for Just-in-Time compilation. If you set this value too low, the model will unable to produce tokens beyond the value you set.\n", + "- `OPTION_TRUST_REMOTE_CODE`: If the model artifacts contain custom modeling code, you should set this to true after validating the custom code is not malicious. If you are using a HuggingFace Hub model id, you should also specify HF_REVISION to ensure you are using artifacts and code that you have validated.\n", + "\n", + "For more details on the configuration options and an exhaustive list, you can refer the [documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-large-model-configuration.html) and [LMI Starting Guide](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/trt_llm_user_guide.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create SageMaker endpoint" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Hugging Face Model Id\n", + "model_id = \"meta-llama/Meta-Llama-3-8B-Instruct\"\n", + "\n", + "# Environment variables\n", + "hf_token = \"\" # Use for gated models\n", + "rolling_batch = \"trtllm\"\n", + "max_output_len = 8192\n", + "\n", + "env = {}\n", + "env['HF_MODEL_ID'] = model_id\n", + "env['OPTION_ROLLING_BATCH'] = rolling_batch\n", + "env['OPTION_DTYPE'] = \"bf16\"\n", + "env['OPTION_TGI_COMPAT'] = \"true\"\n", + "env['OPTION_ENGINE'] = \"MPI\"\n", + "env['OPTION_TASK'] = \"text-generation\"\n", + "env['TENSOR_PARALLEL_DEGREE'] = \"max\"\n", + "env['OPTION_MAX_INPUT_LEN'] = json.dumps(max_output_len - 1)\n", + "env['OPTION_MAX_OUTPUT_LEN'] = json.dumps(max_output_len)\n", + "env['OPTION_DEVICE_MAP'] = \"auto\"\n", + "# env['OPTION_MAX_ROLLING_BATCH'] = \"\"\n", + "# env['OPTION_TRUST_REMOTE_CODE'] = \"true\"\n", + " \n", + "# Include HF token for gated models\n", + "if hf_token != \"\":\n", + " env['HF_TOKEN'] = hf_token\n", + "else:\n", + " print(\"Llama models are gated, please add your HF token before you continue.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "instance_type: ml.g5.12xlarge\n", + "model_id: meta-llama/Meta-Llama-3-8B-Instruct\n", + "endpoint_name: llama3-8b-instruct-tensorrt-llm-2024-07-06-11-33-28-546\n" + ] + } + ], + "source": [ + "# SageMaker Instance Type\n", + "instance_type = \"ml.g5.12xlarge\"\n", + "\n", + "# Endpoint name\n", + "endpoint_name_prefix = \"llama3-8b-instruct-tensorrt-llm\"\n", + "endpoint_name = sagemaker.utils.name_from_base(endpoint_name_prefix)\n", + "\n", + "print(f\"instance_type: {instance_type}\")\n", + "print(f\"model_id: {model_id}\")\n", + "print(f\"endpoint_name: {endpoint_name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Deploy model to an endpoint\n", + "model = sagemaker.Model(\n", + " image_uri=inference_image_uri,\n", + " role=role,\n", + " env=env\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------------!" + ] + } + ], + "source": [ + "model.deploy(\n", + " initial_instance_count=1,\n", + " instance_type=instance_type,\n", + " endpoint_name=endpoint_name,\n", + " container_startup_health_check_timeout=900,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run inference and chat with the model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Supported Inference Parameters\n", + "\n", + "---\n", + "This model supports the following inference payload parameters:\n", + "\n", + "* **max_new_tokens:** Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer.\n", + "* **temperature:** Controls the randomness in the output. Higher temperature results in output sequence with low-probability words and lower temperature results in output sequence with high-probability words. If `temperature` -> 0, it results in greedy decoding. If specified, it must be a positive float.\n", + "* **top_p:** In each step of text generation, sample from the smallest possible set of words with cumulative probability `top_p`. If specified, it must be a float between 0 and 1.\n", + "* **return_full_text:** If True, input text will be part of the output generated text. If specified, it must be boolean. The default value for it is False.\n", + "\n", + "You may specify any subset of the parameters mentioned above while invoking an endpoint. \n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample code generation questions\n", + "\n", + "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", + "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", + "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", + "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", + "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", + "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", + "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using SageMaker SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with the endpoint created in the prior step\n", + "predictor = sagemaker.Predictor(\n", + " endpoint_name=endpoint_name,\n", + " sagemaker_session=sess,\n", + " serializer=sagemaker.serializers.JSONSerializer(),\n", + " deserializer=sagemaker.deserializers.JSONDeserializer(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "That's correct! Building a website can be a straightforward process if you break it down into manageable steps. Here are the 10 simple steps to build a website:\n", + "\n", + "1. **Plan your website's purpose and audience**: Determine the purpose of your website, who your target audience is, and what you want to achieve with your website.\n", + "\n", + "2. **Choose a domain name**: Register a unique and memorable domain name that reflects your website's brand and is easy to spell and remember.\n", + "\n", + "3. **Select a web hosting service**: Choose a reliable web hosting service that meets your needs, including storage space, bandwidth, and customer support.\n", + "\n", + "4. **Design your website's layout and structure**: Plan the layout and structure of your website, including the number of pages, navigation menu, and content organization.\n", + "\n", + "5. **Create your website's content**: Write and design the content for your website, including text, images, videos, and other multimedia elements.\n", + "\n", + "6. **Choose a website builder or CMS**: Decide whether to use a website builder like Wix, Squarespace, or Weebly, or a Content Management System (CMS) like WordPress, Joomla, or Drupal.\n", + "\n", + "7. **Build your website**: Use your chosen website builder or CMS to create your website, following the design and structure you planned earlier.\n", + "\n", + "8. **Customize your website's design and functionality**: Personalize your website's design and add features like contact forms, social media links, and e-commerce integrations.\n", + "\n", + "9. **Test and launch your website**: Test your website for functionality, usability, and performance, and launch it for public access.\n", + "\n", + "10. **Maintain and update your website**: Regularly update your website's content, fix broken links, and ensure your website remains secure and compatible with the latest browsers and devices.\n", + "\n", + "By following these 10 simple steps, you can build a professional-looking website that effectively communicates your message and achieves your online goals.\n" + ] + } + ], + "source": [ + "prompt = \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n", + "{system_prompt}\n", + "<|eot_id|><|start_header_id|>user<|end_header_id|>\n", + "{message_prompt}\n", + "<|eot_id|><|start_header_id|>assistant<|end_header_id|>\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"Building a website can be done in 10 simple steps:\"\n", + ")\n", + "\n", + "inputs = {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " }\n", + "}\n", + "response = predictor.predict(inputs)\n", + "print(response[0]['generated_text'].strip().replace('<|eot_id|>', ''))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using Boto3 SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with boto3 using the endpoint created from prior step\n", + "smr_client = boto3.client(\"sagemaker-runtime\")" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Let's break it down step by step!\n", + "\n", + "You bought 6 ice cream cones for $1.25 each, so the total cost of the ice cream is:\n", + "\n", + "6 cones x $1.25 per cone = $7.50\n", + "\n", + "You paid with a $10 bill, so to find out how much change you got back, we need to subtract the cost of the ice cream from the $10 bill:\n", + "\n", + "$10 (initial amount) - $7.50 (cost of ice cream) = $2.50\n", + "\n", + "So, you got $2.50 in change!\n" + ] + } + ], + "source": [ + "prompt = \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n", + "{system_prompt}\n", + "<|eot_id|><|start_header_id|>user<|end_header_id|>\n", + "{message_prompt}\n", + "<|eot_id|><|start_header_id|>assistant<|end_header_id|>\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"\"\"I bought an ice cream for 6 kids. Each cone was $1.25 and I paid with a $10 bill. \n", + " How many dollars did I get back? Explain first before answering.\"\"\"\n", + ")\n", + "\n", + "response = smr_client.invoke_endpoint(\n", + " EndpointName=endpoint_name,\n", + " Body=json.dumps(\n", + " {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 512,\n", + " \"do_sample\": False\n", + " },\n", + " }\n", + " ),\n", + " ContentType=\"application/json\",\n", + ")[\"Body\"].read().decode(\"utf8\")\n", + "\n", + "print(json.loads(response)[0]['generated_text'].strip().replace('<|eot_id|>', ''))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "In this post, we demonstrated how to use SageMaker large model inference containers to host Codestral 22B. We used DeepSpeed’s model parallel techniques with multiple GPUs on a single SageMaker machine learning instance. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean Up" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "# Delete the endpoint\n", + "sess.delete_endpoint(endpoint_name)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# In case the end point failed we still want to delete the model\n", + "sess.delete_endpoint_config(endpoint_name)\n", + "model.delete_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conda_pytorch_p310", + "language": "python", + "name": "conda_pytorch_p310" + }, + "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.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb b/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb new file mode 100644 index 0000000..7ee0ee6 --- /dev/null +++ b/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb @@ -0,0 +1,689 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Deploy Llama 3 on Amazon SageMaker with vLLM" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "[Llama 3](https://llama.meta.com/llama3/) are pretrained models trained over 15 trillion tokens, – a training dataset 7x larger than that used for Llama 2, with a 8k context length. The models excels at text summarization and accuracy, text classification and nuance, sentiment analysis and nuance reasoning, language modeling, dialogue systems, code generation, and following instructions. To learn more about Llama 3 models, click [here](https://llama.meta.com/llama3/).\n", + "\n", + "SageMaker has rolled out [vLLM container](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) which now provides users with the ability to leverage the managed serving capabilities and help to provide the un-differentiated heavy lifting.\n", + "\n", + "In this notebook, we combine the strengths of two powerful tools: [DJL](https://docs.djl.ai/) (Deep Java Library) for the serving framework and [vLLM](https://docs.vllm.ai/en/stable/) for distributed large language model inference. DJLServing, a high-performance universal model serving solution powered by DJL, handles the overall serving architecture.\n", + "\n", + "In our setup, vLLM handles the core LLM inference tasks, leveraging its optimizations to achieve high performance and low latency. DJLServing manages the broader serving infrastructure, handling incoming requests, load balancing, and coordinating with vLLM for efficient inference.\n", + "\n", + "This combination allows us to deploy the `Llama 3 8B` model across GPUs on the `ml.g5.12xlarge` instance with optimal resource utilization. vLLM's efficiencies in memory management and request handling enable us to serve this large model with improved throughput compared to traditional serving methods. To learn more about DJL, DJLServing, and vLLM you can refer to this [blog post](https://aws.amazon.com/blogs/machine-learning/boost-inference-performance-for-mixtral-and-llama-2-models-with-new-amazon-sagemaker-containers/)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "
\n", + "\n", + "NOTE: Llama models are licensed under a bespoke commercial license that balances open access to the models with responsibility and protections in place to help address potential misuse. Their license allows for broad commercial use, as well as for developers to create and redistribute additional work on top of Llama models. For more details, their licenses can be found at [Meta Llama 2](https://llama.meta.com/license/) and [Meta Llama 3](https://llama.meta.com/llama3/license/).\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "## Requirements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. Create an Amazon SageMaker Notebook Instance - [Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-setup-working-env.html)\n", + " - For Notebook Instance type, choose `ml.t3.medium`.\n", + "2. For Select Kernel, choose [conda_python3](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-prepare.html).\n", + "3. Install the required packages." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "
\n", + "\n", + "NOTE:\n", + "\n", + "- For Amazon SageMaker Studio, select Kernel \"Python 3 (ipykernel)\".\n", + "\n", + "- For Amazon SageMaker Studio Classic, select Image \"Base Python 3.0\" and Kernel \"Python 3\".\n", + "\n", + "
" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run this notebook you would need to install the following dependencies:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install boto3==1.34.132 -qU --force --quiet --no-warn-conflicts\n", + "!pip install sagemaker==2.224.2 -qU --force --quiet --no-warn-conflicts" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "### Import libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker.config INFO - Not applying SDK defaults from location: /etc/xdg/sagemaker/config.yaml\n", + "sagemaker.config INFO - Not applying SDK defaults from location: /home/ec2-user/.config/sagemaker/config.yaml\n" + ] + } + ], + "source": [ + "import boto3\n", + "import json\n", + "import sagemaker" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2.224.2\n" + ] + } + ], + "source": [ + "print(sagemaker.__version__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Initialize parameters" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sagemaker role arn: arn:aws:iam::570598552974:role/txt2sql-SageMakerExecutionRole-PAgMr5TND4x0\n", + "sagemaker session region: us-east-1\n" + ] + } + ], + "source": [ + "# execution role for the endpoint\n", + "role = sagemaker.get_execution_role()\n", + "\n", + "# sagemaker session for interacting with different AWS APIs\n", + "sess = sagemaker.session.Session()\n", + "\n", + "# Region\n", + "region_name = sess._region_name\n", + "\n", + "print(f\"sagemaker role arn: {role}\")\n", + "print(f\"sagemaker session region: {region_name}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Image URI of the DJL Container" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "LMI DLCs offer a low-code interface that simplifies using state-of-the-art inference optimization techniques and hardware. LMI allows you to apply tensor parallelism; the latest efficient attention, batching, quantization, and memory management techniques; token streaming; and much more, by just requiring the model ID and optional model parameters. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "See available Large Model Inference DLC's [here](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) and for more details [here](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/lmi/announcements/deepspeed-deprecation.md)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "DCL Image going to be used is ---- > 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.28.0-lmi10.0.0-cu124\n" + ] + } + ], + "source": [ + "inference_image_uri = sagemaker.image_uris.retrieve(\n", + " framework=\"djl-lmi\",\n", + " region=region_name,\n", + " version=\"0.28.0\"\n", + ")\n", + "print(f\"DCL Image going to be used is ---- > {inference_image_uri}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Available Environment Variable Configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here is a list of settings that we use in this configuration file:\n", + "\n", + "- `HF_MODEL_ID`: The model id of a pretrained model hosted inside a model repository on [huggingface.co](https://huggingface.co/models). The container uses this model id to download the corresponding model repository on huggingface.co. This is an optional setting and is not needed in the scenario where you are brining your own model. If you are getting your own model, you can include the URI of the Amazon S3 bucket that contains the model.\n", + "- `HF_TOKEN`: Some models on the HuggingFace Hub are gated and require permission from the owner to access. To deploy a gated model from the HuggingFace Hub using LMI, you must provide an [Access Token](https://huggingface.co/docs/hub/security-tokens) via this environment variable.\n", + "- `OPTION_ENGINE`: The engine for DJL to use. In this case, we intend to use [vLLM](https://docs.vllm.ai/en/stable/) and hence set it as **Python**.\n", + "- `OPTION_DTYPE`: The data type you plan to cast the model weights to. If not provided, LMI will use fp16.\n", + "- `OPTION_TGI_COMPAT`: To get the same response output as HuggingFace's Text Generation Inference, you can use the env `OPTION_TGI_COMPAT=true`.\n", + "- `OPTION_TASK`: The task used in Hugging Face for different pipelines. Default is text-generation. For further reading on DJL parameters on SageMaker, follow the [link](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/deepspeed_user_guide.html)\n", + "- `OPTION_ROLLING_BATCH`: Enables continuous batching (iteration level batching) with one of the supported backends. Available backends differ by container, see [Inference Library Configurations](https://docs.djl.ai/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#inference-library-configuration) for mappings.\n", + " - In the LMI Container:\n", + " - to use vLLM, use `OPTION_ROLLING_BATCH=vllm`\n", + " - to use lmi-dist, use `OPTION_ROLLING_BATCH=lmi-dist`\n", + " - to use huggingface accelerate, use `OPTION_ROLLING_BATCH=auto` for text generation models, or option.rolling_batch=disable for non-text generation models.\n", + "- `TENSOR_PARALLEL_DEGREE`: Set to the number of GPU devices over which DeepSpeed needs to partition the model. This parameter also controls the no of workers per model which will be started up when DJL serving runs. Setting this to `max`, which will shard the model across all available GPUs. As an example if we have a 8 GPU machine and we are creating 8 partitions then we will have 1 worker per model to serve the requests.\n", + "- `OPTION_DEVICE_MAP`: The HuggingFace accelerate device_map to use.\n", + "- `OPTION_TRUST_REMOTE_CODE`: If the model artifacts contain custom modeling code, you should set this to true after validating the custom code is not malicious. If you are using a HuggingFace Hub model id, you should also specify HF_REVISION to ensure you are using artifacts and code that you have validated.\n", + "\n", + "For more details on the configuration options and an exhaustive list, you can refer the [documentation](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-large-model-configuration.html) and [LMI Starting Guide](https://docs.djl.ai/docs/serving/serving/docs/lmi/user_guides/starting-guide.html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create SageMaker endpoint" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here are some key differences between the available backends in LMI:\n", + "\n", + "+ **LMI-Distributed Library** – This is the AWS framework to run inference with LLMs, inspired from OSS, to achieve the best possible latency and accuracy on the result. LMI-Dist employs optimized default configurations, such as GPU core counting, to ensure efficient performance and resource utilization.\n", + "+ **LMI vLLM** – This is the AWS backend implementation of the memory-efficient vLLM inference library" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Hugging Face Model Id\n", + "model_id = \"meta-llama/Meta-Llama-3-8B-Instruct\"\n", + "\n", + "# Environment variables\n", + "hf_token = \"\" # Use for gated models\n", + "rolling_batch = \"vllm\" # \"vllm\", \"lmi-dist\"\n", + "\n", + "env = {}\n", + "env['HF_MODEL_ID'] = model_id\n", + "env['OPTION_ROLLING_BATCH'] = rolling_batch\n", + "env['OPTION_DTYPE'] = \"bf16\"\n", + "env['OPTION_TGI_COMPAT'] = \"true\"\n", + "\n", + "if rolling_batch != \"lmi-dist\":\n", + " env['OPTION_ENGINE'] = \"Python\"\n", + " env['OPTION_TASK'] = \"text-generation\"\n", + " env['TENSOR_PARALLEL_DEGREE'] = \"max\"\n", + " env['OPTION_DEVICE_MAP'] = \"auto\"\n", + " # env['OPTION_TRUST_REMOTE_CODE'] = \"true\"\n", + " \n", + "# Include HF token for gated models\n", + "if hf_token != \"\":\n", + " env['HF_TOKEN'] = hf_token\n", + "else:\n", + " print(\"Llama models are gated, please add your HF token before you continue.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "instance_type: ml.g5.12xlarge\n", + "model_id: meta-llama/Meta-Llama-3-8B-Instruct\n", + "endpoint_name: codestral-22b-vllm-2024-07-05-21-59-38-687\n" + ] + } + ], + "source": [ + "# SageMaker Instance Type\n", + "instance_type = \"ml.g5.12xlarge\"\n", + "\n", + "# Endpoint name\n", + "endpoint_name_prefix = \"llama3-8b-instruct-vllm\"\n", + "endpoint_name = sagemaker.utils.name_from_base(endpoint_name_prefix)\n", + "\n", + "print(f\"instance_type: {instance_type}\")\n", + "print(f\"model_id: {model_id}\")\n", + "print(f\"endpoint_name: {endpoint_name}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Deploy model to an endpoint\n", + "model = sagemaker.Model(\n", + " image_uri=inference_image_uri,\n", + " role=role,\n", + " env=env\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-------------!" + ] + } + ], + "source": [ + "model.deploy(\n", + " initial_instance_count=1,\n", + " instance_type=instance_type,\n", + " endpoint_name=endpoint_name,\n", + " container_startup_health_check_timeout=900,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Run inference and chat with the model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [] + }, + "source": [ + "### Supported Inference Parameters\n", + "\n", + "---\n", + "This model supports the following inference payload parameters:\n", + "\n", + "* **max_new_tokens:** Model generates text until the output length (excluding the input context length) reaches max_new_tokens. If specified, it must be a positive integer.\n", + "* **temperature:** Controls the randomness in the output. Higher temperature results in output sequence with low-probability words and lower temperature results in output sequence with high-probability words. If `temperature` -> 0, it results in greedy decoding. If specified, it must be a positive float.\n", + "* **top_p:** In each step of text generation, sample from the smallest possible set of words with cumulative probability `top_p`. If specified, it must be a float between 0 and 1.\n", + "* **return_full_text:** If True, input text will be part of the output generated text. If specified, it must be boolean. The default value for it is False.\n", + "\n", + "You may specify any subset of the parameters mentioned above while invoking an endpoint. \n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sample code generation questions\n", + "\n", + "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", + "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", + "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", + "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", + "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", + "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", + "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", + "\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using SageMaker SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with the endpoint created in the prior step\n", + "predictor = sagemaker.Predictor(\n", + " endpoint_name=endpoint_name,\n", + " sagemaker_session=sess,\n", + " serializer=sagemaker.serializers.JSONSerializer(),\n", + " deserializer=sagemaker.deserializers.JSONDeserializer(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Building a website can be a straightforward process if you break it down into smaller, manageable steps. Here are the 10 simple steps to build a website:\n", + "\n", + "**Step 1: Plan Your Website**\n", + "\n", + "* Define your website's purpose and target audience\n", + "* Identify your unique selling proposition (USP)\n", + "* Create a sitemap and wireframe to visualize your website's structure\n", + "\n", + "**Step 2: Choose a Domain Name**\n", + "\n", + "* Brainstorm a list of potential domain names\n", + "* Check the availability of your desired domain name using a registrar like GoDaddy or Namecheap\n", + "* Register your domain name and set up DNS settings\n", + "\n", + "**Step 3: Select a Web Hosting Service**\n", + "\n", + "* Research and compare different web hosting services (e.g., Bluehost, HostGator, SiteGround)\n", + "* Choose a hosting plan that meets your needs (e.g., shared hosting, VPS, dedicated hosting)\n", + "* Sign up for a hosting plan and set up your account\n", + "\n", + "**Step 4: Design Your Website**\n", + "\n", + "* Choose a website builder (e.g., WordPress, Wix, Squarespace) or hire a web designer\n", + "* Create a visually appealing design that aligns with your brand and target audience\n", + "* Ensure your design is responsive and mobile-friendly\n", + "\n", + "**Step 5: Build Your Website**\n", + "\n", + "* Use your chosen website builder or design tool to create your website\n", + "* Add content, images, and features as needed\n", + "* Customize your website's layout and design\n", + "\n", + "**Step 6: Add Content**\n", + "\n", + "* Create high-quality, engaging content (e.g., text, images, videos)\n", + "* Optimize your content for search engines (SEO)\n", + "* Add a blog or news section to keep your website fresh and up-to-date\n", + "\n", + "**Step 7: Set Up Navigation and Menus**\n", + "\n", + "* Create a clear and intuitive navigation menu\n", + "* Add links to important pages and sections\n", + "* Ensure your website is easy to navigate and user-friendly\n", + "\n", + "**Step 8: Add Interactivity**\n", + "\n", + "* Add forms, contact pages, and email marketing integrations\n", + "* Create a contact form or email address for user feedback\n", + "* Integrate social media links and feeds\n", + "\n", + "**Step 9: Test and Launch**\n", + "\n", + "* Test your website for functionality and usability\n", + "* Check for broken links, errors, and compatibility issues\n", + "* Launch your website and make it live for the public\n", + "\n", + "**Step 10: Maintain and Update**\n", + "\n", + "* Regularly update your website with fresh content and features\n", + "* Monitor analytics and user feedback to improve your website\n", + "* Ensure your website remains secure and up-to-date with the latest software and security patches\n", + "\n", + "By following these 10 simple steps, you can build a professional-looking website that effectively represents your brand and engages your target audience.\n" + ] + } + ], + "source": [ + "prompt = \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n", + "{system_prompt}\n", + "<|eot_id|><|start_header_id|>user<|end_header_id|>\n", + "{message_prompt}\n", + "<|eot_id|><|start_header_id|>assistant<|end_header_id|>\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"Building a website can be done in 10 simple steps:\"\n", + ")\n", + "\n", + "inputs = {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " }\n", + "}\n", + "response = predictor.predict(inputs)\n", + "print(response[0]['generated_text'].strip())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inference using Boto3 SDK" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Initialize sagemaker client with boto3 using the endpoint created from prior step\n", + "smr_client = boto3.client(\"sagemaker-runtime\")" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Let's break it down step by step!\n", + "\n", + "You bought an ice cream for 6 kids, and each cone was $1.25. To find the total cost, you multiply the number of cones by the cost per cone:\n", + "\n", + "6 cones x $1.25 per cone = $7.50\n", + "\n", + "You paid with a $10 bill, so to find out how much change you got back, you subtract the total cost from the $10 bill:\n", + "\n", + "$10 (bill) - $7.50 (cost) = $2.50\n", + "\n", + "So, you got $2.50 in change!\n" + ] + } + ], + "source": [ + "prompt = \"\"\"<|begin_of_text|><|start_header_id|>system<|end_header_id|>\n", + "{system_prompt}\n", + "<|eot_id|><|start_header_id|>user<|end_header_id|>\n", + "{message_prompt}\n", + "<|eot_id|><|start_header_id|>assistant<|end_header_id|>\"\"\".format(\n", + " system_prompt=\"You are a helpful assistant.\",\n", + " message_prompt=\"\"\"I bought an ice cream for 6 kids. Each cone was $1.25 and I paid with a $10 bill. \n", + " How many dollars did I get back? Explain first before answering.\"\"\"\n", + ")\n", + "\n", + "response = smr_client.invoke_endpoint(\n", + " EndpointName=endpoint_name,\n", + " Body=json.dumps(\n", + " {\n", + " \"inputs\": prompt,\n", + " \"parameters\": {\n", + " \"temperature\": 0.8,\n", + " \"top_p\": 0.95,\n", + " \"max_new_tokens\": 4000,\n", + " \"do_sample\": False\n", + " },\n", + " }\n", + " ),\n", + " ContentType=\"application/json\",\n", + ")[\"Body\"].read().decode(\"utf8\")\n", + "\n", + "print(json.loads(response)[0]['generated_text'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conclusion\n", + "In this post, we demonstrated how to use SageMaker large model inference containers to host Codestral 22B. We used DeepSpeed’s model parallel techniques with multiple GPUs on a single SageMaker machine learning instance. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Clean Up" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [], + "source": [ + "# Delete the endpoint\n", + "sess.delete_endpoint(endpoint_name)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# In case the end point failed we still want to delete the model\n", + "sess.delete_endpoint_config(endpoint_name)\n", + "model.delete_model()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "conda_pytorch_p310", + "language": "python", + "name": "conda_pytorch_p310" + }, + "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.14" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 94b6bd7d73755c9c6393e859a9d23fea0c5caa5c Mon Sep 17 00:00:00 2001 From: Armando Diaz Date: Mon, 8 Jul 2024 14:39:51 -0400 Subject: [PATCH 2/3] delete sample questions --- .../Llama2-TensorRT-LLM-SageMaker.ipynb | 17 ----------------- .../Llama2-vLLM-SageMaker.ipynb | 17 ----------------- .../Llama3-TensorRT-LLM-SageMaker.ipynb | 17 ----------------- .../Llama3-vLLM-SageMaker.ipynb | 17 ----------------- 4 files changed, 68 deletions(-) diff --git a/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb b/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb index 1f3b051..19e5a44 100644 --- a/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb +++ b/distributed-inference-deployment/Llama2-TensorRT-LLM-SageMaker.ipynb @@ -401,23 +401,6 @@ "---" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sample code generation questions\n", - "\n", - "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", - "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", - "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", - "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", - "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", - "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", - "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", - "\n", - "---" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb b/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb index f93148e..edbeb09 100644 --- a/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb +++ b/distributed-inference-deployment/Llama2-vLLM-SageMaker.ipynb @@ -402,23 +402,6 @@ "---" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sample code generation questions\n", - "\n", - "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", - "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", - "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", - "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", - "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", - "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", - "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", - "\n", - "---" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb b/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb index 8b0c76d..6719f77 100644 --- a/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb +++ b/distributed-inference-deployment/Llama3-TensorRT-LLM-SageMaker.ipynb @@ -383,23 +383,6 @@ "---" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sample code generation questions\n", - "\n", - "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", - "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", - "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", - "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", - "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", - "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", - "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", - "\n", - "---" - ] - }, { "cell_type": "markdown", "metadata": {}, diff --git a/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb b/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb index 7ee0ee6..99d9cda 100644 --- a/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb +++ b/distributed-inference-deployment/Llama3-vLLM-SageMaker.ipynb @@ -402,23 +402,6 @@ "---" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Sample code generation questions\n", - "\n", - "1. \"Create a Python class for a multi-threaded web scraper that can handle rate limiting, proxy rotation, and dynamic content loading. Include methods for parsing HTML with BeautifulSoup and storing results in a SQLite database.\"\n", - "2. \"Implement a Red-Black Tree data structure in C++ with methods for insertion, deletion, and rebalancing. Include a visualization function that prints the tree structure to the console.\"\n", - "3. \"Write a Rust function that implements the Aho-Corasick string matching algorithm for efficient multi-pattern searching. Optimize it for memory usage and include comprehensive error handling.\"\n", - "4. \"Develop a JavaScript module for a real-time collaborative text editor using operational transformation. Implement functions for handling concurrent edits, conflict resolution, and syncing with a backend server.\"\n", - "5. \"Create a Python script that uses asyncio to concurrently process large CSV files, perform complex data transformations, and upload the results to an S3 bucket. Include proper error handling and logging.\"\n", - "6. \"Implement a microservices architecture in Go for a basic e-commerce platform. Include services for user authentication, product catalog, order processing, and inventory management. Use gRPC for inter-service communication and implement circuit breaking for resilience.\"\n", - "7. \"Provide me with a python script to recompile huggingface models with optimum neuron for inferentia\"\n", - "\n", - "---" - ] - }, { "cell_type": "markdown", "metadata": {}, From e309c3a58a9b150aad7fe8484f083da9dd5b0cdf Mon Sep 17 00:00:00 2001 From: Armando Diaz Date: Wed, 10 Jul 2024 10:36:33 -0400 Subject: [PATCH 3/3] add architecture --- text2sql-recipes/docs/Text2SQLArchitecture.jpg | Bin 0 -> 257328 bytes .../llama3-chromadb-text2sql.ipynb | 10 ++++++++++ 2 files changed, 10 insertions(+) create mode 100644 text2sql-recipes/docs/Text2SQLArchitecture.jpg diff --git a/text2sql-recipes/docs/Text2SQLArchitecture.jpg b/text2sql-recipes/docs/Text2SQLArchitecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2cbeb8adae1578a74f0a1dd762d773e6561206b9 GIT binary patch literal 257328 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%0DlKQ)y&;N&Jq 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 )&2?Hhr$ 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 literal 0 HcmV?d00001 diff --git a/text2sql-recipes/llama3-chromadb-text2sql.ipynb b/text2sql-recipes/llama3-chromadb-text2sql.ipynb index e479505..48c8b31 100644 --- a/text2sql-recipes/llama3-chromadb-text2sql.ipynb +++ b/text2sql-recipes/llama3-chromadb-text2sql.ipynb @@ -111,6 +111,16 @@ "---" ] }, + { + "cell_type": "markdown", + "id": "cda8416f", + "metadata": {}, + "source": [ + "## Architecture\n", + "\n", + "![Text2SQLArchitecture](docs/Text2SQLArchitecture.jpg)" + ] + }, { "cell_type": "markdown", "id": "ab3b33e6",