본문 바로가기
AI 언어 모델

🖼️Pixtral 12B: 추론과 코딩에 강한 Mistral AI의 첫번째 멀티모달 모델

by James AI Explorer 2024. 9. 18.
    728x90

    안녕하세요! 오늘은 Mistral AI의 첫 번째 멀티모달 모델, Pixtral 12B에 대해 알아보겠습니다. Pixtral 12B는 텍스트와 이미지를 동시에 이해하는 모델로, 128k 토큰의 긴 컨텍스트 윈도우를 지원하며 임의 해상도의 이미지를 처리할 수 있습니다. 또한, 다양한 벤치마크에서 경쟁 모델을 능가하며, 특히 지식, 추론, 질문 응답 분야에서 우수한 성과를 보이면서, Apache 2.0 라이센스 하에 공개되어 자유롭게 사용할 수 있습니다. 이 블로그에서는 Pixtral 12B의 특징과 벤치마크 결과에 대해 알아보고 이미지 처리 성능을 테스트해 보겠습니다.

    🖼️Pixtral 12B: 추론과 코딩에 강한 Mistral AI의 첫번째 멀티모달 모델

    https://huggingface.co/mistral-community/pixtral-12b-240910

     

    mistral-community/pixtral-12b-240910 · Hugging Face

    pixtral-12b-240910 This model checkpoint is provided as-is and might not be up-to-date. It mirrors the torrent released by Mistral AI and uploaded by the community. Downloaded from the magnet link: magnet:?xt=urn:btih:7278e625de2b1da598b23954c1393304712623

    huggingface.co

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

     

    Pixtral 12B 특징

    Pixtral 12B는 Mistral AI의 최신 AI 모델로, 다음과 같은 주요 특징을 가지고 있습니다:

    • Multimodal: Pixtral 12B는 이미지와 텍스트를 동시에 이해할 수 있는 능력을 갖추고 있습니다. 이는 다양한 형태의 데이터를 처리하고 분석하는 데 유용합니다.
    • Variable Image Resolution: 이 모델은 임의의 크기의 이미지를 지원할 수 있습니다. 즉, 사용자가 원하는 해상도에 맞춰 이미지를 처리할 수 있는 유연성을 제공합니다.
    • Long Context Window: Pixtral 12B는 128,000 토큰의 긴 컨텍스트 윈도우를 지원합니다. 이는 모델이 더 많은 정보를 한 번에 처리할 수 있게 하여, 복잡한 문맥을 이해하는 데 도움을 줍니다.
    • Open-weight: 이 모델은 Apache 2.0 라이센스 하에 공개되어 있어, 연구자나 개발자가 자유롭게 사용할 수 있습니다. 이러한 특징들은 Pixtral 12B가 다양한 응용 프로그램에서 효과적으로 활용될 수 있도록 합니다.

    Pixtral 12B 주요 특징

    728x90

    Pixtral 12B 성능분석

    Pixtral 12B의 벤치마크 결과는 다음과 같습니다. Pixtral 12B는 다양한 멀티모달 벤치마크에서 경쟁 모델들에 비해 우수한 성능을 보여주며, 특히 지식과 추론, 그리고 질문 응답 분야에서 두드러진 성과를 나타냅니다. 이러한 성능은 Pixtral 12B의 멀티모달 처리 능력과 긴 컨텍스트 윈도우 덕분에 가능하다고 할 수 있습니다.

    1. Multimodal Knowledge & Reasoning

    • MMMU(Multimodal Model Understanding): Pixtral 12B는 이미지와 텍스트를 동시에 이해하는 능력을 측정하는 이 벤치마크에서 다른 모델들과 비교했을 때 높은 정확도를 보입니다. 경쟁 오픈 모델인 Qwen2-VL 7B와 Phi-3 Vision보다 우수한 성능을 나타냅니다. 
    • MathVista: 주로 수학적 텍스트와 수식 이해능력을 평가하는 이 항목에서도 Pixtral 12B는 경쟁 오픈 모델들에 비해 좋은 성과를 보이며, 특히 LLaVA-OV 7B와의 비교에서 두드러진 성능 차이를 보입니다. 

    2. Multimodal QA

    • ChartQA: 차트나 그래프를 기반으로 질문에 답하는 능력을 평가하는 이 벤치마크에서도 Pixtral 12B는 높은 정확도를 기록하며, Qwen2-VL 7B와 Phi-3 Vision과의 경쟁에서 우위를 점하고 있습니다.
    • DocVQA: 스캔된 문서 이미지를 기반으로 질문에 모델이 생성한 답변과 정답 간의 유사도를 평가하는 이 항목에서도 Pixtral 12B는 다른 모델들과 비슷한 수준의 성능을 보이며, 전반적으로 안정적인 결과를 나타냅니다.
    • VQAv2: 이미지를 기반으로 자연어 질문에 답하는 능력을 평가하는 이 벤치마크에서도 Pixtral 12B는 좋은 성능을 보이며, 다양한 질문에 대한 답변 정확도가 높습니다. 
    Model MMMU (CoT) Mathvista (CoT) ChartQA (CoT) DocVQA (ANLS) VQAv2 (VQA Match) MM IF-Eval Text IF-Eval Math (Pass@1)
    HumanEval (Pass@1)
    Pixtral 12B 52.5 58 81.8 92.3 78.6 52.7 61.3 48.1 72
    Qwen2 7B 47.6 54.4 38.6 94.4 75.9 38.9 50.1 27.8 64.6
    LLaVA-OV 7B 45.1 36.1 67.1 90.3 78.3 42.5 51.4 38.6 65.9
    Phi-3 Vision 40.3 36.4 72 81.8 42.4 41.2 50.9 28.4 49.4

     

    Pixtral 12B 테스트

    다음은 Pixtral 12B 모델을 테스트해 보겠습니다. 테스트는 https://app.hyperbolic.xyz/models 사이트에서 Pixtral-12B 모델을 선택하고 API 방식으로 gradio 인터페이스를 만들어서 진행하였습니다. 테스트 환경은 Windows 11 Pro(23H2), WSL2파이썬 버전 3.11, Cursor 0.40.4이며, "WSL 연결"을 통해 Windows Subsystem for Linux(WSL) 환경에 액세스 하도록 구성하였습니다.

    https://app.hyperbolic.xyz/models/pixtral-12b

     

    Hyperbolic AI Dashboard

     

    app.hyperbolic.xyz

    1. Hyperbolic 사이트 가입 및 API Key 발급: 아래 화면 링크를 클릭하고 가입하면, 모델 페이지 우측 Demo 버튼 옆 API 버튼을 클릭하면 API 방식 샘플 코드 본문에서 본인의 API Key를 확인할 수 있습니다. (Demo 방식으로 테스트 가능)

    Hyperbolic 웹 사이트 모델 페이지
    API 방식 샘플 코드

    2. 가상환경 생성 및 활성화: Cursor에서 파이썬 가상환경을 생성하고, 활성화합니다. 

    python3.11 -m venv myenv
    source myenv/bin/activate

    3. 의존성 패키지 설치 및 app.py 생성: 아래 코드를 복사해서 가상환경이 활성화된 Cursor 명령프롬프트에서 의존성 패키지를 설치하고, app.py를 생성합니다. 

    pip install gradio requests pillow
    import base64
    import requests
    from io import BytesIO
    from PIL import Image
    import gradio as gr
    
    def encode_image(img):
        buffered = BytesIO()
        img.save(buffered, format="PNG")
        encoded_string = base64.b64encode(buffered.getvalue()).decode("utf-8")
        return encoded_string
    
    def chat_with_pixtral(uploaded_file, user_question):
        if uploaded_file is not None:
            # uploaded_file은 이미 PIL 이미지 객체입니다.
            base64_img = encode_image(uploaded_file)
    
            api = "https://api.hyperbolic.xyz/v1/chat/completions"
            api_key = "발급받은 API Key"  # 여기에 API 키를 입력하세요
    
            headers = {
                "Content-Type": "application/json",
                "Authorization": f"Bearer {api_key}",
            }
    
            payload = {
                "messages": [
                    {
                        "role": "user",
                        "content": [
                            {"type": "text", "text": user_question},  # 사용자가 입력한 질문
                            {
                                "type": "image_url",
                                "image_url": {"url": f"data:image/jpeg;base64,{base64_img}"},
                            },
                        ],
                    }
                ],
                "model": "mistralai/Pixtral-12B-2409",
                "max_tokens": 2048,
                "temperature": 0.7,
                "top_p": 0.9,
            }
    
            response = requests.post(api, headers=headers, json=payload)
    
            # API 응답 확인
            if response.status_code == 200:
                response_data = response.json()
                if 'choices' in response_data:
                    assistant_response = response_data['choices'][0]['message']['content']
                else:
                    assistant_response = "응답 형식이 올바르지 않습니다."
            else:
                assistant_response = f"API 요청 실패: {response.status_code} - {response.text}"
    
            return assistant_response
        return "이미지를 업로드하고 질문을 입력하세요."
    
    # Gradio 인터페이스 설정
    iface = gr.Interface(
        fn=chat_with_pixtral,
        inputs=[
            gr.Image(type="pil", label="이미지를 업로드하세요"),
            gr.Textbox(label="질문을 입력하세요")
        ],
        outputs="text",
        title="Pixtral Image Chat",
        description="이미지를 업로드하고 질문을 입력하여 Pixtral과 대화하세요."
    )
    
    iface.launch()

    4. app.py 실행: app.py를 실행하면 http://127.0.0.1:7861/에서 다음과 같은 Pixtral 이미지 대화 웹페이지가 열립니다. 

    Pixtral 12B 이미지 대화 웹 페이지

    다음은 이미지 인식, 글자 추출, 추론 및 코딩성능을 테스트한 결과입니다. 

    질문) 서울행 비행기는 몇 시인가요?
    답변) 서울행 비행기는 02:20에 있습니다. - 정답
    질문) 이미지를 설명해주세요
    답변) 이미지는 효율성과 성능을 향상시키기 위해 설계된 Multi-Head Latent Attention (MLA) 메커니즘으로 강화된 Transformer 모델의 아키텍처를 보여줍니다. 아키텍처는 여러 가지 주요 구성 요소로 나뉩니다. ### Transformer Block (L) - Feed-Forward Network: 이 계층은 입력에 일련의 변환을 적용하며, 일반적으로 완전 연결 계층을 포함합니다. - RMS Norm: Root Mean Square Normalization은 훈련의 안정성과 가속화를 위해 적용됩니다. - **Attention Mechanism**: 이것은 Transformer의 핵심 구성 요소로, 모델이 입력 시퀀스의 다른 부분에 집중할 수 있도록 합니다. - **Another RMS Norm**: 훈련 과정을 더욱 안정화하기 위한 또 다른 정규화 단계입니다. ### DeepMoE - **Routed Expert (Blue)**: 입력의 특정 부분을 처리하는 Mixture of Experts (MoE) 아키텍처의 전문가입니다. - **Shared Expert (Green)**: 모든 입력을 처리하는 공유 전문가로, 일관된 경로를 제공합니다. - **Input Hidden (ut)**: MoE 계층의 입력입니다. - **Output Hidden (ht)**: MoE 계층의 출력입니다. - **Router**: 입력의 특성에 따라 어떤 전문가(라우팅된 전문가와 공유 전문가 모두)가 입력을 처리해야 하는지 결정합니다. 상위-Kr 전문가가 선택됩니다. ### Multi-Head Latent Attention (MLA) - **Multi-Head Attention**: 이것은 모델이 입력 시퀀스의 다른 부분에 동시에 집중할 수 있도록 하는 핵심 메커니즘입니다. - **Input Hidden (ht)**: MLA 메커니즘의 입력입니다. - **Output Hidden (ut)**: MLA 메커니즘의 출력입니다. - **Latent Representations (C^Q, C^K, C^V)**: 이것은 쿼리, 키 및 값을 나타내며, 주의 메커니즘에 필수적입니다. - **RoPE (Rotary Position Embedding)**: 위치 정보를 통합하기 위해 잠재 표현에 적용되어 시퀀스 컨텍스트에 대한 모델의 이해를 향상시킵니다. ### MLA의 주요 프로세스 1. **Concatenation**: 쿼리, 키 및 값이 연결되어 주의 메커니즘의 입력을 형성합니다. 2. **Application of RoPE**: 회전 위치 임베딩이 키와 값에 적용되어 위치 정보를 주입합니다. 3. **Attention Calculation**: 주의 메커니즘은 입력 시퀀스의 다른 부분의 관련성을 계산합니다. 4. **Output**: 출력 숨겨진 상태가 생성되며, 이는 Transformer 블록에서 추가 처리에 사용됩니다. ### 요약 이 이미지는 Mixture of Experts (MoE)와 Multi-Head Latent Attention (MLA) 메커니즘으로 향상된 정교한 Transformer 아키텍처를 나타냅니다. MoE는 입력을 전문 전문가에게 라우팅하여 효율적인 처리를 가능하게 하고, MLA는 잠재 표현과 회전 위치 임베딩을 활용하여 주의 메커니즘을 개선합니다. 이러한 조합은 복잡한 작업을 처리하는 데 있어 모델의 성능과 효율성을 향상시키는 것을 목표로 합니다. - 양호
    질문) 파리행 비행기는 몇 시인가요?
    답변) 파리행 비행기는 23:40에 있습니다. - 오답(기울어진 글자 인식 미흡)
    질문) 모든 글자를 추출해주세요
    답변) marie claire AUSTRIA Skincare HEROES Star beauty products you need now + SHOES, BAGS, JEWELS Accessories you'll love Kirsten's comeback How she's her second act AMERICANS IVF HELL The heartbroken couples caught in the crossfire NAKED AT 50 Celebrating the beauty of age CAREER CRISIS Should you chase your dream job? - "embracing" 누락, "80"을 "50"으로 인식 오류
    이 이미지는 강가에 자리한 중국 전통 마을의 그림 같은 풍경을 담고 있습니다. 이미지의 중앙에는 독특한 곡선 디자인을 가진 나무 다리가 강 양쪽을 연결하는 역할을 하고 있습니다. 다리는 사람들로 붐비며, 고요한 풍경에 활기를 더합니다. 강 양쪽에는 중국 전통 건축물이 높이 솟아 있으며, 그 건축물은 이 지역의 풍부한 역사와 문화를 상징합니다. 이러한 건축물은 강변을 따라 흩어져 있으며, 자연과 건축물의 조화로운 결합을 이루고 있습니다. 강은 푸른 물결로 가득 차 있으며, 강변을 따라 늘어선 나무들은 자연의 아름다움을 더해줍니다. 이러한 나무들은 풍경에 자연의 색채를 더해주며, 전체적인 아름다움을 더욱 돋보이게 합니다. 위로는 맑은 하늘이 펼쳐져 있으며, 멀리 산들이 보이는 풍경은 이 이미지에 깊이와 광활함을 더해줍니다. 이 이미지는 자연과 건축물이 조화롭게 어우러진 중국 전통 마을의 모습을 담고 있습니다. - 양호
    질문) 각 모델의 MMMU, MathVista, ChartQA, DocVQA, VQAv2 정확도를 숫자로 알려줘
    답변) 물론이죠! 이미지를 기반으로 한 다양한 작업에서 각 모델의 정확도 백분율을 알려드리겠습니다: ### 다중 모달 지식 및 추론 1. **MMMU:** - Pixtral 12B: ~56% - Phi-3 Vision: ~44% - LLaVA-OV 7B: ~40% - Qwen2-VL 7B: ~50% - Claude-3 Haiku: ~48% 2. **MathVista:** - Pixtral 12B: ~62% - Phi-3 Vision: ~38% - LLaVA-OV 7B: ~35% - Qwen2-VL 7B: ~45% - Claude-3 Haiku: ~32% ### 다중 모달 QA 3. **ChartQA:** - Pixtral 12B: ~88% - Phi-3 Vision: ~75% - LLaVA-OV 7B: ~70% - Qwen2-VL 7B: ~55% - Claude-3 Haiku: ~45% 4. **DocVQA:** - Pixtral 12B: ~91% - Phi-3 Vision: ~80% - LLaVA-OV 7B: ~82% - Qwen2-VL 7B: ~85% - Claude-3 Haiku: ~70% 5. **VQAv2:** - Pixtral 12B: ~75% - Phi-3 Vision: ~50% - LLaVA-OV 7B: ~65% - Qwen2-VL 7B: ~70% - Claude-3 Haiku: ~55% 이 값들은 대략적인 값이며, 이미지의 막대 높이를 통해 추론되었습니다. - 오답 (기울어진 글자 인식 부족)
    질문) 프로세스를 설명해줘
    답변) 다이어그램은 과학적 발견을 위한 Large Language Models(LLM)에 의해 주도되는 엔드 투 엔드 프로세스인 'The AI Scientist'의 개념적 개요를 보여줍니다. 이 프로세스는 아이디어 생성, 실험 반복 및 논문 작성의 세 가지 주요 단계로 나뉩니다. 아이디어 생성 단계에서는 아이디어가 생성되고 참신성이 평가되며, 이는 점수가 매겨지고 보관됩니다. 실험 반복 단계에서는 실험 템플릿을 사용하고, LLM 및 보조 도구를 통해 코드를 생성하고 실험을 실행하여 수치 데이터 및 플롯을 수집합니다. 그런 다음 데이터를 사용하여 계획을 업데이트하고 필요에 따라 실험을 반복합니다. 마지막 단계에서는 원고 템플릿을 사용하여 텍스트를 생성하고, LLM 및 보조 도구의 도움으로 검토하고 개선합니다. 이 프로세스는 원고 검토로 마무리되며, 현재 기계 학습 컨퍼런스 관행에 따라 자동화된 검토를 생성할 수 있습니다. 전반적으로, 이 다이어그램은 아이디어 생성부터 원고 게시까지 과학 연구를 위한 자동화된 워크플로우를 전달하며, 반복적인 실험과 자동화된 검토를 강조합니다.
    질문) 파이썬 Hard 난이도: 이 도전은 고전적인 비디오 게임 "Snake"를 기반으로 합니다. 게임 화면이 n * n 정사각형이라고 가정하고, 뱀은 왼쪽 상단 모서리에 위치한 길이 1(즉, 머리만)로 게임을 시작합니다. 예를 들어, n = 7인 경우 게임은 이미지와 같이 보입니다. 이 버전의 게임에서 뱀의 길이는 음식을 먹을 때마다 두 배가 됩니다(예: 길이가 4인 경우, 먹은 후 8이 됩니다). 게임 화면의 한 변 n을 입력으로 받아 뱀이 게임 화면에서 공간이 부족해지기 전에 먹을 수 있는 횟수를 반환하는 함수를 만드세요.
    답변) 뱀이 \( n \times n \) 게임 화면에서 공간이 부족해지기 전까지 몇 번이나 먹을 수 있는지 결정하는 문제를 해결하기 위해서는 뱀의 성장을 고려해야 합니다. 뱀이 음식을 먹을 때마다 길이가 두 배로 늘어납니다. 뱀이 먹을 수 있는 횟수를 계산하여 뱀의 길이가 게임 화면의 총 셀 수를 초과하기 전까지 몇 번이나 먹을 수 있는지 확인해야 합니다. 다음은 단계별 계획입니다: 1. 게임 화면의 총 셀 수를 계산합니다: \( n^2 \). 2. 뱀의 초기 길이는 1입니다. 3. 뱀이 음식을 먹을 때마다 길이가 두 배로 늘어납니다. 4. 뱀의 길이가 \( n^2 \)를 초과할 때까지 이 과정을 반복합니다. 5. 뱀의 길이가 \( n^2 \)를 초과하기 전까지 뱀이 먹을 수 있는 횟수를 세어봅니다. 다음은 이 로직을 구현한 파이썬 함수입니다: -정답 
    질문) 파이썬 Very Hard 난이도: 항등행렬은 정사각형의 왼쪽 위에서 오른쪽 아래로 1이 이어지는 행렬로 정의됩니다. 나머지는 0입니다. 항등행렬은 기계 학습부터 일반 상대성 이론에 이르기까지 다양한 응용 분야가 있습니다. 정수 n을 입력으로 받아 n x n 차원의 항등행렬을 반환하는 함수를 만드세요. 이 챌린지에서는 정수가 음수인 경우 n x n 차원의 항등행렬의 거울 이미지를 반환합니다.. 거울 이미지가 좌우 또는 위아래인지는 중요하지 않습니다. 예제는 이미지를 참고하세요
    답변) 네, 다음은 주어진 정수 `n`에 대한 아이디언트 행렬을 생성하고 `n`이 음수인 경우 그 거울 이미지를 반환하는 Python 함수 `id_mtrx`입니다. - 정답
    질문) 맨 아래층부터 1층, 2층, 3층, 4층 큐브에 각인된 숫자를 말해주세요
    답변)
    물론이죠! 아래(1층)부터 위로 올라가면서 설명해 드릴게요: - **1층(맨 아래):** 큐브에는 0, 1, 2, 3이라는 숫자가 새겨져 있습니다. - **2층:** 큐브에는 4, 5, 6, 7이라는 숫자가 새겨져 있습니다. - **3층:** 큐브에는 8과 9라는 숫자가 새겨져 있습니다. - **4층(맨 위):** 큐브에는 8이라는 숫자가 새겨져 있습니다. 따라서, 아래부터 위로 올라가는 큐브의 새겨진 숫자는 다음과 같습니다: - 1층: 0, 1, 2, 3 - 2층: 4, 5, 6, 7 - 3층: 8, 9 - 4층: 8 - 오답(입체 이미지 이해 부족)

    테스트 결과,  Pixtral 12B는 기울어진 이미지를 제외하고, 정확하게 대부분의 이미지를 이해하고, 이미지에서 글자를 추출하였으며,  파이썬 Hard, Very Hard 난이도의 코딩 문제도 정확하게 풀었습니다. 

     

    여러분도 아래 허깅페이스 스페이스에 접속하시면 Pixtral 12B 모델을 직접 테스트해 보실 수 있습니다. (Hyperbolic API 접속방식으로 Credit 소진 시 모델의 답변이 중지됩니다.)

    https://huggingface.co/spaces/JAMESPARK3/pixtral

     

    pixtral - a Hugging Face Space by JAMESPARK3

     

    huggingface.co

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    맺음말

    오늘은 Mistral AI의 첫 번째 멀티모달 모델, Pixtral 12B에 대해 살펴보았습니다. Pixtral 12B는 텍스트와 이미지를 동시에 이해할 수 있는 능력과 128k 토큰의 긴 컨텍스트 윈도우를 제공하여 복잡한 정보 처리를 가능하게 합니다. 이러한 기능들은 특히 지식, 추론, 질문 응답 분야에서 두드러진 성과를 보이며, 다양한 벤치마크에서 경쟁 모델들을 능가하는 성과를 기록하고 있습니다.

     

    Pixtral 12B의 실제 테스트를 통해 Pixtral 12B의 이미지 인식, 글자 추출, 추론 및 코딩 성능을 검증해 본 결과, 대부분의 테스트에서 우수한 성과를 보였으며, 특히 텍스트와 이미지의 복합적 분석에서 강점을 나타냈습니다. 그러나 입체 이미지 이해, 기울어진 텍스트 추출 등 일부 항목에서는 개선이 필요할 수 있음을 확인했습니다.

     

    오늘 블로그는 여기까지입니다. 저는 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다.

     

    https://fornewchallenge.tistory.com/

     

     

    2024.07.26 - [AI 언어 모델] - 🚀Mistral Large 2 리뷰: 유창한 한국어와 뛰어난 추론 능력의 코딩 AI

     

    🚀Mistral Large 2 리뷰: 유창한 한국어와 뛰어난 추론 능력의 코딩 AI

    안녕하세요! 오늘은 미스트랄의 최신 대형 언어 모델 Mistral Large 2에 대해서 알아보겠습니다. 123B(1230억 개)의 파라미터와 128k 컨텍스트 윈도우를 갖춘 Mistral Large 2는 코드 생성, 수학, 추론 능력에

    fornewchallenge.tistory.com

     

    728x90