
| 파라미터 | 설명 |
|---|---|
generate | LLM 출력을 생성하는 핵심 함수 |
SamplingParams | 샘플링 옵션을 설정하는 클래스 |
temperature | 출력의 무작위성 제어 (0: 결정적 / 1: 창의적) |
max_tokens | 생성할 최대 토큰 수 |
top_p | 누적 확률 기반 샘플링 (0~1) |
top_k | 확률이 높은 k개의 후보 중에서 선택 |
pip install vllm
```python
from vllm import LLM, SamplingParms
# VLLM 모델 및 토크나이저 로드
BASE_MODEL = "추론에 사용할 모델명"
llm = LLM(model=BASE_MODEL, max_model_len=8192,download_dir='/data',tensor_parallel_size=8,gpu_memory_utilization=0.8)
# 샘플링 파라미터 설정
text = '질문(Prompt)'
sampling_params = SamplingParams(temperature=0, max_tokens=4096)
text = system_prompt + df['instruction'][0]
outputs = llm.generate([text],sampling_params)
response = outputs[0].outputs[0].text.strip()
print(response)
# 터미널에서 실행
python -m vllm.entrypoints.api server \
--model #허깅페이스 모델명 or 모델 경로 \
--max-model-len= # 모델의 출력 최대 길이 지정 \
--tensor-parallel-size # 추론 및 Serving에 사용 할 gpu 갯수 지정
--gpu_memory_utilization=0~1 # gpu 1개 당 사용할 메모리 퍼센트 지정
# Jupyter Notebook 실행
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=['*'],
allow_credentials=True,
allow_methods=['*'],
allow_headers=['*'],
)
class InputText(BaseModel):
text: str
item: str
@app.get('/')
async def root():
return "Hello World!"
@app.post('/editing')
async def edit_orion(input_text: InputText):
item = input_text.item
item_text = input_text.text
messages = [{"role": "user", "content": "질문"]
# instruct 모델은 chat template이 존재하여 아래와 같은 방법으로 진행가능
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
vllm_host = "http://localhost:8000"
url = f"{vllm_host}/generate"
headers = {"Content-Type": "application/json"}
data = {
"prompt": text,
"max_tokens": 4096,
"temperature": 0.1,
"top_k": 50,
"top_p": 0.95,
}
response = requests.post(url, headers=headers, data=json.dumps(data))