본문 바로가기
AI 언어 모델

미스트랄 Codestral Mamba:🐍Mamba 아키텍처로 무장한 코드 생성 AI

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

    안녕하세요! 오늘은 미스트랄의 새로운 코드 생성 언어 모델, Codestral Mamba에 대해서 알아보겠습니다. Codestral Mamba는 프랑스의 Mistral AI 팀이 개발한 Mixtral 패밀리의 후속작으로, 특히 코드 생산성에 초점을 맞춘 모델입니다.  Transformer 모델과 달리 Mamba 모델선형 시간 추론을 통해 이론적으로 무한 길이의 시퀀스를 모델링함으로써, 입력 길이에 상관없이 빠른 응답을 보장합니다. 또한 Apache 2.0 라이선스를 통해 누구나 자유롭게 사용, 수정, 배포할 수 있습니다. 이 블로그에서는 Codestral Mamba의 개요Mamba 아키텍처에 대해 알아보고, 성능테스트 및 간단한 챗봇을 만들어 보겠습니다. 

    미스트랄 Codestral Mamba:🐍Mamba 아키텍처로 무장한 코드 생성 AI

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

    Codestral Mamba 개요

     Codestral Mamba는 총 7,285,403,648개의 매개변수를 가지고 있으며, 최대 256,000 토큰의 컨텍스트 길이를 지원하는 고급 코드 생성과 논리 추론 능력을 갖춘 모델입니다. Codestral Mamba는 Mamba 모델 아키텍처를 채택하여 선형 시간 추론(linear time inference)을 통해 시퀀스 길이와 처리 시간(계산 비용)이 비례하며, 이론적으로 무한 길이의 시퀀스를 처리할 수 있습니다.

    Codestral Mamba 벤치마크 결과

    위 표에서 보듯이 Codestral Mamba는 여러 코딩 벤치마크에서 뛰어난 성능을 보이는 코드 생성 모델로, 특히 7B 모델 중에서 두드러진 성능을 보여줍니다. HumanEval 벤치마크에서 75%의 정확도를 기록하여 7B 모델 중 가장 높은 점수를 기록했습니다. 이는 CodeLlama 7B (31.1%), DeepSeek v1.5 7B (65.9%) 보다 높은 수치입니다. MBPP와 Crux 벤치마크에서도 각각 68.5%, 57.8%로 7B 모델 중 최고 수준의 성능을 보입니다. 다만 Spider 벤치마크에서는 DeepSeek v1.5 7B (61.2%) 보다 낮은 58.8%를 기록했습니다. 전반적으로 Codestral Mamba는 7B 모델 중 가장 뛰어난 코드 생성 성능을 보이며, 특히 HumanEval에서의 높은 정확도는 주목할 만합니다.

    https://mistral.ai/news/codestral-mamba/

     

    Codestral Mamba

    As a tribute to Cleopatra, whose glorious destiny ended in tragic snake circumstances, we are proud to release Codestral Mamba, a Mamba2 language model specialised in code generation, available under an Apache 2.0 license.

    mistral.ai

    728x90

    Mamba 모델 아키텍처

    Mamba 모델 아키텍처는 기존의 Transformer 모델의 "제곱 시간 복잡도 단점"을 극복하기 위해 설계된 새로운 형태의 시퀀스 모델입니다. 아래는 Mamba 모델 아키텍처의 주요 동작 원리에 대한 설명입니다:

      • 배경: Mamba 모델은 Transformer의 attention 메커니즘을 대체하고, 긴 시퀀스를 처리할 때 발생하는 계산 비용 문제를 해결하기 위해 개발되었습니다. 기존의 Transformer는 시퀀스 길이에 따라 계산 비용이 기하급수적으로 증가하는 반면, Mamba 모델은 시퀀스 길이에 선형적으로 확장됨으로써, 긴 시퀀스를 효율적으로 처리할 수 있습니다.
      • 선형 시간 추론: 선형 시간 추론은 알고리즘이나 모델이 주어진 입력 데이터를 처리하는 데 걸리는 시간이 입력 데이터의 크기에 비례하는 것을 의미합니다. 즉, 입력 데이터의 크기가 두 배가 되면 처리 시간도 거의 두 배가 되는 방식으로, 긴 입력에도 빠른 응답을 보장하여 코드 생산성이 향상되며, 데이터 크기에 따른 처리 시간을 쉽게 예측할 수 있어, 시스템 설계와 성능 튜닝에 유리합니다.
      • 선택적 상태 공간 모델 (Selective State Space Model): Mamba 모델은 입력 데이터에 따라 중요한 정보만 기억하고 불필요한 정보를 잊어버리는 상태 공간 모델(SSM) 사용을 통해 선택적으로 정보를 처리하며, GPU의 메모리를 불필요하게 확장하지 않고 이전 상태를 이용해서 반복적으로 계산하는 순환 방식 알고리즘을 사용함으로써 긴 시퀀스 데이터를 빠르게 처리할 수 있습니다.
      • 아키텍처 설계: Mamba는 선택적 상태 공간 모델과 간단한 블록 구조를 결합하여 Transformer의 입력 벡터 맵핑과 특성추출을 담당하는 MLP(Multi-Layer Perceptron) 블록을 대체합니다. 이러한 간소화된 아키텍처는 훈련 및 추론 속도를 높이고, 시퀀스 길이에 따라 선형적으로 확장될 수 있도록 합니다. 
      • 실험 결과: Mamba는 선택적 상태 공간 모델 덕분에 언어 및 유전체학과 같은 밀도가 높은 데이터 모달리티에서 Transformer와 동등하거나 더 나은 성능을 보입니다. 예를 들어, 언어 모델링에서는 Mamba-3B 모델이 같은 크기의 Transformer를 능가하고, 두 배 크기의 Transformer와도 비슷한 성능을 보였습니다.

    Mamba 모델 아키텍처

    Mamba 모델 아키텍처는 "H3" 블록"게이트형 MLP" 블록이라는 두 가지 주요 구성 요소를 결합하여 대부분의 SSM(상태 공간 모델) 아키텍처의 기반을 구성합니다. 선형 변환과 비선형 변환이 순차적으로 나타나는 H3 블록은 기존 SSM의 기본 구성 요소를 나타내며, 게이트형 MLP 블록은 MLP(다층 퍼셉트론)에 곱셈 게이트를 통합하여 특정 계산에 대한 입력의 관련성을 선택적으로 제어합니다. 

     

    Mamba는 H3 및 게이트형 MLP 블록을 결합할 때, 일반적인 활성화 함수 대신, 입력 데이터와 가중치 사이의 곱셈 연산을 수행하고 네트워크의 정보흐름을 조절하는 첫 번째 곱셈 게이트를 활성화 함수로 사용해서 더 복잡한 비선형성을 도입하고, 주요 분기에 상태 공간 모델을 추가함으로써, 모델이 입력 데이터를 희소 행렬 형태로 처리하여 계산의 복잡도를 줄이고 속도를 개선할 수 있습니다. 다음은 Mamba 아키텍처와 Transformer 아키텍처의 비교표입니다. 

    특징 Mamba 아키텍처 Transformer 아키텍처
    주요 특징 선형 시간 추론, 무한 길이 시퀀스 모델링 다중 헤드 어텐션 메커니즘을 통한 병렬 처리
    시간 복잡도 입력 길이에 비례한 선형 시간 입력 길이의 제곱에 비례한 시간
    모델링 가능 시퀀스 길이 이론적으로 무한 길이의 시퀀스 모델링 가능 실용적으로 제한된 길이 (메모리 제약)
    성능 (응답 속도) 입력 길이에 상관없이 빠른 응답 시간 보장 긴 시퀀스 입력 시 응답 시간 증가
    구조 새로운 아키텍처 접근, 효율적인 메모리 사용 고전적인 트랜스포머 블록 구조 (인코더-디코더)
    응용 분야 코드 생성, 텍스트 완성, 논리 추론 등 자연어 처리, 번역, 텍스트 생성 등
    효율성 메모리 효율적, 긴 시퀀스 처리에 유리 많은 메모리 소비, 긴 시퀀스에 비효율적
    학습 곡선 새로운 접근 방식으로 인한 초기 학습 곡선 존재 널리 연구된 모델로 학습 자료와 리소스가 풍부
    호환성 기존 도구와의 호환성 문제 발생 가능 광범위하게 지원되는 라이브러리 및 도구
    커뮤니티 지원 신생 아키텍처로 커뮤니티 지원 제한적 널리 사용되고 연구되어 커뮤니티 지원 풍부
    라이선스 Apache 2.0 (오픈 소스) 다양한 라이선스 (상업적 및 오픈 소스 포함)

    Codestral Mamba 챗봇 만들기

    다음은 Codestral Mamba를 사용하여 간단한 챗봇을 만드는 방법을 소개하겠습니다. 이 블로그의 작업환경은 Windows 11 Pro(23H2), WSL2파이썬 버전 3.11비주얼 스튜디오 코드(이하 VSC) 1.90.2이며, VSC를 실행하여 "WSL 연결"을 통해 Windows Subsystem for Linux(WSL) Linux 환경에 액세스 하도록 구성하였습니다. 

     

    Codestral Mamba 챗봇을 만들기 위한 작업순서는 다음과 같습니다.

    1. 가상환경 생성 및 활성화: VSC에서 메인 디렉토리를 생성한 후, 아래 명령어로 가상환경을 생성하고 활성화합니다. 

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

    2. 의존성 패키지 설치 및 API KEY 설정: mistralai와 gradio 패키지를 설치하고 Mistral API KEY를 발급받아 설정합니다. API KEY 발급은 Mistral AI에 가입한 후, https://console.mistral.ai/billing/ 에서 Free trial 구독을 시작하면 5유로가 충전되고, https://console.mistral.ai/api-keys/에 접속하여 API KEY를 발급하면 됩니다. 

    Free trial 구독 화면
    Mistral API KEY 발급화면

    pip install mistralai gradio
    export MISTRAL_API_KEY=xxxxxxxx

    가상환경 생성 및 활성화, 의존성 패키지 설치

    3. 코드 작성: 아래 코드는 Gradio와 Mistral API를 사용하여 챗봇을 만드는 예제이며, 출처는 유튜브 "Codestral Mamba: Did it Pass the Coding Test?"입니다.

    import gradio as gr
    from mistralai.client import MistralClient
    from mistralai.models.chat_completion import ChatMessage
    import os
    
    def chat_with_mistral(user_input):
        api_key = os.environ["MISTRAL_API_KEY"]
        model = "codestral-mamba-latest"
    
        client = MistralClient(api_key=api_key)
        messages = [ChatMessage(role="user", content=user_input)]
    
        chat_response = client.chat(model=model, messages=messages)
        return chat_response.choices[0].message.content
    
    iface = gr.Interface(
        fn=chat_with_mistral,
        inputs=gr.components.Textbox(label="Enter Your Message"),
        outputs=gr.components.Markdown(label="Chatbot Response"),
        title="Mistral AI Chatbot",
        description="Interact with the Mistral API via this chatbot. Enter a message and get a response.",
        examples=[["Give me a meal plan for today"]],
        allow_flagging="never"
    )
    
    iface.launch()

    API KEY 설정 및 코드 실행

    이 코드는 사용자 입력을 받아 Mistral API를 통해 Codestral Mamba 모델에 전달하고, 모델의 응답을 출력하는 간단한 챗봇 인터페이스를 제공합니다. 이를 통해 Codestral Mamba의 성능을 직접 체험할 수 있습니다. 

    4. 코드 실행: 코드를 실행하면 http://127.0.0.1:7860/ 주소에서 아래와 같이 Codestral Mamba 챗봇 초기화면이 열립니다. 

    Codestral Mamba 챗봇 초기화면

    Codestral Mamba 성능테스트

    다음은 Codestral Mamba의 코딩성능을 테스트해 보겠습니다. 먼저 아래 화면과 같이 파이썬으로 스네이크 게임을 만들어 달라고 요청한 결과, Codestral Mamba는 첫번째 시도에서 모든 기능이 정상적으로 동작하고 시작화면과 종료화면, 버튼배치가 있는 완성도 높은 스네이크 게임을 생성하였습니다. 

    Codestral Mamba가 만든 스네이크 게임 파이썬 코드
    Codestral Mamba가 만든 스네이크 게임 실행 화면
    Codestral Mamba가 만든 스네이크 게임 실행 화면

    다음 코딩 테스트는 edabit.com 코딩 교육 사이트의 파이썬 코딩 시험문제로 테스트하였으며, 답변 코드가 한 번에 성공하지 못하면 Fail로 처리하였습니다. 

    Python Easy 단계 : 성공
    Python Mediium 단계 : 성공
    Python Hard 단계 : 실패
    Python Very Hard 단계 : 실패
    Python Expert 단계 : 성공

    Python/Pass@1 Easy Medium Hard Very Hard Expert
     Codestral Mamba 7B Pass Pass Fail Fail Pass
    Llama3 8B Fail Pass Fail Pass Fail
    Qwen2-7B Pass Fail Fail Fail Fail

    파이썬 코딩 테스트 결과 Codestral Mamba 7B는 총 5문제 중 3문제를 성공했으며, 비슷한 크기의 모델인 Llama3 8B와 Qwen2-7B보다 우수한 성능을 보여주었습니다. 특히 Expert 난이도의 문제를 성공한 것은 놀라웠습니다. 

     

    맺음말

    이 블로그에서는 Mistral AI가 최근 공개한 Codestral Mamba에 대해 살펴보았습니다. Codestral Mamba는 코드 생성에 특화된 7B 규모의 언어 모델로, Mamba 아키텍처를 기반으로 하여 여러 코딩 벤치마크에서 동급 모델들을 능가하는 성능을 보여주었으며, Apache 2.0 라이선스로 공개되어 자유로운 사용, 수정, 배포가 가능합니다.

     

    Mistral API와 Gradio를 이용해서 간단한 챗봇을 구현해 본 결과, 실제 코딩 테스트에서 비슷한 규모의 다른 모델들보다 우수한 성능을 보여주었습니다. Codestral Mamba는 Mamba 아키텍처의 효율성과 강력한 성능을 결합하여, 앞으로 AI 기반 코딩 지원 도구와 개발자 생산성 향상에 큰 기여를 할 것으로 기대됩니다.

     

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

     

    https://fornewchallenge.tistory.com/

     

     

    2024.05.31 - [AI 언어 모델] - 🌟코딩 혁신: Codestral - 미스트랄이 만든 AI 코드 생성 끝판왕!🚀

     

    🌟코딩 혁신: Codestral - 미스트랄이 만든 AI 코드 생성 끝판왕!🚀

    안녕하세요! 오늘은 미스트랄의 새로운 코드 생성 언어 모델 Codestral에 대해서 알아보겠습니다. Codestral은 Python, Java, C, C++, JavaScript, Bash를 포함한 80개 이상의 프로그래밍 언어로 학습되었으며, Sw

    fornewchallenge.tistory.com

     

    728x90