Emerging Architecture for LLM Applications

Junho Bae·2023년 9월 10일
1

밀린 포스트들을 하나씩 정리해봐야겠다. 최근 LLM관련 이것저것 공부하고 있는데, 그 중에서 LLM App Architecutre 관련한 아티클이 있어서 스터디겸 번역해서 소개해보려고함.

제 글은 어디까진 참고용으로.. 혹시라도 이글을 참고하신다면 원문을 보는걸 추천드립니다.

모든 그림과 내용은 아래 링크의 글을 참조함
출처 : https://a16z.com/2023/06/20/emerging-architectures-for-llm-applications/

Intro

  • 최근 LLM은 소프트웨어를 구축하기 위한 강력한 새로운 기본 요소로 주목 받고 있으나, 일반 컴퓨팅 자원과는 매우 다르게 작동하기 때문에 어떻게 사용해야 하는지 항상 명확하지 않음.

  • 이 글에서는 급속히 등장하는 LLM 앱 스택을 위한 참조 아키텍처를 공유하고 있음.

  • AI 스타트업과 세련된 기술 회사에서 사용되는 가장 일반적인 시스템, 도구 및 디자인 패턴을 보여줌.

Stack

  • 각각의 요소, 주요 오퍼링, 플레이어에 대한 레퍼런스는 원문 참조
  • 본문에서 다루는 스택은 in-context 학습을 기반으로 하며, 대다수의 개발자가 시작할 때 사용하는 디자인 패턴 (foundation models)

Design pattern : In-context learning

in-context 학습

LLM을 그대로 사용하고, 영리한 프롬프팅 및 개인 문맥(contextual) 데이터에 따라 행동을 제어하는 것

나이브하게 컨텍스트를 전부 붙이고 질문을 던지는 경우(e.g 법률 상담 챗봇), scalability가 매우 떨어짐.

  • context window의 한계에 접근 하는 경우 성능(추론 시간 및 정확도) 대폭 저하
  • 모든 문서를 각 LLM 프롬프트와 함께 보내는 대신, 가장 관련성 있는 문서 몇 개만 전송.
  • 가장 관련성 있는 문서는 LLMs의 도움으로 결정.

High Level Workflow

  1. 데이터 전처리 / 임베딩
  • 나중에 검색할 개인 데이터(예: 법적 문서)를 저장.
  • 일반적으로 문서는 청크로 나누어지고, 임베딩 모델을 통과한 후, 벡터 데이터베이스에 저장.
  1. 프롬프트 구성 / 검색
  • 사용자가 쿼리(이 경우 법적 질문)를 제출하면, 응용 프로그램은 언어 모델에 제출할 프롬프트의 시리즈를 구성함.
  • 컴파일된 프롬프트는 일반적으로 아래 항목들을 결합함.
    - 개발자가 하드코딩한 프롬프트 템플릿
    - 유효한 출력 예제(few-shot)
    - 외부 API에서 검색된 필요한 정보, 및 벡터 데이터베이스에서 검색된 관련 문서
  1. 프롬프트 실행 / 추론
  • 프롬프트가 컴파일되면, 사전 훈련된 LLM에 추론을 위해 제출됨
  • 일부 개발자들은 이 단계에서 로깅, 캐싱 및 검증과 같은 운영 시스템도 추가함

장점

  • 복잡해보이지만, LLM 자체를 훈련하거나 fine tuning 하는 것보다 쉬움
  • fine-tuning을 통해 LLM이 그것을 기억하기 전에 특정 정보가 훈련 세트에서 적어도 약 10번 발생해야 하는 상대적으로 작은 데이터셋에 대해서는 세부 조정보다 성능이 뛰어남
  • 거의 실시간으로 새로운 데이터를 포함할 수 있음
  • in-context 학습을 수행하기 위해 ML 엔지니어의 전문 팀이 필요하지 않음
  • 자체 인프라를 호스팅하거나 OpenAI에서 비싼 전용 인스턴스를 구입할 필요도 없음

