yuccaaa commited on
Commit
acefbcd
·
verified ·
1 Parent(s): 5e94860

Upload ms-swift/examples/infer/demo_lora.py with huggingface_hub

Browse files
ms-swift/examples/infer/demo_lora.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from typing import Literal
3
+
4
+ os.environ['CUDA_VISIBLE_DEVICES'] = '0'
5
+
6
+
7
+ def infer_multilora(infer_request: 'InferRequest', infer_backend: Literal['vllm', 'pt']):
8
+ # Dynamic LoRA
9
+ adapter_path = safe_snapshot_download('swift/test_lora')
10
+ adapter_path2 = safe_snapshot_download('swift/test_lora2')
11
+ args = BaseArguments.from_pretrained(adapter_path)
12
+ if infer_backend == 'pt':
13
+ engine = PtEngine(args.model)
14
+ elif infer_backend == 'vllm':
15
+ from swift.llm import VllmEngine
16
+ engine = VllmEngine(args.model, enable_lora=True, max_loras=1, max_lora_rank=16)
17
+ template = get_template(args.template, engine.processor, args.system)
18
+ request_config = RequestConfig(max_tokens=512, temperature=0)
19
+ adapter_request = AdapterRequest('lora1', adapter_path)
20
+ adapter_request2 = AdapterRequest('lora2', adapter_path2)
21
+
22
+ # use lora
23
+ resp_list = engine.infer([infer_request], request_config, template=template, adapter_request=adapter_request)
24
+ response = resp_list[0].choices[0].message.content
25
+ print(f'lora1-response: {response}')
26
+ # origin model
27
+ resp_list = engine.infer([infer_request], request_config)
28
+ response = resp_list[0].choices[0].message.content
29
+ print(f'response: {response}')
30
+ # use lora
31
+ resp_list = engine.infer([infer_request], request_config, template=template, adapter_request=adapter_request2)
32
+ response = resp_list[0].choices[0].message.content
33
+ print(f'lora2-response: {response}')
34
+
35
+
36
+ def infer_lora(infer_request: 'InferRequest'):
37
+ request_config = RequestConfig(max_tokens=512, temperature=0)
38
+ adapter_path = safe_snapshot_download('swift/test_lora')
39
+ args = BaseArguments.from_pretrained(adapter_path)
40
+ # method1
41
+ # engine = PtEngine(args.model, adapters=[adapter_path])
42
+ # template = get_template(args.template, engine.tokenizer, args.system)
43
+ # engine.default_template = template
44
+
45
+ # method2
46
+ # model, processor = args.get_model_processor()
47
+ # model = Swift.from_pretrained(model, adapter_path)
48
+ # template = args.get_template(processor)
49
+ # engine = PtEngine.from_model_template(model, template)
50
+
51
+ # method3
52
+ model, tokenizer = get_model_tokenizer(args.model)
53
+ model = Swift.from_pretrained(model, adapter_path)
54
+ template = get_template(args.template, tokenizer, args.system)
55
+ engine = PtEngine.from_model_template(model, template)
56
+
57
+ resp_list = engine.infer([infer_request], request_config)
58
+ response = resp_list[0].choices[0].message.content
59
+ print(f'lora-response: {response}')
60
+
61
+
62
+ if __name__ == '__main__':
63
+ from swift.llm import (PtEngine, RequestConfig, AdapterRequest, get_template, BaseArguments, InferRequest,
64
+ safe_snapshot_download, get_model_tokenizer)
65
+ from swift.tuners import Swift
66
+ infer_request = InferRequest(messages=[{'role': 'user', 'content': 'who are you?'}])
67
+ # infer_lora(infer_request)
68
+ infer_multilora(infer_request, 'pt')