From 4036bb97d70a7d62685274ebb7bc95b457190d8d Mon Sep 17 00:00:00 2001 From: aowen14 Date: Mon, 13 May 2024 16:29:33 -0700 Subject: [PATCH 1/4] update vLLM, add delete instance, TGI, and serve embeddings --- guides/deleteinstance.mdx | 60 +++++++++++++++ guides/serveembeddings.mdx | 126 ++++++++++++++++++++++++++++++ guides/tgi.mdx | 139 +++++++++++++++++++++++++++++++++- guides/tutoriallibrary.mdx | 9 +++ guides/vllm.mdx | 20 +++-- images/startedserving_tgi.png | Bin 0 -> 717073 bytes mint.json | 5 +- 7 files changed, 350 insertions(+), 9 deletions(-) create mode 100644 guides/deleteinstance.mdx create mode 100644 guides/serveembeddings.mdx create mode 100644 images/startedserving_tgi.png diff --git a/guides/deleteinstance.mdx b/guides/deleteinstance.mdx new file mode 100644 index 0000000..042c5c9 --- /dev/null +++ b/guides/deleteinstance.mdx @@ -0,0 +1,60 @@ +--- +title: 'Stopping GPU Instances' +icon: 'octagon' +iconType: 'solid' +--- + +### Intro +Stopping Instances helps save money on GPU deployments when you're not using them. The Shadeform API enables programmatically stopping instances, which saves money and enables new use cases. + +### Setup +Let's assume that you have a Shadeform API key from [here](https://platform.shadeform.ai/settings/api), +and an active instance. If you need an active instance, then +[this guide](https://docs.shadeform.ai/findingmostaffordablegpus) will help you get set up. + +### Deleting an instance: + +Using the API, let's list our active instances: + +```python Python +base_url = "https://api.shadeform.ai/v1/instances" +headers = { + "X-API-KEY": "", + "Content-Type" : "application/json" +} +instance_response = requests.request("GET", base_url, headers=headers) +print(instance_response) +``` +```bash cURL +curl --request GET \ + --url https://api.shadeform.ai/v1/instances \ + --header 'X-API-KEY: ' +``` + + + +To delete this instance, we'll use the ID of the instance that we want to delete to make a delete request. + +```python Python +instances = json.loads(instance_response.text)['instances'] +# We will specifically be looking to stop the first instance in the list. +# Note that this requires at least one active instance +instance_id = instances[0]['id'] +delete_url = base_url + '/' + instance_id + '/delete' +delete_response = requests.request("POST", delete_url, headers=headers) +print(delete_response) +``` + +```bash cURL +# Copy the instance id from above that you'd like to stop/delete +curl --request POST \ + --url https://api.shadeform.ai/v1/instances/{id}/delete \ + --header 'X-API-KEY: ' + +``` + + +Just like that, we've stopped a running instance. While we had a human in the loop, this can all be done without human involvement once compute jobs are finished. + +### Next Steps: +We alluded to the fact that stopping instances enables new use cases. Be on the lookout as we showcase some of these here 👀. \ No newline at end of file diff --git a/guides/serveembeddings.mdx b/guides/serveembeddings.mdx new file mode 100644 index 0000000..e914a3b --- /dev/null +++ b/guides/serveembeddings.mdx @@ -0,0 +1,126 @@ +--- +title: 'Serve Embeddings' +icon: 'webhook' +iconType: 'solid' +--- + +### Intro +Embedding and Re-Ranker models are important backbones for RAG and other AI applications with chained calls to LLMs. +They help efficiently organize a body of knowledge and prepare it for an LLM to generate tokens. +Finetuning embeddings can also provide performance improvements over generic embedding models for your apps and workflows. +In this guide, we will show you how you can serve an embedding model using 'Text-Embeddings-Inference` from Hugging Face for online inference. +This framework runs inference very quicky and can handle large batch sizes. + +### Setup +This guide builds off of our others for [finding the best gpu](https://docs.shadeform.ai/findingmostaffordablegpus). + +We have a python notebook already to go for you to deploy this model that you can [find here](https://github.com/shadeform/examples/blob/main/basic_serving_embeddigns_tei.ipynb). +The requirements are simple, so in a python environment with `requests` installed: + +```bash +git clone https://github.com/shadeform/examples.git +cd examples/ +``` +Then in `basic_serving_embeddings_tei.ipynb` you will need to input your [Shadeform API Key](https://platform.shadeform.ai/settings/api). + +### Configuring our Server + +Once we have an instance, we deploy a `Text-Embedding-Inference` container with this request payload. + +``` python +model_id = "BAAI/bge-base-en-v1.5" + +payload = { + "cloud": best_instance["cloud"], + "region": region, + "shade_instance_type": shade_instance_type, + "shade_cloud": True, + "name": "text_embeddings_inference_server", + "launch_configuration": { + "type": "docker", + "docker_configuration": { + "image": "ghcr.io/huggingface/text-embeddings-inference", + "args": "--model-id " + model_id, + "port_mappings": [ + { + "container_port": 80, + "host_port": 8000 + } + ] + } + } +} +``` + +Note that we are mapping the container's port 80 to the host's port 8000. `Text-Embeddings-Inference` by default serves on port 80, but many higher level frameworks expect the server to host on port 8000. + +#### Tailoring your image to hardware version +Shadeform supports multiple different versions and generations of GPUs, as does `Text-Embeddings-Inference`. But not all features are available on every hardware version, and there may be reliability issues that arize. +Luckily, Hugging Face put out a list of [docker images](https://github.com/huggingface/text-embeddings-inference?tab=readme-ov-file#docker-images) for each hardware platform for the best performance and support. +We use the general base image as it works for the A6000 GPUs that we're using in this guide, and is somewhat flexible. + +You can substitute the image that you need above in the `image` key in the payload. + +### Serving Embeddings +We can deploy our server to this instance by POST'ing the request like so: +``` python +response = requests.request("POST", create_url, json=payload, headers=headers) +#easy way to visually see if this request worked +print(response.text) +``` + +Once we request it, Shadeform will provision the machine, and deploy a docker container based on the image, arguments, and environment variables that we selected. +This might take 5-10 minutes depending on the machine chosen and the size of the model weights you choose. +For more information on the API fields, check out the [Create Instance API Reference](https://docs.shadeform.ai/api-reference/endpoint/instances-create). + +### Checking on our server + +There are four main steps that we need to wait for: VM Provisioning, image downloading and startup, spinning up `Text-Embeddings-Inference`, and downloading the model. +Luckily, `Text-Embeddings-Inference` is optimized for serverless use cases with a small image size, and embedding models are usually small compared to LLM's. + +```python +instance_response = requests.request("GET", base_url, headers=headers) +ip_addr = "" +print(instance_response.text) +instance = json.loads(instance_response.text)["instances"][0] +instance_status = instance['status'] +if instance_status == 'active': + print(f"Instance is active with IP: {instance['ip']}") + ip_addr = instance['ip'] +else: + print(f"Instance isn't yet active: {instance}" ) +``` +This cell will print the IP address once it has provisioned. Generally the server should be ready a few minutes after the IP shows up from downloading the image and model. + +Or once we've made the request, we can watch the logs under [Running Instances](https://platform.shadeform.ai/instances). Once it is ready to serve it should look something like this: +![StartedServing](/images/startedserving_tei.png) + +### Querying our Server + + +``` python cURL +# Copy the ip address printed above +curl XX.XX.XXX.XX/embed \ + -X POST \ + -d '{"inputs":"What is the meaning of life?"}' \ + -H 'Content-Type: application/json' +``` + +```python requests +server_headers = { + 'Content-Type': 'application/json', +} + +json_data = { + 'inputs': 'What is the meaning of life?', +} + +embedding_response = requests.post(f'http://{ip_addr}:8000/embed', headers=server_headers, json=json_data) + +print(embedding_response.text) +``` + + + +### What's Next +You now can serve your own embedding models for your RAG, Search and other AI applications on Shadeform, giving you more control over your applications at more affordable prices. We'll show in future guides more details on how to do this. diff --git a/guides/tgi.mdx b/guides/tgi.mdx index ef0258c..e225a5d 100644 --- a/guides/tgi.mdx +++ b/guides/tgi.mdx @@ -1,5 +1,138 @@ --- -title: 'Serve LLM Using TGI' -icon: 'comment' -iconType: 'solid' +title: "Serve LLM Using TGI" +icon: "comment" +iconType: "solid" --- + +### Intro + +Model Deployment is a very common GPU use case. [Text-Generation-Inference](https://github.com/huggingface/text-generation-inference) (`TGI`) is a popular framework to run inference on LLM's from Hugging Face. + +With Shadeform, it's easy to deploy models right to the most affordable gpu's in the market with just a few commands. + +In this guide, we will deploy [Mistral-7b-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1) with `TGI` onto an A6000. This guide is very similar to our [vLLM guide]() with a few changes to change the inference framework. + +```bash +git clone https://github.com/shadeform/examples.git +cd examples/ +``` + +Then in `serve_tgi.ipynb` you will need to input your [Shadeform API Key](https://platform.shadeform.ai/settings/api). + +### Serving a Model + +Once we have an instance, we deploy a model serving container with this request payload. + +```python +model_id = "mistralai/Mistral-7B-v0.1" +port = 8000 + +#If the model you need requires authenticated access, paste your Hugging Face api key here +huggingface_token = "" + +payload = { + "cloud": best_instance["cloud"], + "region": region, + "shade_instance_type": shade_instance_type, + "shade_cloud": True, + "name": "text_generation_inference_server", + "launch_configuration": { + "type": "docker", + "docker_configuration": { + "image": "ghcr.io/huggingface/text-generation-inference:1.4", + "args": "--model-id " + model_id + f" --port {port}", + "envs": [], + "port_mappings": [ + { + "container_port": 8000, + "host_port": 8000 + } + ] + } + } +} + +#Add another environment variable to the payload by adding a json +if huggingface_token != "": + token_env_json = { + "name": "HUGGING_FACE_HUB_TOKEN", + "value" : huggingface_token + } + payload["launch_configuration"]["docker_configuration"]["envs"].append(token_env_json) + +#request the best instance that is available +response = requests.request("POST", create_url, json=payload, headers=headers) +#easy way to visually see if this request worked +print(response.text) +``` + +Once we request it, Shadeform will provision the machine, and deploy a docker container with the image, arguments, and environment variables provided. In this case, it will deploy an openai compatible server with `TGI` serving Mistral-7b-v0.1. +This might take 5-10 minutes depending on the machine chosen and the size of the model weights you choose. + +For more information on the API fields, check out the [Create Instance API Reference](https://docs.shadeform.ai/api-reference/endpoint/instances-create). + +### Checking on our Model server + +There are four main steps that we need to wait for: VM Provisioning, image downloading and startup, spinning up `TGI`, and downloading the model. + +```python +instance_response = requests.request("GET", base_url, headers=headers) +ip_addr = "" +print(instance_response.text) +instance = json.loads(instance_response.text)["instances"][0] +instance_status = instance['status'] +if instance_status == 'active': + print(f"Instance is active with IP: {instance['ip']}") + ip_addr = instance['ip'] +else: + print(f"Instance isn't yet active: {instance}" ) +``` + +This cell will print the IP address once it has provisioned. However, the image needs to download, and `TGI` needs to download the model and spin up, which should take a few minutes. + +#### Watch via the notebook + +Once the model is ready, this code will output the model list and a response to our query. We can use either requests or OpenAI's completions library. + + +``` python requests +tgi_headers = { + 'Content-Type': 'application/json', +} + +json_data = { +'model': model_id, +'prompt': 'New York City is the', +'max_tokens': 7, +} + +completion_response = requests.post(f'http://{ip_addr}:{port}/v1/completions', headers=tgi_headers, json=json_data) + +print(completion_response.text) + +```` + +``` python openai +#Alternatively, you can call this with the Open AI library, but requires that installed +from openai import OpenAI + +# Modify OpenAI's API key and API base to use vLLM's API server. +openai_api_key = "EMPTY" +openai_api_base = f"http://{ip_addr}:{port}/v1" +client = OpenAI( + api_key=openai_api_key, + base_url=openai_api_base, +) +completion = client.completions.create(model=model_id, + prompt='New York City is the', + max_tokens=7) +print("Completion result:", completion) + +```` + + +#### Watching with the Shadeform UI +Or once we've made the request, we can watch the logs under [Running Instances](https://platform.shadeform.ai/instances). Once it is ready to serve it should look something like this: +![StartedServing](/images/startedserving_tgi.png) + +Happy Serving! diff --git a/guides/tutoriallibrary.mdx b/guides/tutoriallibrary.mdx index f58ce16..a119bdf 100644 --- a/guides/tutoriallibrary.mdx +++ b/guides/tutoriallibrary.mdx @@ -22,10 +22,19 @@ iconType: 'solid' Serve an LLM model using vLLM + + Programmatically spin down instances + ### Frequent Use Cases Provision network rules on your instance Evaluate language models using lm-eval-harness + + + Serve an LLM model using TGI + + + Serve Embeddings using Text-Embeddings-Inference \ No newline at end of file diff --git a/guides/vllm.mdx b/guides/vllm.mdx index 905afbf..b3a6b36 100644 --- a/guides/vllm.mdx +++ b/guides/vllm.mdx @@ -4,6 +4,7 @@ icon: 'microchip' iconType: 'solid' --- +### Intro Model Deployment is a very common GPU use case. With Shadeform, it's easy to deploy models right to the most affordable gpu's in the market with just a few commands. In this guide, we will deploy [Mistral-7b-v0.1](https://huggingface.co/mistralai/Mistral-7B-v0.1) with vLLM onto an A6000. @@ -25,6 +26,9 @@ Then in `basic_serving_vllm.ipynb` you will need to input your [Shadeform API Ke Once we have an instance, we deploy a model serving container with this request payload. ```python +#If the model you need requires authenticated access, paste your key here. Needed for Mistral. +huggingface_token = "" + model_id = "mistralai/Mistral-7B-v0.1" payload = { @@ -35,7 +39,6 @@ payload = { "name": "cool_gpu_server", "launch_configuration": { "type": "docker", - #This selects the image to launch, and sets environment variables "tasks" and "num_fewshot" "docker_configuration": { "image": "vllm/vllm-openai:latest", "args": "--model " + model_id, @@ -50,21 +53,28 @@ payload = { } } +#Add another environment variable to the payload by adding a json +if huggingface_token != "": + token_env_json = { + "name": "HUGGING_FACE_HUB_TOKEN", + "value" : huggingface_token + } + payload["launch_configuration"]["docker_configuration"]["envs"].append(token_env_json) + #request the best instance that is available response = requests.request("POST", create_url, json=payload, headers=headers) #easy way to visually see if this request worked print(response.text) ``` -Once we request it, Shadeform will provision the machine, and deploy a docker container based on the image, arguments, and environment variables that we selected. +Once we request it, Shadeform will provision the machine, and deploy a docker container with the image, arguments, and environment variables provided. In this case, it will deploy an openai compatible server with `vLLM` serving Mistral-7b-v0.1. This might take 5-10 minutes depending on the machine chosen and the size of the model weights you choose. -For more information on the API fields, check out the [Create Instance API Reference](https://docs.shadeform.ai/api-reference/endpoint/instances-create). -We can see that this will deploy an openai compatible server with vLLM serving Mistral-7b-v0.1. +For more information on the API fields, check out the [Create Instance API Reference](https://docs.shadeform.ai/api-reference/endpoint/instances-create). ### Checking on our Model server -There are three main steps that we need to wait for: VM Provisioning, image building, and spinning up vLLM. +There are four main steps that we need to wait for: VM Provisioning, image downloading and startup, spinning up vLLM, and downloading the model. ```python instance_response = requests.request("GET", base_url, headers=headers) diff --git a/images/startedserving_tgi.png b/images/startedserving_tgi.png new file mode 100644 index 0000000000000000000000000000000000000000..46a75d617a193a0ae1400d7225460f6095b43f3d GIT binary patch literal 717073 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

-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