Data Preprocessing/Embedding

Contextual Data

  • LLM 앱의 컨텍스트 데이터에는 텍스트 문서, PDF, 그리고 CSV나 SQL 테이블과 같은 구조화된 형식까지 포함됨
  • 이 데이터를 위한 데이터 로딩과 변환 솔루션은 다양함
  • 대부분은 Databricks나 Airflow와 같은 전통적인 ETL 도구를 사용
  • LangChain(Unconstructued) 및 LlamaIndex(Llama Hub)와 같은 오케스트레이션 프레임워크에 내장된 문서 로더도 사용

Embedding

  • 대부분 OpenAI API, 특히 text-embedding-ada-002 모델을 사용함.
  • 사용하기 쉽고(특히 이미 다른 OpenAI API를 사용 중인 경우), 합리적으로 좋은 결과를 제공하며, 점점 저렴해지고 있음.
  • 몇몇 대기업들은 또한 Cohere를 탐구하고 있으며, 이는 제품 노력을 임베딩에 좁게 집중하고 특정 시나리오에서 더 나은 성능을 제공함.
  • 오픈소스를 선호하는 개발자들은 Hugging Face의 Sentence Transformers 라이브러리리 사용함.
    다양한 유형의 임베딩을 다양한 사용 사례에 맞게 제작하는 것도 가능함.

Vector DB

  • 시스템 관점에서 전처리 파이프라인의 가장 중요한 부분은 벡터 데이터베이스
  • 효율적으로 수십억 개의 임베딩(즉, 벡터)을 저장, 비교, 검색하는 책임이 있음.
  • 시장에서 가장 일반적으로 보게 되는 선택은 Pinecone;완전히 클라우드에서 호스팅되기 때문에 시작하기 쉬움;대기업들이 제품화에 필요로 하는 많은 기능들(예: 대용량에서 좋은 성능, SSO, 및 업타임 SLA)을 가지고 있음
  • 그러나, 매우 다양한 벡터 데이터베이스가 있음
  • 오픈소스 시스템 Weaviate, Vespa, Qdrant
  • 로컬 벡터 관리 라이브러리 Chroma와 Faiss
  • 전반적으로 대부분의 오픈 소스 벡터 데이터베이스 회사들은 클라우드향
    -대부분의 모델에 대해 사용 가능한 컨텍스트 창이 커짐에 따라 임베딩과 벡터 데이터베이스가 어떻게 진화할 것인지에 대한 논의
  • 컨텍스트 데이터를 직접 프롬프트에 넣을 수 있기 때문에 임베딩이 덜 중요해진다는 의견 존재
  • 전문가들은 보통 반대 의견 :  임베딩 파이프라인이 시간이 지남에 따라 더 중요해질 수 있다는 것
    큰 context window는 강력한 도구이지만,  상당한 계산 비용을 수반함

Prompt Construction/Retrieval

LLM에 대한 프롬프트 전략과 contextual data의 통합

  • 점점 더 복잡해지고 있으며 제품 차별화의 중요한 요인
  • 대부분의 개발자들은 직접적인 지시사항(제로-샷 프롬프트) 또는 가능한 일부 예제 출력(퓨-샷 프롬프트)을 포함한 간단한 프롬프트로 새 프로젝트 시작함
  • 이러한 프롬프트는 종종 좋은 결과를 가져다 주지만, 제품 배포에 필요한 정확성 수준에는 미치지 못합니다

