데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      claude code의 reasoning effort는 vllm에도 효과가 있는가?

      Teus 26.07.28
      232 2 1
      DEVOTEE 요약
      본 블로그 글은 Claude Code의 'reasoning effort' 설정이 vLLM 기반 오픈소스(OSS) 모델에서 효과가 있는지 소스코드 수준에서 점검합니다. 해당 설정값은 vLLM을 통해 GLM 모델의 시스템 프롬프트로 전달되며, 'high'로 지정될 때만 'Reasoning Effort: High' 문구가 추가되고, 다른 모든 값은 'Max'로 처리됩니다. 따라서 'high' 이외의 값은 큰 효과를 기대하기 어렵고, 토큰 소모를 줄이려 해도 오히려 증가할 수 있어 실질적인 기능 변화는 제한적입니다.

      안녕하세요. teus입니다.


      이번 포스팅은, claude code에서 설정할 수 있는 reasoning effort가 과연 효과가 있는지

      소스코드 레벨에서 점검해봅니다.


      0. Effort

      claude code를 보면, 위처럼 effort를 설정할 수 있습니다.

      원래 claude 모델을 쓸 때는 위와같은 설정을 쓰는게 가정하고 학습이 되었겠지만

      사내에서는 claude 모델이 아니라, vLLM기반의 OSS모델을 사용 중 입니다.

      그러면 과연 해당 기능이 제대로 동작할 수 있을까요?


      GLM 5.2 모델 기준 flow(정리본)

      Claude Code /effort high
              │
              ▼
      POST /v1/messages
      output_config.effort = "high"
              │
              ▼
      AnthropicMessagesRequest
              │
              ▼
      ChatCompletionRequest.reasoning_effort = "high"
              │
              ▼
      chat_template_kwargs = {
        reasoning_effort: "high",
        enable_thinking: true
      }
              │
              ▼
      GLM 5.2 chat_template.jinja
              │
              ├─ <|system|>Reasoning Effort: High
              └─ <|assistant|><think>
              │
              ▼
      GLM 5.2 자동회귀 추론
              │
              ▼
      <think>...</think> 파싱
              │
              ▼
      Claude Code thinking/text/tool_use 블록


      두괄식 결론

      Effort를

      올리는건 조금 의미있고

      내리는건 의미없다.(원효대사 해골물)


      ​1. 소스코드 리딩

      먼저 해당하는 기능을 활성화할 경우, 아래와같이 /messages로 요청을 보낼 때 config가 추가됩니다.

      ...
          "output_config": {
            "effort": "high"
          },
      ...

      그리고, 이제 위 요청은 vLLM으로 들어가게 됩니다.

      최신 vLLM의 경우 /messages로 보내진 요청을 바로 처리할 수 있습니다.

      그래서 보는것처럼, /messages로 보내진 요청은 이제

      #https://github.com/vllm-project/vllm/blob/v0.23.0/vllm/entrypoints/anthropic/api_router.py#L48-L70
      
      @router.post(
          "/v1/messages",
          ...
      )
      @with_cancellation
      @load_aware_call
      async def create_messages(request: AnthropicMessagesRequest, raw_request: Request):
          handler = messages(raw_request)
          ...
          try:
              generator = await handler.create_messages(request, raw_request)

      위 과정을 통해서 /messages(앤트로픽 표준) -> /chat/completion(openai 표준) 으로 변환되고


      변환된 openai msg를 사용해서 huggingface 모델에서 추론이 시작됩니다.

      # https://github.com/vllm-project/vllm/blob/0fc695fc6d1d82e9a5ac6835ac8e4e1c83703665/vllm/entrypoints/anthropic/serving.py#L474
          async def create_messages(
              ...
          ) -> AsyncGenerator[str, None] | AnthropicMessagesResponse | ErrorResponse:
              ...
              chat_req = self._convert_anthropic_to_openai_request(request)
              ...
              generator = await self.create_chat_completion(chat_req, raw_request)
              ...
              return self.message_stream_converter(generator)

      이때

          "output_config": {
            "effort": "high"
          },

      위처럼 전달된 값은 openai 호환의 reasoning_effort라는 config로 변환되고

      # https://github.com/vllm-project/vllm/blob/v0.23.0/vllm/entrypoints/anthropic/serving.py#L383-L401
      if output_config and output_config.effort is not None:
          req.reasoning_effort = output_config.effort

      위 내용이 이제 huggingface 모델의 추론에 영향을 주게됩니다.


      https://docs.vllm.ai/en/stable/features/reasoning_outputs/#automatic-enable_thinking-activation

      image.png

      reasoning_effort의 경우 vLLM내부에서는 enable_thinking을 조절하는 용도로 사용되는 것으로 보입니다.

      그리고, 마지막으로 reasoning_effort변수와 enable_thinking 변수는 GLM 모델의 추론의 template 로 들어가게 됩니다.

      chattemplate

      set effective_reasoning_effort =
        'high'
        if reasoning_effort == 'high'
        else 'max'
      
      <|system|>Reasoning Effort:
      {{ effective_reasoning_effort | capitalize }}

      보는것처럼 high라고 들어올경우는 high라고 남기고, 나머지의 경우 모두 max로 처리해버리게 되어있습니다.

      그리고, 나머지 system prompt에 Reasoning Effort라는 부분에 단어를 남기고, 다음단어 예측에 원하는 동작이 되기를 기도메타를 하게 되어있습니다.


      그래서

      1. high라는 값일 넣으면, system prompt에 high가 들어간다.

      2. high 말고 무슨 값을 넣던지 max가 들어간다.

      3. 그래서 사실상 effort를 변화하는건 큰 효과가 없고, 토큰소모 줄일라고 effort를 내리면 오히려 토큰소모만 증가한다.

      4. high말고 xhigh, max 를 넣으면 좋아질 가능성은 조금 있다.(일단 system prompt에 high 말고 max로 통일되어서 들어가니깐)

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      Teus 님의 최신 블로그

      더보기
      동영상 기고하기