speculative decoding에 대해서 문의가 있습니다. target model 단독보다 결과가 느립니다.
안녕하세요. 강사님.
저서하신 책의 내용이 좋아서 Fastcampus의 강의까지 수강해서 내용을 듣고 있습니다.
다름이 아니라 Part3의 speculative decoding에 대해서 문의가 있습니다.
해당 내용을 듣고 서빙의 속도를 높이고자 vllm을 가지고 테스트를 해봤습니다.
vllm은 최신 버젼은 0.6.4.post1을 사용했고
Draft model은 3B정도의 모델로 Target Model은 더 큰 두자리 수준의 모델을 사용했습니다. (둘다 Vocab size는 동일한 모델입니다.)
vllm serve "$MODEL" \ --trust-remote-code \ --host "0.0.0.0" \ --port "8000" \ --served-model-name "SPTest" \ --speculative-model "$SP_MODEL" \ --num-speculative-tokens 5 \ --tensor-parallel-size "2" \ --gpu-memory-utilization 0.90 \ --dtype "bfloat16" \ --max-model-len "16384" \ --disable-frontend-multiprocessing \ > vllm.sp.log 2>&1 &
로 구동해서 테스트를 진행했는데
결과가 Target Model을 단독으로 돌렸을때보다 속도가 더 느리게 나옵니다. Chat model을 가지고 대화 생성 Task를 수행했습니다.
(--num-speculative-tokens 은 1,2,5 모두 해봤는데 결과는 같습니다.)
이게 왜 그럴까요? 제가 뭔가 잘못한 것일까요?
그리고 그냥 드는 생각이
Draft Model로 토큰을 생성을 한다고 했을 때. 예를 들어서 질문이 "콜라 칼로리 알려줘"일때
GPT-4o의 답변은 "콜라의 칼로리에 대한 정보는 도움이 될 수 있는 자료가 많아 알려드리겠습니다." 로 시작을 하고
GPT-4o mini의 답변은 "코카콜라의 칼로리에 대해 말씀드리겠습니다. "로 시작하는데요.
그렇다면 GPT4-o mini(Draft model)의 답변도 틀린게 아닌데 생성한 토큰을 GPT-4o(Target model)의 기준에서 Scoring을 하면 reject sampler에서는 accept가 안되는 답변으로 판단되는거 아닌가요?
그렇다고 하면 결국 계속 불필요한 작업을 앞에서 Draft model이 하면서 늦어지게 되는게 아닐까 해서요.
제가 이해를 잘못하고 있는 부분이 있다면 알려주시면 감사하겠습니다.
좋은 하루 되세요.