Orchestration Framework

  • 모델 응답을 믿을만한 소스(source of truth)에 기반하게 하고, 모델이 훈련되지 않은 외부 문맥을 제공하기 위해 설계됨
  • 프롬프트 엔지니어링
  • LangChain, LlamaIndex
    - 외부 API와의 인터페이스(어떤 API 호출이 필요한지 결정하는 것 포함), 벡터 데이터베이스로부터의 문맥적 데이터 검색, 여러 LLM 호출에 걸친 메모리 유지 등 많은 세부 사항을 추상화함.
    - 일반적인 애플리케이션에 대한 템플릿을 제공함.
    - 출력 = '언어 모델에 제출할 프롬프트 또는 일련의 프롬프트'
    - DIY 접근법은 시간이 지남에 따라 감소할 것으로 예상됨
    - ChatGPT? : 프롬프트 구성에 대한 간단한 대안이 될 수도 있음.

Prompt Execution/Inference

LLM

  • gpt-4 또는 gpt-4-32k 모델로 새로운 LLM 앱을 시작
  • 파인 튜닝이나 자체 호스팅이 거의 필요하지 않음

고려 사항

  • gpt-3.5-turbo로 전환: GPT-4보다 약 50배 저렴하고 훨씬 빠름.
  • 많은 앱들이 GPT-4 수준의 정확도를 필요로 하지 않지만, 낮은 지연 시간의 추론과 free plan 지원이 필요함
  • 다른 상업적인 제공 업체 실험 : Claude는 빠른 /추론, GPT-3.5 수준의 정확도, 대규모 고객을 위한 더 많은 맞춤화 옵션, 그리고 최대 100k의 문맥 창을 제공
  • 입력의 길이나 늘어남에 따른 정확도 저하 식별
  • 일부 요청을 오픈 소스 모델로 분류:  검색이나 채팅과 같은 대규모 B2C 사용 사례에서 매우 효과적일 수 있음
  • 보통 오픈 소스 기본 모델의 파인튜닝과 함께 진행되어야함. Databricks, Anyscale, Mosaic, Modal, RunPod 등
  • 독점적 모델과 격차는 좁혀지고 있음;Meta LLaMa

LLMOps

  • 본문에서 인터뷰한 대부분의 개발자들은 아직 LLM용 운영 도구에 대해 깊이 있게 연구하지 않았음
  • Redis 기반의 캐싱은 흔히 사용됨
  • Weights & Biases, MLFlow, PromptLayer, Helicone
    - LLM 출력을 로깅, 추적 및 평가
    - 프롬프트 구축
    - 파이프라인 튜닝
    - 모델 선택 개선
    - LLM 출력을 검증
    - 프롬프트 인젝션 공격 탐지
    - 운영 도구 대부분은 LLM 호출을 위해 자체 Python 클라이언트의 사용을 권장함

App Hosting

  • LLM 앱에서 모델을 제외한 정적 부분의 호스팅, 가장 일반적인 해결책은 클라우드
  • Steamship : LLM 앱을 위한 종단간 호스팅을 제공, 오케스트레이션(LangChain), 멀티 테넌트 데이터 - 컨텍스트, 비동기 작업, 벡터 저장 및 키 관리를 포함
  • Anyscale,Modal : 모델과 Python 코드를 한 곳에서 호스팅할 수 있게 해줌

What about agents?

위 아키텍처에서 가장 중요한 누락된 구성 요소는 AI 에이전트 프레임워크

  • AutoGPT :  "GPT-4를 완전히 자동화하기 위한 실험적인 오픈 소스 시도"
  • 인 컨텍스트 학습 패턴 : hallucination, 데이터 신선도 문제를 해결하여 콘텐츠 생성 작업을 더 잘 지원하는데 효과적
  • 반면에 에이전트는 AI 앱에 근본적으로 새로운 기능 세트를 제공함: 복잡한 문제를 해결하고, 외부 세계에 행동하며, 배포 후 경험에서 학습함
    - 고급 추론/계획, 도구 사용, 메모리 / 재귀 / 자기 반성의 조합을 통해 이를 수행
    - 에이전트는 LLM 앱 아키텍처의 중심 부분이 될 잠재력이 있음
    - LangChain과 같은 기존 프레임워크들은 이미 일부 에이전트 개념을 포함하고 있음
profile
SKKU Humanities & Computer Science

0개의 댓글