Llama3-8B 서빙¶
TorchServe에서 Custom handler 구조를 이용하여 vLLM 엔진을 사용할 수 있는 vLLM Handler를 제공합니다. 이 vLLM Handler를 이용하여 vllm-rbln과 함께 continuous batching을 이용하여 LLM 모델을 서빙할 수 있습니다. 이 튜토리얼에서는 TorchServe의 vLLM Handler와 vllm-rbln을 사용하여, Llama3-8B 모델을 서빙을 하는 방법을 안내합니다.
TorchServe 환경 구성 방법은 TorchServe에 정리되어 있습니다. 이 페이지에서 소개된 모델 컴파일 및 TorchServe 환경 구성용 YAML 파일은 RBLN Model Zoo에서 확인할 수 있습니다.
Note
이 튜토리얼은 사용자가 RBLN SDK 기반의 모델 컴파일 및 추론에 대해 잘 이해하고 있다는 가정하에 작성되었습니다. RBLN SDK 사용법에 익숙하지 않다면 RBLN Optimum 튜토리얼과 파이썬 API 페이지를 먼저 읽어 보는 것을 권합니다.
사전준비¶
시작하기에 앞서 TorchServe, vllm-rbln, optimum-rbln이 설치된 환경 및 컴파일된 Llama3-8B 모델이 필요합니다.
- 우분투 20.04 LTS(Debian bullseye) or higher
- RBLN NPU가 장착되어있는 서버(예, 리벨리온 Rebel100™ 또는 ATOM™ NPU)
- Python: 3.10–3.14
- RBLN SDK(드라이버, 컴파일러)(RBLN SDK Driver >= Rebel100™: v3.5.1
ATOM™: v3.4.1, rebel-compiler >= 0.12.0) - TorchServe
- Llama3-8B
- vllm-rbln >= 0.12.0
- optimum-rbln >= 0.12.0
Llama3-8B 컴파일¶
먼저 서빙에 사용할 모델을 준비하기 위해서, rbln_model 디렉토리를 생성하고 이동합니다.
optimum-rbln를 이용하여 Llama3-8B 를 컴파일 합니다. 해당 코드는 리벨리온 RBLN Model Zoo를 사용하였습니다.
Note
배치 크기는 서빙 환경에 맞게 선택할 수 있습니다. 여기에서는 1로 설정합니다.
Note
배치 크기는 서빙 환경에 맞게 선택할 수 있습니다. 여기에서는 4로 설정합니다. Llama3-8B 모델을 사용하려면 4개의 RBLN NPU가 필요하며, 모델별 구동에 필요한 RBLN NPU 개수는 RBLN Optimum Multi-NPUs Supported Models에서 확인할 수 있습니다.
TorchServe를 이용한 모델 서빙¶
TorchServe에서 모델 서빙은 모델 아카이브(.mar) 파일 단위로 이루어집니다. .mar 파일에는 모델 서빙에 필요한 모든 정보가 포함됩니다. 본 섹션에서는 .mar 파일 생성 및 생성된 .mar 파일을 이용하여 모델을 서빙하는 방법에 대해 설명합니다.
RBLN vLLM Handler¶
TorchServe에서 vLLM Engine을 사용하고자 할 때 TorchServe에서 제공하는 vLLM Handler를 활용할 수 있습니다. 그러나 TorchServe의 vLLM Handler에 반영된 vLLM 버전과 개발 환경에 설치된 vLLM 패키지 버전의 호환성에 따라 동작이 상이할 수 있습니다. 이 문서에서는 vllm-rbln의 최신 버전에 호환되는 RBLN vLLM Handler를 아래와 같이 제안합니다.
| rbln_vllm_handler.py | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | |
모델 서빙 설정 작성¶
아래와 같이 TorchServe로 Llama3-8B 모델을 서빙하기 위한 설정인 model_config.yaml 파일을 작성합니다. 이 파일은 Llama3-8B 모델을 서빙하는데 필요한 Worker 갯수와 TorchServe의 Frontend 파라미터를 지정하고, vLLM 엔진의 설정을 포함합니다.
설정에 대한 자세한 정보는 TorchServe 문서 - Advanced configuration에서 확인할 수 있습니다.
model 설정은 서빙에 사용할 Llama3-8B 모델이 저장된 디렉토리와 정확히 일치해야 합니다.
torch-model-archiver를 이용한 모델 아카이빙¶
아래와 같이 모델 아카이브(.mar) 파일이 저장될 경로인 model_store 디렉토리를 생성합니다. 이 디렉토리에 Llama3-8B 모델 아카이브 파일이 저장됩니다.
이제 모델 아카이브 파일을 만들기 위해 필요한 내용이 모두 준비되었습니다. torch-model-archiver 도구를 이용해 모델 아카이브 파일을 만들 수 있습니다.
사용된 옵션은 아래와 같습니다.
--model-name: 서빙할 모델이름으로llama3-8b으로 설정합니다.--version: TorchServe로 서빙할 모델에 대한 버전입니다.--handler: 요청 모델에 대한 Handler Script를 지정하는 옵션이며, 위에서 작성한rbln_vllm_handler.py를 지정합니다.--config-file: 서빙할 모델의 YAML 설정을 설정하는 옵션으로, 위에서 작성한model_config.yaml로 설정합니다.--archive-format: 아카이빙 포맷을 설정하는 옵션으로,no-archive로 설정합니다.--export-path: 아카이빙 결과물을 저장할 경로를 설정하는 옵션으로, 위에서 생성한model_store디렉토리로 설정합니다.--extra-files: 의존성이 있는 파일들을 추가로 아카이빙에 포함할 리스트를 설정하는 옵션으로 설정한 디렉토리를 제외한 내부 디렉토리의 구조를 그대로 포함하여 아카이빙합니다.
torch-model-archiver 를 이용한 아카이빙이 정상적으로 완료되면, model_store 디렉토리에 서빙할 모델 이름인 llama3-8b 의 디렉토리가 생성됩니다. no-archive 옵션으로 아카이빙 하였으므로, .mar 파일로 아카이빙되는 대신에 llama3-8b에 저장됩니다. no-archive 옵션을 사용하지 않았을 경우 llama3-8b 디렉토리 대신 llama3-8b.mar 파일이 생성됩니다.
torchserve 실행¶
torchserve를 이용하여 서빙을 시작합니다. 서빙에 사용되는 파라미터는 아래와 같습니다.
--start: model-server를 시작합니다.--ncs: --no-config-snapshots 옵션입니다.--model-store: 모델을 로드하거나 기본적으로 로드할 모델들의 경로를 지정합니다.--models: 서빙할 모델을 지정합니다.--disable-token-auth: 단순한 서빙 동작 테스트를 하기 위하여 token authorization을 비활성화 합니다.
TorchServe가 정상적으로 실행되면 백그라운드에서 동작합니다. TorchServe의 동작을 중지하기 위한 명령어는 아래와 같습니다.
TorchServe는 Management API의 기본 설정으로 8081 포트를 통해 요청을 받습니다.
서빙 되고 있는 모델 리스트는 아래와 같이 Management API를 통해 확인할 수 있습니다.
정상적으로 동작할 경우 Llama3-8B 모델이 서빙되고 있는 것을 확인할 수 있습니다.
TorchServe Inference API 기반 추론 요청¶
torchserve로 시작한 Llama3-8B 서빙을 테스트하기 위해서 TorchServe Inference API의 Prediction API를 이용하여 추론을 요청합니다.
curl을 이용한 간단한 테스트¶
TorchServe Inference API는 기본설정으로 8080 포트를 통해 요청을 받습니다.
curl을 이용하여 아래와 같이 8080 포트로 HTTP 요청을 전송하면 간단히 테스트할 수 있습니다.
정상 동작할 경우 아래와 같은 응답이 출력됩니다.
TorchServe 저장소 예제 테스트¶
TorchServe 저장소는 vLLM을 이용한 서빙 예시를 제공합니다. 자세한 정보는 TorchServe 저장소의 README.md에서 확인할 수 있습니다.
본 예제에서는 OpenAI의 Text completion과 Chat interface를 이용하여Llama3-8B 모델을 테스트하는 방법을 소개합니다.
Text Completion¶
-
테스트 명령어
-
결과물
OUTPUT
Chat Interface¶
-
테스트 명령어
-
결과물
OUTPUT