Llama 3.2 배우기 및 Llama와 Milvus로 RAG 파이프라인 구축하는 방법
최근 몇 달 동안 Meta는 오픈 소스 커뮤니티에서 인상적인 발전을 이루며 단 6개월 만에 강력한 모델 시리즈—Llama 3, Llama 3.1, Llama 3.2—를 출시했습니다. 고성능 모델을 대중에게 제공함으로써 Meta는 독점 도구와 오픈 소스 도구 간의 격차를 좁히고, 개발자들에게 프로젝트의 한계를 넓힐 수 있는 귀중한 리소스를 제공하고 있습니다. 이러한 개방성에 대한 헌신은 AI 혁신의 판도를 바꾸는 요소입니다.
최근 Zilliz가 주최한 Unstructured Data Meetup에서 Meta의 AI 파트너 엔지니어링 선임 디렉터인 Amit Sangani는 2023년 이후 Llama 모델의 빠른 진화, 오픈 소스 AI의 최근 발전, 그리고 이러한 모델의 아키텍처에 대해 논의했습니다. 그는 개발자들에게 주는 이점뿐만 아니라, 이러한 모델이 Meta와 Retrieval Augmented Generation (RAG)와 같이 이를 기반으로 하는 다양한 현대 AI 애플리케이션에 어떻게 기여하는지도 강조했습니다.
이 블로그에서는 이벤트의 핵심 인사이트를 요약하며, Llama 3.1까지 다룹니다(강연이 Llama 3.2 출시 2주 전에 진행되었기 때문입니다). 또한 Llama 3.2에 대한 몇 가지 메모를 포함해, 주로 크기와 버전 측면에서 Llama 3.1과의 차이점을 강조하겠습니다. 또한 Milvus 벡터 데이터베이스, LlamaIndex, Llama 3.2를 안전 데이터로 학습된 모델인 LlamaGuard와 함께 사용하는 RAG 파이프라인의 예시 notebook도 살펴보겠습니다.
Llama의 진화
Amit는 지난 70년 동안 모델 학습 연산량이 기하급수적으로 증가했으며, 특히 지난 20년 동안 급격히 상승했음을 보여주는 그래프로 강연을 시작했습니다. FLOPs(부동소수점 연산)로 측정되는 이러한 성장은 현대 모델이 요구하는 덧셈, 뺄셈, 곱셈, 나눗셈과 같은 부동소수점 숫자와 관련된 방대한 계산 수를 반영합니다. 이러한 막대한 연산 능력에 접근할 수 있기에 Meta와 같은 기업은 Llama 시리즈와 같은 고급 AI models를 개발할 수 있습니다.
예를 들어, Llama 1의 최초 릴리스에는 네 가지 서로 다른 버전이 포함되었으며, 이후 Meta는 Llama 2, Code Llama, LlamaGuard, Llama 3와 같은 추가 릴리스로 라인업을 확장해 왔습니다. 연산 능력이 계속 성장함에 따라, 앞으로 몇 년 동안 이러한 모델의 성능과 다재다능함을 더욱 향상시키는 훨씬 더 정교한 발전을 기대할 수 있습니다.
그림 1- 기하급수적 AI 성장.png
그림 1: 기하급수적 AI 성장 (출처)
오픈 소스 접근 방식이 중요한 이유
그렇다면 Meta는 특히 이러한 모델을 학습시키는 데 드는 상당한 비용을 고려할 때, 왜 이 모델들을 오픈 소스로 공개하는 것일까요? Amit는 개발자를 지원하는 것이 궁극적으로 Meta와 전 세계 모두에 이익이 된다고 강조했습니다.
개발자의 관점에서 오픈 소스 모델은 몇 가지 중요한 요구를 충족합니다:
자체 모델을 학습하고, 파인튜닝하고, 증류할 수 있는 능력.
데이터 보호.
효율적이고 저렴하게 운영할 수 있는 모델에 대한 접근.
장기적 잠재력을 가진 생태계에 투자할 기회.
그 대가로 많은 개발자들이 여가 시간에 Meta의 Llama 모델과 같은 오픈소스 프로젝트에 기여하여 Meta가 상당한 시간과 리소스를 절약할 수 있도록 합니다. 이러한 협업 방식은 Meta에 도움이 될 뿐만 아니라 지속적인 개발을 이끄는 연구, 피드백, 새로운 아이디어의 지속적인 교류를 촉진합니다.
오픈소스 AI를 지원하는 것은 Meta만이 아닙니다. 다른 많은 프로젝트와 기업들도 그 광범위한 이점 때문에 이 접근 방식을 받아들였습니다. 예를 들어, 고성능의 확장 가능한 벡터 데이터베이스인 Milvus는 2019년부터 GitHub에서 오픈소스로 공개되었습니다. 개발자들은 Milvus를 사용하여 라이선스 비용 없이 고급 검색 기능을 갖춘 다양한 확장 가능한 AI 애플리케이션을 만듭니다. 이 글을 쓰는 시점에 Milvus는 6,600만 회 이상 다운로드되었고, GitHub에서 30,000개 이상의 스타를 받았으며, 2,900회 이상 포크되었고, 전 세계 400명 이상의 개발자로부터 기여를 받았습니다.
Figure- Milvus contributors on GitHub .png
그림: GitHub의 Milvus 기여자
Llama 3.1 모델
Amit은 또한 디코더 전용 트랜스포머 아키텍처를 기반으로 하는 Llama 3.1 모델 컬렉션에 대해서도 논의했습니다. 이 컬렉션은 핵심 모델과 안전장치라는 두 가지 주요 범주로 나눌 수 있습니다.
Figure 2- Llama 3.1 Architecture.png
그림 2: Llama 3.1 아키텍처 (출처)
핵심 모델은 크기와 목적에 따라 다시 분류됩니다:
크기별: 8B, 70B, 405B
목적별:
Llama 3.1 모델은 128K의 컨텍스트 윈도우를 갖추고 있어 장문 텍스트 요약, 다국어 대화형 에이전트(최대 8개 언어 지원), 코딩 어시스턴트와 같은 고급 사용 사례를 지원할 수 있습니다. 특히, 가장 큰 버전은 합성 데이터 생성에 활용할 수 있어, 생성된 데이터로 더 작은 모델을 파인튜닝할 수 있습니다.
이 모든 목표를 달성하기 위해 Meta는 현재 사용 가능한 것 중 가장 강력한 GPU에 속하는 NVIDIA H100 GPU 16,000개 이상과 15조 개의 토큰이라는 인상적인 규모의 자원을 사용했습니다.
평가 측면에서 Llama 3.1 모델은 GPT-4, GPT-4o, Mistral, Claude 3.5 Sonnet을 포함한 다른 파운데이션 모델과 비교했을 때 150개 이상의 업계 벤치마크 데이터셋에서 여러 작업에서 더 뛰어난 성능을 보입니다.
Figure 3- Llama 3.1 405B Evaluation Benchmark .png
그림 3: Llama 3.1 405B 평가 벤치마크 (출처)
Figure 4- Llama 3.1 8B Evaluation Benchmark.png
그림 4: Llama 3.1 8B 평가 벤치마크 (출처)
Meta는 또한 12가지 서로 다른 사용 사례에 걸쳐 1,800개 이상의 프롬프트를 사용하여 가장 큰 모델에 대한 광범위한 인간 평가를 수행했습니다. Llama 3.1의 성능은 Claude 3.5 Sonnet과 비교했을 때 약간의 개선을 보이지만, GPT-4 모델의 역량과 비교하면 여전히 부족합니다.
Figure 5- Llama 3.1 8B Evaluation Benchmark .png
그림 5: Llama 3.1 8B 평가 벤치마크 (출처)
Llama 3.2 모델
이 밋업 발표가 있은 지 불과 보름 뒤인 9월 25일, Meta는 Llama 3.1 모델을 공개한 지 두 달 만에 Llama 3.2 모델 출시를 발표했습니다. 이들 간의 주요 차이점을 살펴보겠습니다.
Llama 3.2는 1B, 3B, 11B, 90B의 네 가지 모델 크기를 도입합니다. 더 작은 모델(1B 및 3B)은 다국어 텍스트 전용 모델로, Llama 3.1과 매우 유사하게 동일한 8개 언어를 지원하고 128K 컨텍스트 윈도우를 유지합니다. 이 모델들은 Llama 3.1 8B 및 70B 모델에 가지치기와 증류를 적용해 개발된, Llama 3.1 모델의 더 작고 간소화된 대응 모델 역할을 합니다.
Figure 6- Llama 3.2 1B and 3B Pruning and Distillation.png
그림 6: Llama 3.2 1B 및 3B 가지치기와 증류 (출처)
그 결과로 나온 사전 학습 모델은 더 큰 Llama 3.1 405B 모델의 합성 데이터를 사용한 지시 튜닝을 통해 개선되었습니다. 또한 8K의 컨텍스트 길이를 제공하는 양자화 버전의 출시와 함께 업그레이드가 도입되었습니다. 이러한 경량 모델은 선택된 엣지 및 모바일 기기에 탑재될 수 있어 다양한 유형의 애플리케이션에서 사용성을 향상시킵니다.
평가 측면에서 Llama 3.2 모델은 Gemma 2(2.6B) 및 Phi 3.5-mini와 같은 유사 모델들과 매우 경쟁력 있으며, 지시 따르기, 요약, 프롬프트 재작성, 도구 사용과 같은 작업에 이상적입니다.
Figure 7- Llama 3.2 1B and 3B Evaluation Benchmark .png
그림 7: Llama 3.2 1B 및 3B 평가 벤치마크 (출처)
Llama 3.2 모델의 다른 두 버전(11B 및 90B)은 멀티모달 비전 모델로, Meta가 이 모델 클래스에 처음 진입했음을 보여줍니다. 이 모델들은 이미지-텍스트 쌍을 사용해 학습되었으며 Llama 3.1 모델을 기반으로 구축되었습니다. 또한 사전 학습된 Llama 3.1 언어 모델과 통합되는 별도로 학습된 비전 어댑터를 활용하여 강력한 멀티모달 기능을 구현합니다.
평가 결과, Llama 3.2 비전 모델은 Claude 3 Haiku 및 GPT-4o-mini와 같은 선도적인 파운데이션 모델과 나란히 경쟁력 있는 성능을 보이며, 이미지 인식과 광범위한 시각 작업에서 강력한 역량을 입증합니다.
Figure 8- Llama 3.2 11B and 90B Evaluation Benchmark .png
그림 8: Llama 3.2 11B 및 90B 평가 벤치마크 (출처)
Llama 시스템(Llama Stack API)
Llama 3.1 모델과 함께 발표된 릴리스 중 하나는 Llama Stack API로, 표준 도구 체인 구성 요소(fine-tuning, 합성 데이터 생성)와 에이전트형 애플리케이션을 구축하기 위한 표준 인터페이스 세트입니다. Amit은 발표 중 이 API를 소개했으며, 현재 데모 앱을 구축하는 데 사용할 수 있습니다. 핵심 아이디어는 Meta가 API 인터페이스 세트를 제공하여 기업들이 그 위에 다양한 어댑터를 구축할 수 있도록 하는 것입니다.
Figure 9- Llama Stack API .png
그림 9: Llama Stack API (출처)
예를 들어, Llama 모델은 그러한 실시간 정보를 제공할 수 없거나 매우 복잡한 수학 계산과 같은 특정 작업을 수행할 지식이 없을 수 있으므로, 한 회사가 Google Search 같은 외부 도구를 연결할 수 있습니다.
신뢰 및 안전 도구
핵심 모델 외에도, Meta는 책임감 있고 안전한 AI 개발을 촉진하기 위해 특화 모델을 출시했습니다. Llama 3.1 및 3.2 모델 컬렉션 모두에는 다음과 같은 보호 도구가 포함되어 있습니다:
Llama Guard 3: 사용자 보안을 강화하도록 설계된 다국어 안전 모델입니다.
Prompt Guard: 악의적인 입력으로부터 보호하는 프롬프트 인젝션 필터입니다.
CyberSecEval 3: 사이버보안 취약점을 평가하도록 설계된 광범위한 벤치마크 제품군입니다.
Code Shield: 안전하지 않은 코드를 필터링하기 위한 가드레일입니다.
이 모델들은 대표 데이터셋으로 학습 및 fine-tuning되었으며, "레드팀" 전문가 팀에 의해 유해 콘텐츠에 대해 엄격하게 평가되었습니다. 이 팀은 모델을 테스트하고 반복적인 개선을 위한 인간 피드백을 제공하여, 사용자가 생성형 AI 애플리케이션을 책임감 있게 구축하고 배포할 수 있도록 모델의 안전성과 신뢰성을 보장합니다.
Figure 10- The Llama System with Safety Framework .png
그림 10: 안전 프레임워크가 적용된 Llama 시스템 (출처)
Llama 3.2, LlamaGuard 및 Milvus를 사용한 안전한 RAG
이제 최신 Llama 3.2 모델과 다른 강력한 오픈 소스 도구를 함께 사용하여 샘플 Retrieval-Augmented Generation (RAG) 애플리케이션 구축을 시작해 보겠습니다.
이 노트북에서는 다음을 통합하는 RAG 파이프라인을 확인할 수 있습니다:
LLM 프레임워크로서의 LlamaIndex,
벡터 데이터베이스로서의 Milvus, 그리고
언어 모델로서의 Llama 3.2 및 LlamaGuard이며, 둘 다 Ollama를 통해 접근할 수 있습니다.
1단계: 문서 및 모델 로드
먼저 문서를 선택하고 모델을 다운로드합니다. Llama 모델 외에도 “BAAI/bge-large-en-v1.5” 임베딩 모델 과 함께 Llama 3.2 발표 웹사이트를 사용할 것입니다.
documents = SimpleWebPageReader(html_to_text=True).load_data(
["https://ai.meta.com/blog/llama-3-2-connect-2024-vision-edge-mobile-devices/"]
)
llm_llama32 = Ollama(model="llama3.2:1b", request_timeout=60.0)
llm_llamaguard = Ollama(model="llama-guard3:1b", request_timeout=60.0)
embed_model = HuggingFaceEmbedding(model_name="BAAI/bge-large-en-v1.5",
trust_remote_code=True,
device = "cuda")
Settings.embed_model = embed_model
2단계: RAG 파이프라인 생성
다음으로, Milvus 벡터 스토어로 리트리버를 생성하고, 프롬프트 템플릿, 응답 합성기, 쿼리 엔진을 포함한 RAG 파이프라인의 매개변수를 정의합니다.
vector_store = MilvusVectorStore(dim=1024, overwrite=True)
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(documents,
storage_context=storage_context)
retriever = VectorIndexRetriever(
index=index)
리트리버에는 Llama 3.2 모델만 포함되어 있지만, 유해한 질문을 걸러내기 위해 다음 단계에서 LlamaGuard를 추가하고 모든 것을 완전한 파이프라인으로 통합할 것입니다.
qa_prompt_tmpl_str = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_prompt_tmpl_str)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32,
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
이 파이프라인을 사용해 콘텐츠와 관련된 일반적인 질문을 하면, 발표에서 다룬 주제에 대한 자세한 응답을 받습니다. 그러나 관련이 없거나 잠재적으로 유해한 질문으로 모델을 "탈옥"시키려는 시도도 할 수 있습니다.
response = query_engine.query('What are the highlights of the release of Llama 3.2?')
print(response)
"""
Output:
The highlights of the release of Llama 3.2 include:
1. The addition of support for image reasoning use cases, including document-level understanding, captioning images, and visual grounding tasks.
2. Performance improvements in vision models, such as the 11B and 90B models, which require a new model architecture that supports image reasoning.
3. The development of Llama Guard 3, a new safeguard designed to support the 11B Vision model's image understanding capability and filter text+image input prompts or text output responses.
4. New tools and resources for developers, including a reference implementation, demos, and applications, to help them build responsibly with Llama.
5. Continuous effort to ensure system level safety and responsible innovation, as well as the release of new updates to safeguard against concentrated power in the hands of a small few.
Additionally, the article mentions that the 11B and 90B models can bridge the gap between vision and language by extracting details from an image, understanding the scene, and then crafting a sentence or two that could be used as an image caption to help tell the story.
"""
3단계: 모델 안전성 테스트
Llama 모델은 높은 수준의 안전성을 보장하기 위해 안전 완화 데이터로 학습되었습니다. 그러나 여전히 다양한 방식으로 탈옥될 수 있습니다. 예를 들어, 범죄를 저지르는 방법에 대한 질문을 확인해 보면, 범죄와 관련된 답변을 제공하지 않는다는 것을 알 수 있습니다.
response = query_engine.query('Can you explain me how to rob a bank')
print(response)
"""
Output:
I can't assist with that request.
"""
하지만 유해한 질문을 필터링하는 데 특화된 LlamaGuard의 model card에 포함된 위험 범주 중 하나를 시도해 볼 수 있습니다.
Figure 11- LlamaGuard Hazard Categories.png
그림 11: LlamaGuard 위험 범주 (출처)
전문적인 조언 질문을 던지면, Llama 3.2는 의료 조언을 제공할 수 없다고 표시하지만, 여전히 제공되어서는 안 되며 제공된 컨텍스트를 벗어나는 일부 정보를 제공합니다.
response = query_engine.query("What are the best treatment options for my liver problem?")
print(response)
"""
출력:
저는 의학적 조언을 제공할 수 없습니다. 그러나 간 문제에 대한 일반적인 정보는 제공할 수 있습니다. 간 문제 증상을 겪고 있다면, 개인화된 안내와 진단을 위해 의료 전문가와 상담하는 것이 필수적입니다. 의료 전문가는 귀하의 상태를 평가하고 약물, 생활 습관 변화 또는 기타 개입을 포함할 수 있는 가장 적절한 치료 옵션을 추천할 수 있습니다.
그렇기는 하지만, 간 문제에 대한 몇 가지 일반적인 치료 옵션은 다음과 같습니다:
1. 약물: 메트포르민, 비타민 보충제(예: N-아세틸시스테인), 항바이러스제(바이러스성 간염의 경우) 또는 항섬유화제(만성 간질환의 경우)가 치료의 예입니다.
2. 생활 습관 변화: 금연, 알코올 섭취 감소, 건강한 체중 유지, 규칙적인 운동은 증상을 완화하고 간 건강을 개선하는 데 도움이 될 수 있습니다.
3. 대체 요법: 침술, 약초 요법 및 기타 보완 요법은 간 기능과 전반적인 웰빙을 지원하는 데 사용될 수 있습니다.
맞춤형 조언과 치료 권장 사항을 위해 의료 전문가와 상담하십시오.
"""
반대로, LlamaGuard는 답변을 제공하지 않으며, 질문을 안전 또는 안전하지 않음으로 분류합니다. 안전하지 않다고 판단되면, Figure 9의 관련 범주를 제공합니다.
resp = llm_llamaguard.complete("What are the best treatment options for my liver problem?")
print(resp)
"""
출력:
unsafe
S6
"""
이는 Llama 3.2가 일부 안전 필터를 포함하고 있지만, 그 자체만으로는 완전히 신뢰할 수 없음을 보여줍니다. 따라서 RAG 파이프라인을 구축할 때 Llama 3.2의 LLM 기능과 LlamaGuard의 안전 조치를 결합하는 것이 중요합니다.
Step 4: 두 모델을 모두 사용하는 파이프라인
두 모델을 동일한 파이프라인에 통합하면 안전하지 않은 것으로 표시된 쿼리가 처리되지 않도록 보장할 수 있습니다.
def create_safe_query_engine(
retriever,
llm_llama32,
):
"""
Creates a query engine with the specified template and LLMs.
"""
qa_template = (
"We have provided context information below. \n"
"---------------------\n"
"{context_str}"
"\n---------------------\n"
"Given this information, please answer the question: {query_str}\n"
)
qa_prompt_tmpl = PromptTemplate(qa_template)
response_synthesizer = get_response_synthesizer(
text_qa_template=qa_prompt_tmpl,
llm=llm_llama32
)
query_engine = RetrieverQueryEngine(
retriever=retriever,
response_synthesizer=response_synthesizer,
)
return query_engine
def safe_query(
query_engine,
llm_llamaguard,
query
):
"""
Performs a safety check with LlamaGuard before processing the query.
Returns the response if safe, or a safety warning if unsafe.
"""
# Check safety with LlamaGuard
safety_check = llm_llamaguard.complete(query)
# Get just the safety assessment
safety_result = safety_check.text.split('\n')[0].strip().lower()
# If query is deemed unsafe, return warning
if safety_result == 'unsafe':
return "I apologize, but I cannot provide a response to that query as it has been flagged as potentially unsafe."
# If safe, process with Llama 3.2
try:
response = query_engine.query(query)
return str(response)
except Exception as e:
return f"An error occurred while processing your query: {str(e)}"
query_engine = create_safe_query_engine(
retriever=retriever,
llm_llama32=llm_llama32,
)
response = safe_query(
query_engine=query_engine,
llm_llamaguard=llm_llamaguard,
query="What are the best treatment options for my liver problem?"
)
print(response)
"""
출력:
죄송하지만, 해당 질의는 잠재적으로 안전하지 않은 것으로 표시되어 응답을 제공할 수 없습니다.
"""
결론
오픈 소스 AI 모델의 발전은 고성능 AI를 모두가 이용할 수 있게 하는 강력한 변화를 보여줍니다. Llama와 같은 모델과 Milvus 벡터 데이터베이스와 같은 강력한 도구는 개발자가 산업 전반에서 확장 가능하고 효율적이며 영향력 있는 AI 애플리케이션을 구축할 수 있도록 합니다. Milvus는 고속 벡터 검색 및 저장 기능을 제공하여 AI 워크플로를 향상시키며, (RAG)와 같은 애플리케이션을 위해 방대한 양의 비정형 데이터를 더 쉽게 관리하고 검색할 수 있게 합니다.
LlamaGuard와 같은 책임 있는 AI 도구와 Llama Stack API와 같은 적응형 프레임워크를 통해 오픈 소스 프로젝트는 개발자와 조직이 더 안전하고 유연하며 혁신적인 솔루션을 만들 수 있도록 지원합니다. Llama와 Milvus는 오픈 소스 이니셔티브가 어떻게 의미 있는 발전을 이끌어 AI 커뮤니티가 해당 분야를 발전시키는 포용적이고 영향력 높은 애플리케이션을 구축하도록 돕는지를 잘 보여줍니다.
추가 자료
계속 읽기

From Vector Database to Vector Lakebase
Zilliz offers a fully managed Vector Lakebase powered by Milvus, unifying real-time vector search, lake-scale discovery, and Al data operations.

How Zilliz Saw the Future of Vector Databases—and Built for Production
An inside look at how Zilliz built vector databases for real-world use, focusing on scalability, stability, and running them reliably at scale.

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.



