텍스트 생성¶
Overview¶
이 튜토리얼에서는 RBLN SDK C/C++ Runtime API
를 사용하여 Llama3-8b 모델로 추론을 실행하는 방법을 설명합니다.
모델은 RBLN SDK Python API
를 사용하여 컴파일되며, 생성된 *.rbln
파일은 RBLN SDK C/C++ Runtime API
로 추론에 사용됩니다.
이 접근 방식은 Python에서 모델을 준비하는 편의성과 C/C++의 성능 이점을 결합합니다.
튜토리얼에 사용된 전체 코드는 RBLN Model Zoo에서 확인할 수 있습니다.
Setup & Installation¶
시작하기 전에 시스템 환경이 올바르게 구성되어 있으며, 필요한 모든 필수 패키지가 설치되어 있는지 확인하십시오. 다음 항목이 포함됩니다:
- System Requirements:
- Packages Requirements:
- Installation Command:
Note
RBLN SDK는 .whl
패키지로 배포됩니다. RBLN 컴파일러와 런타임을 사용하려면 RBLN Portal 계정이 필요합니다.
RBLN Python API
를 사용한 컴파일¶
모델 컴파일¶
optimum-rbln
의 RBLNLlamaForCausalLM
클래스를 임포트하고 from_pretrained()
를 사용하여 모델을 다운로드 및 컴파일합니다. model.save_pretrained()
로 컴파일된 모델을 디스크에 저장합니다.
입력 데이터 생성¶
transformers
라이브러리의 AutoTokenizer
를 사용해 입력을 토크나이즈합니다. 생성된 바이너리 파일 c_input_ids.bin
을 디스크에 저장합니다.
Note
이 튜토리얼은 Llama3-8b
에 대해 RBLN SDK C/C++ Runtime API
를 사용하는 방법을 보여줍니다. 전처리 및 후처리(토크나이제이션)는 Python API로 처리됩니다.
RBLN SDK C/C++ Runtime API
를 사용한 추론¶
CMake 빌드 스크립트 준비¶
예제 애플리케이션의 종속성과 링크 설정을 정의합니다.
Note
${YOUR_SAMPLE_PATH}
는 CMake 파일 및 추론 코드가 있는 디렉토리를 가리킵니다.
추론을 위한 코드 준비¶
추론에 사용되는 주요 소스 파일은 다음과 같습니다:
-
llama_main.cc: 모델 로딩 및 실행을 위한 메인 애플리케이션
-
llama_class_example.hpp/cc: 추론 래퍼 및 워크플로우 관리
-
llama_tensor_example.hpp/cc:
RBLN SDK C/C++ Runtime API
를 사용한 추론 래퍼로, 다음을 포함합니다:-
Llama3-8b
의 prefill 및 decode 단계 관리 -
입출력 버퍼 처리
-
모델 실행 흐름 제어
-
-
llama_tensor_op_example.hpp: 텐서 조작 연산
llama_main.cc
llama_class_example.hpp
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 |
|
llama_class_example.cc
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 |
|
llama_tensor_example.hpp
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 |
|
llama_tensor_op_example.hpp
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 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
|
CMake로 빌드 및 실행¶
빌드 디렉토리를 생성한 후 cmake
를 실행하고 코드를 컴파일합니다. 컴파일된 바이너리를 실행하면 토큰 ID 시퀀스를 포함한 출력 파일이 생성됩니다.
출력 데이터에서 텍스트 생성¶
C/C++ 실행 파일이 생성한 토큰 ID 시퀀스를 Python 스크립트를 사용하여 읽고 디코딩하여 사람이 읽을 수 있는 텍스트로 변환합니다.
결과는 다음과 같이 표시됩니다:
Summary and References¶
이 튜토리얼에서는 RBLN SDK Python API를 사용해 Llama3-8b 모델을 컴파일하고, RBLN SDK C/C++ Runtime API로 추론을 실행하는 과정을 보여주었습니다. 결과로 생성된 실행 파일은 토큰 ID 시퀀스를 생성하며, 이를 사람이 읽을 수 있는 텍스트로 디코딩할 수 있습니다.