| # Serving LoRA |
|
|
| ## Launch LoRA |
|
|
| LoRA is currently only supported by the PyTorch backend. Its deployment process is similar to that of other models, and you can view the commands using lmdeploy `serve api_server -h`. Among the parameters supported by the PyTorch backend, there are configuration options for LoRA. |
|
|
| ``` |
| PyTorch engine arguments: |
| --adapters [ADAPTERS [ADAPTERS ...]] |
| Used to set path(s) of lora adapter(s). One can input key-value pairs in xxx=yyy format for multiple lora adapters. If only have one adapter, one can only input the path of the adapter.. Default: |
| None. Type: str |
| ``` |
|
|
| The user only needs to pass the Hugging Face model path of the LoRA weights in the form of a dictionary to `--adapters`. |
|
|
| ```shell |
| lmdeploy serve api_server THUDM/chatglm2-6b --adapters mylora=chenchi/lora-chatglm2-6b-guodegang |
| ``` |
|
|
| After the service starts, you can find two available model names in the Swagger UI: ‘THUDM/chatglm2-6b’ and ‘mylora’. The latter is the key in the `--adapters` dictionary. |
|
|
| ## Client usage |
|
|
| ### CLI |
|
|
| When using the OpenAI endpoint, the `model` parameter can be used to select either the base model or a specific LoRA weight for inference. The following example chooses to use the provided `chenchi/lora-chatglm2-6b-guodegang` for inference. |
|
|
| ```shell |
| curl -X 'POST' \ |
| 'http://localhost:23334/v1/chat/completions' \ |
| -H 'accept: application/json' \ |
| -H 'Content-Type: application/json' \ |
| -d '{ |
| "model": "mylora", |
| "messages": [ |
| { |
| "content": "hi", |
| "role": "user" |
| } |
| ] |
| }' |
| ``` |
|
|
| And here is the output: |
|
|
| ```json |
| { |
| "id": "2", |
| "object": "chat.completion", |
| "created": 1721377275, |
| "model": "mylora", |
| "choices": [ |
| { |
| "index": 0, |
| "message": { |
| "role": "assistant", |
| "content": " 很高兴哪有什么赶凳儿?(按东北语说的“起早哇”),哦,东北人都学会外语了?", |
| "tool_calls": null |
| }, |
| "logprobs": null, |
| "finish_reason": "stop" |
| } |
| ], |
| "usage": { |
| "prompt_tokens": 17, |
| "total_tokens": 43, |
| "completion_tokens": 26 |
| } |
| } |
| ``` |
|
|
| ### python |
|
|
| ```python |
| from openai import OpenAI |
| client = OpenAI( |
| api_key='YOUR_API_KEY', |
| base_url="http://0.0.0.0:23333/v1" |
| ) |
| model_name = 'mylora' |
| response = client.chat.completions.create( |
| model=model_name, |
| messages=[ |
| {"role": "user", "content": "hi"}, |
| ], |
| temperature=0.8, |
| top_p=0.8 |
| ) |
| print(response) |
| ``` |
|
|
| The printed response content is: |
|
|
| ``` |
| ChatCompletion(id='4', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content=' 很高兴能够见到你哪,我也在辐射区开了个愣儿,你呢,还活着。', role='assistant', function_call=None, tool_calls=None))], created=1721377497, model='mylora', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=22, prompt_tokens=17, total_tokens=39)) |
| ``` |
|
|