이 기사는 베이징에서 열린 "클라우드 네이티브✖️AI 시대의 마이크로서비스 아키텍처 및 기술 실습" CloudWeGo 기술 살롱 베이징 행사에서 ByteDance-Flow R&D 엔지니어 Du Shaofeng의 "AI 시나리오에 구현된 Kitex Thrift Streaming" 연설을 바탕으로 작성되었습니다. 2024년 3월 30일 베이징에서. "연습"에서 편집되었습니다.
개요
ByteDance Prompt 플랫폼은 사용자에게 포괄적인 Prompt 개발, 조정, 평가 및 애플리케이션 전체 수명 주기 기능을 제공하는 것을 목표로 합니다. 이러한 기능 중에서 타자기 효과에 대한 대규모 모델 결과 스트리밍은 중요한 기능입니다. SSE(Server-Sent Events)를 기반으로 구현하는 것이 가능하지만 추가로 HTTP 서비스를 작성해야 하므로 개발이 복잡해집니다. 폴링 방법은 간단하지만 사용자 경험이 이상적이지 않고 너무 서투른 것 같습니다. gRPC의 경우 성능은 우수하지만 호환성 문제가 발생하여 배포 및 유지 관리가 복잡해질 수 있습니다. 따라서 Kitex의 Thrift 스트리밍 기능을 통해 스트리밍 인터페이스를 성공적으로 구현하여 사용자에게 원활하고 효율적인 타자기 효과 대형 모델 결과 출력 경험을 제공했습니다.
1. 사업배경
AI 기술이 지속적으로 발전하면서 사람들의 삶은 엄청난 변화를 겪고 있습니다. Byte의 AI 제품인 Doubao를 예로 들어보겠습니다. 이 제품의 에이전트는 사람들에게 많은 새로운 경험을 선사했습니다. 그 중에서도 AI 남자친구, AI 여자친구 등 흥미로운 지능형 로봇이 특히 인기가 높다.
이 모든 것은 대형 모델과 밀접하게 관련된 개념인 프롬프트와 분리될 수 없습니다. 간단히 말해서 Prompt는 특정 요구 사항을 충족하는 텍스트 출력을 생성하도록 모델을 안내하기 위해 사전 훈련된 모델에 대한 텍스트 입력입니다. 비유적으로 말하면 Prompt는 대형 모델을 위한 독점적인 꿈을 만드는 것과 같습니다. 이를 통해 특정 시나리오에서 대형 모델이 보다 적절하고 타겟화된 답변을 제공하도록 안내할 수 있습니다.
AI 여자친구를 예로 들면, 세심하게 디자인된 프롬프트를 통해 대형 모델에게 그 역할이 온화하고 사려 깊은 가상 여자친구임을 알려줄 것입니다. 동시에 사용자와 부드럽고 사려 깊은 소통을 요구하고, 경청, 이해, 격려, 제안 등의 기술을 갖추도록 요구하는 등 일부 제한 사항도 설정할 예정입니다. 또한 사용자에게 인사할 때 이름을 말하도록 안내하고, 사용자에게 적합한 별명을 부여하고, 사용자와 심층적인 소통을 진행하고 유용한 제안을 제공하는 등 워크플로도 자세히 설명합니다.
이러한 프롬프트를 통해 우리는 대형 모델에 대한 완전한 "꿈"을 구축하여 AI 여자친구임을 이해하고 사용자와 어떻게 상호 작용해야 하는지 이해할 수 있도록 합니다. 이 프롬프트가 활성화되면 대형 모델과의 질문 및 답변 세션이 있을 때 프롬프트에 따라 해당 응답이 제공됩니다. 예를 들어, 우리가 인사를 하면 이름을 부르도록 안내하고, 귀여운 별명을 붙여주고, 격려와 안도감을 줍니다.
이 예에서 볼 수 있듯이 Prompt는 특정 시나리오에서 대규모 모델의 출력에 결정적인 역할을 합니다. 또한 출력 프로세스 중 토큰 소비와 대형 모델의 응답 시간에도 영향을 미칩니다. 따라서 우수한 프롬프트는 모델 출력을 향상시키는 데 매우 중요합니다.
2. 수요 시나리오
ByteDance Flow 팀은 프롬프트 개발자가 프롬프트를 설계, 반복, 평가 및 최적화하여 LLM(대형 언어 모델)의 표현력을 향상할 수 있도록 설계된 포괄적이고 성숙한 플랫폼/방법을 구축하기 위해 노력하고 있습니다. 개발 단계에서 우리는 사용자가 효율적이고 정확한 프롬프트를 작성하고 그에 따라 디버깅할 수 있도록 구조화된 생성 및 안내 생성을 제공할 계획입니다.
개발이 진행됨에 따라 Prompt가 답변의 정확도를 높일 수 있도록 APO(Auto Prompt Optimization) 방식은 물론 COT(Chain of Thought), Few Shot 등 자동 튜닝 기술을 추가로 도입할 예정입니다. 동시에 토큰 소비에서 대형 모델의 효율성을 최적화하기 위해 프롬프트를 확장하는 기능도 제공할 것입니다.
또한 Prompt의 효율성을 종합적으로 평가하기 위해 다양한 데이터 세트를 기반으로 Prompt를 점수화하고 성능 병목 현상에 대한 심층 분석을 수행하여 목표한 개선을 수행할 것입니다. 결국 우리는 원클릭 배포 기능을 제공하여 개발자가 Prompt 기능과 그 뒤에 있는 대규모 모델을 자신의 애플리케이션에 쉽게 통합할 수 있도록 할 것입니다.
물론 이러한 기능의 구현은
실시간 스트리밍
기술의 지원과 불가분의 관계입니다. GPT, Doubao, Baidu AI 검색 등 여러분이 경험한 AI 기능과 마찬가지로 사용자가 질문하면 모두 타자기 스타일의 답변을 사용하여 사용자가 화면에 데이터가 지속적으로 유입되는 것을 느낄 수 있도록 하여 유창성을 향상시킵니다. 채팅과 응답 속도. 이
실시간 스트리밍
기술은 Prompt 플랫폼이 제공해야 하는 가장 기본적인 기능입니다. 네트워크 전송을 위해 데이터를 여러 데이터 스트림으로 분할함으로써 네트워크 대기 시간을 효과적으로 줄이고 성능을 향상하며 사용자가 대규모 언어 모델과 상호 작용할 때 더 나은 경험을 보장할 수 있습니다.
3. 솔루션
스트리밍 출력 기능을 구현하기 위해 심층적인 연구를 수행하고 다양한 옵션을 고려했습니다.
-
투표
-
HTTP SSE
-
Kitex gRPC 스트리밍(protobuf)
-
Kitex Thrift 스트리밍
첫째, 투표 방식은 유연성이 부족하여 우리의 요구 사항을 충족하지 못하여 제외되었습니다. 둘째, HTTP 기반 SSE가 실현 가능한 솔루션이지만 RPC(원격 프로시저 호출)에 대한 엄격한 요구 사항도 있다는 점을 고려하면 보다 적합한 솔루션도 찾아야 합니다. 또한 Protobuf 프로토콜의 스트리밍 지원이 특히 Thrift 인터페이스 측면에서 우리의 요구 사항을 완전히 충족하지 못한다는 사실을 발견했습니다. 마지막으로 우리는 Thrift Streaming에 대한 Kitex의 지원을 확인했습니다. 당시 Kitex Thrift Streaming은 개발 단계에 있었고 우리는 첫 번째 사용자가 되어 이를 기반으로 전체 Prompt 플랫폼의 기본 프레임워크를 구축하기로 결정했습니다.
아키텍처 설계 측면에서는 먼저 LangChain을 벤치마킹하고 LLM 엔지니어링 서비스를 구축했습니다. 이를 바탕으로 Prompt 서비스를 더욱 구축하여 가장 기본적인 Prompt 관리 및 응용 기능을 제공합니다. 프런트엔드와 상호작용하기 위해 API Gateway를 통해 HTTP 인터페이스를 제공합니다. 마이크로서비스 간 통신 측면에서 Kitex 프레임워크를 사용하여 스트리밍 인터페이스와 비스트리밍 인터페이스를 지원하여 데이터의 효율적인 전송 및 처리를 보장합니다.
이 솔루션을 통해 우리는 스트리밍 출력 기능을 성공적으로 구현하여 사용자에게 더욱 부드럽고 효율적인 AI 상호 작용 경험을 제공했습니다. 동시에 우리는 향후 확장과 최적화를 위한 견고한 기반도 마련했습니다.
4. 연습과 함정
-
스트리밍 통화 프로세스
스트리밍 통화 프로세스는 사용자가 질문을 시작하면 시작됩니다. 이 요청은 먼저 게이트웨이로 전송된 후 다운스트림 Prompt RPC 인터페이스와의 연결을 설정합니다. Prompt RPC 인터페이스는 모델과 지속적으로 상호 작용하고 모델의 출력 결과를 얻는 일을 담당하는 LLM 엔지니어링 서비스와의 통신을 추가로 설정합니다. 이러한 결과는 게이트웨이 계층에 도달할 때까지 스트리밍 방식으로 계층별로 상위로 전송되고 최종적으로 스트리밍 방식으로 사용자에게 표시됩니다.
이 과정에서 스트리밍 호출을 처리하기 위해 Prompt 서비스에 스트리밍 인터페이스를 작성했습니다. 인터페이스는 먼저 다운스트림 인터페이스를 호출하여 다운스트림과 연결을 설정한 다음 for 루프를 통해 다운스트림에서 우리에게 내보낸 스트리밍 패킷의 결과를 지속적으로 수신합니다. 데이터 패킷이 수신되면 오류가 발생하거나 스트림이 닫히고 사이클이 종료될 때까지 send 메서드를 통해 상위 계층에 투명하게 전송합니다.
구현 과정에서 우리는 Kitex Thrift Streaming의 단순성을 경험했습니다. 그러나 몇 가지 문제도 발생했습니다. 특히 오류 처리 측면에서는 코드가 실행될 때 예상한 결과를 얻을 수 없으며 심지어 CPU 부하가 너무 높아진다는 사실을 발견했습니다.
오류 로그를 추가로 분석한 결과, 개별 요청, 특히 첫 번째 패킷의 QPM(Query Per Second) 제한 문제와 관련된 오류 메시지가 있음을 발견했습니다. 우리의 코드 로직에 따르면 이러한 오류가 발생하면 for 루프를 신속하게 종료해야 하지만 실제 상황은 그렇지 않습니다. 그래서 우리는 문제를 찾기 위해 Kitex에서 제공하는 문제 해결 방법을 사용하기 시작했습니다. Kitex는 RPCStart 및 RPCEnd에 대한 저장 지점은 물론 패킷 수신 및 전송 이벤트에 대한 보다 세분화된 저장 지점을 제공합니다. 이러한 매몰지점 분석을 통해 Kitex는 요청 전체를 정상적인 응답으로 인식하고, 호출 링크를 통해 대량의 데이터 패킷이 전송되는 것을 확인하였다. 단일 패키지의 관리 정보를 추가로 확인해 본 결과 Kitex에서는 정상적인 응답으로 인식되는 것으로 나타났습니다.
예비 판단 결과, Kitex의 스트리밍 처리 과정에서 업무상 오류가 무시되어 오류를 정확하게 식별하지 못한 것으로 판단됩니다. Kitex팀과 소통한 뒤 사업상태 오류(사업상태 오류) 인식을 코드에 추가하는 등 그에 따른 조정을 했다.
이러한 오류 처리 경험을 바탕으로 연결 설정 단계의 권한 오류, 첫 번째 패킷 단계의 TPM/QPM 오버런, 중간 패킷 단계의 스트림 시간 초과 및 콘텐츠 등 스트리밍 호출에서 발생할 수 있는 다른 비정상적인 시나리오를 추가로 분석했습니다. 오류 등을 검토합니다. 우리는 연결을 설정할 때 오류 정보를 신속하게 반환할 수 있는지, 첫 번째 패킷과 중간 패킷이 오류를 반환할 때 스트림 대기를 신속하게 중지할 수 있는지 여부 등 이러한 시나리오에서 Kitex Thrift Streaming의 오류 처리 성능에 중점을 두었습니다. Kitex 팀과의 공동 조정 및 테스트를 거친 후 이러한 시나리오의 오류 처리는 마침내 기대에 부합했습니다.
-
서비스 거버넌스 측면에서
서비스 거버넌스 측면에서 우리는 시간 초과와 전류 제한의 두 가지 주요 측면에 특별한 주의를 기울입니다.
첫째, 시간 초과 관리가 중요합니다. 우리 모듈은 대규모 모델과 상호 작용하기 때문에 이 상호 작용에는 몇 초 또는 몇 분 정도의 응답 시간이 포함될 수 있습니다. 따라서 우리는 HTTP 계층과 RPC 계층 모두에서 스트림 처리에 대해 분 단위의 시간 초과 제한을 설정했습니다. 이를 통해 for 루프를 종료할 수 없어 발생하는 서비스 차단을 방지하고 서비스의 안정성과 가용성을 보장할 수 있습니다.
전류 제한 측면에서 Kitex는 스트림 생성 시 전류 제한을 지원하지만 LLM 시나리오의 경우 연결 설정 시 QPM 전류 제한뿐만 아니라 대규모 모델 토큰 소비의 현재 제한에도 중점을 둡니다. 대규모 모델의 추론 프로세스는 많은 양의 토큰 소비를 생성하므로 제한하지 않으면 리소스 고갈 및 서비스 충돌이 발생할 수 있습니다. 따라서 우리는 Kitex를 사용하여 Jianlian의 현재 제한을 구현하는 동시에 자체 분산 구성 요소를 사용하여 다양한 모델에서 토큰 소비를 계산하고 이에 따라 토큰 수준의 현재 제한을 구현합니다. 이렇게 하면 리소스 사용량을 효과적으로 제어하고 서비스 과부하를 방지할 수 있습니다.
하지만 Kitex에 대한 기대도 있습니다. Kitex가 향후 패킷 단위로 맞춤형 전류 제한 기능을 제공할 수 있기를 바랍니다. 이러한 방식으로 현재 제한 규칙을 보다 유연하게 정의하고 리소스 사용량을 보다 정확하게 제어할 수 있어 서비스의 안정성과 성능이 더욱 향상됩니다.
5. 미래의 기대
AI 기술의 지속적인 개발과 적용으로 인해 우리는 AI 시나리오에서 마이크로서비스 프레임워크의 기능에 대한 기대가 높아지고 있습니다. 특히 편의성, AI 시나리오의 기능, 기존 프레임워크 기능의 적응 측면에서 더 많은 혁신과 발전이 있기를 바랍니다.
-
편의
우선, 편의성 측면에서 우리는 마이크로서비스 프레임워크가 특히 스트리밍 인터페이스 테스트를 위해
더 많은 테스트 도구에 대한 액세스를 지원할 것으로 기대합니다
. 현재 패키징 호출을 위한 비스트리밍 인터페이스 작성에 주로 의존하는 Kitex Thrift 스트리밍 인터페이스를 테스트하는 데에는 여전히 특정 제한 사항이 있습니다. 앞으로는 스트리밍 인터페이스를 더욱 편리하게 만들어 다양한 테스트 도구를 지원하고 일반화된 호출 및 기타 방법을 통해 개발 효율성을 높일 수 있기를 바랍니다.
-
AI 시나리오 능력
AI 기술이 활발히 발전하면서 사용자 경험과 기능을 최적화하기 위해 AI 기능을 통합하는 제품이 점점 더 많아지고 있습니다. AI 시나리오에서는 Kitex와 같은 마이크로서비스 프레임워크에 대한 기대가 더 높습니다. 이는 AI 구성 요소의 통합 및 조정을 더 잘 지원하고 기존 프레임워크 기능에 적응할 수 있기를 바랍니다.
-
즉시 사용 가능한 AI 구성요소 조정 기능
현재 개발 관행에서 AI 기능을 통합해야 할 때 개발자는 일반적으로 프롬프트 호출, 대규모 모델 출력 구문 분석, 결과를 기계어로 변환하는 등 복잡한 논리를 직접 처리해야 합니다. 이는 개발 난이도를 높일 뿐만 아니라 개발 효율성도 저하시킵니다. 따라서 우리는 Kitex 프레임워크가 즉시 사용 가능한 AI 구성요소 조정 기능을 제공할 것으로 기대합니다.
특히 프레임워크는 프롬프트 구성 요소, 대형 모델 구성 요소, 결과 구문 분석 구성 요소, RPC 호출 구성 요소 등 일련의 캡슐화된 AI 구성 요소를 사전 설치할 것으로 예상합니다. 이러한 구성 요소는 다양한 비즈니스 요구 사항에 맞게 조정할 수 있도록 고도로 구성 및 확장 가능해야 합니다. 개발자는 구성 요소 내부의 구현 세부 사항에 신경 쓰지 않고 비즈니스 논리를 이러한 구성 요소에 전달하기만 하면 되므로 비즈니스 논리 구현에 더 집중할 수 있습니다.
-
유연한 AI 구성요소 조정 기능
사전 설정된 AI 구성요소를 제공하는 것 외에도 Kitex 프레임워크가 유연한 AI 구성요소 조정 기능을 지원할 것으로 기대합니다. 이는 프레임워크가 개발자가 비즈니스 요구 사항에 따라 이러한 AI 구성 요소를 쉽게 조정할 수 있도록 하는 표현 언어 또는 시각화 도구를 제공해야 함을 의미합니다. 이러한 방식으로 개발자는 구성 요소 간의 상호 작용을 자세히 설명하지 않고도 구성 요소 간의 실행 순서, 통신 방법, 병렬 처리 전략 등을 정의할 수 있습니다. 이를 통해 AI 애플리케이션의 개발 효율성과 유지 관리 가능성이 크게 향상됩니다.
-
LLM 링크에 기존 프레임워크 기능이 적용되었습니다.
AI 시나리오에서 서비스 거버넌스, 메타데이터 투명한 전송, 관찰 가능성과 같은 기존 프레임워크 기능은 여전히 매우 중요합니다
. 따라서 우리는 Kitex 프레임워크가 이러한 측면에 적응하고 최적화할 수 있기를 기대합니다.
첫째, 서비스 거버넌스 측면에서 AI 애플리케이션에는 장기적인 추론 프로세스가 포함될 수 있으므로 프레임워크는 몇 초 또는 몇 분 정도의 응답 시간에 대한 제한 시간 및 현재 제한 전략을 제공해야 합니다. 동시에 AI 구성 요소와 관련된 예외를 처리하는 방법도 고려해야 합니다.
둘째, 메타데이터 투명한 전송 측면에서 우리는 프레임워크가 AI 구성 요소 간의 메타데이터 전송을 지원하여 보다 정교한 모니터링 및 디버깅을 기대합니다. 이를 통해 AI 애플리케이션의 작동 상태를 더 잘 이해하고 문제를 신속하게 찾을 수 있습니다.
마지막으로 관찰 가능성 측면에서 Kitex 프레임워크는 AI 링크의 포괄적인 모니터링 및 분석을 위한 포괄적인 로깅, 추적 및 지표 수집 기능을 제공할 것으로 기대합니다. 이를 통해 잠재적인 성능 병목 현상과 최적화 시점을 발견하여 AI 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다.
요약하자면, AI 시나리오에서 Kitex 프레임워크에 대한 우리의 미래 기대는 주로
즉시 사용 가능한 AI 구성 요소 오케스트레이션 기능
,
유연한 AI 구성 요소 오케스트레이션 기능
및 LLM 링크
의 기존 프레임워크 기능
적용에 중점을 두고 있습니다 . 우리는 지속적인 기술 발전과 심층적인 팀 협력을 통해 이러한 기대가 점차 현실이 되어 AI 애플리케이션 개발에 더 큰 편의성과 효율성을 가져다 줄 것이라고 믿습니다.
실제로 우리 팀은 마이크로서비스 프레임워크에서 AI 시나리오를 더 잘 지원하는 방법을 논의하기 위해 Kitex 팀과 심층적인 협력을 진행했습니다. 우리는 가까운 시일 내에 솔루션의 MVP 버전을 출시하여 비즈니스 개발자에게 AI 기능과 쉽고 원활하게 통합될 수 있는 프레임워크를 제공할 수 있을 것이라고 믿습니다. 매우 흥미로운 시간이 될 것이며 우리는 그것을 고대하고 있습니다.
{{o.이름}}
{{이름}}