본문 바로가기
AI 언어 모델

메타의 새로운 코딩용 대규모 언어 모델 : Code Llama 70B

by James AI Explorer 2024. 1. 31.
    728x90

    안녕하세요! 오늘은 메타에서 최근 공개한 Code Llama 70B에 대해서 알아보겠습니다. Code Llama 70B는 Code Llama 패밀리에서 가장 크고 성능이 우수한 모델로써, 이전에 공개된 Code Llama 모델과 동일한 세 가지 버전으로 제공되며, 모두 연구 및 상업적 사용을 위해 무료로 사용 가능합니다. 이 블로그에서는 Code Llama 70B의 개요, 특징, 성능평가, DEMO 코드 실행결과 등에 대해서 확인하실 수 있습니다.

    메타의 새로운 코딩용 대규모 언어 모델 : Codellama-70B

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

    Code Llama 70B 개요

    Code Llama는 코드 및 자연어 프롬프트에서 코드를 생성할 수 있는 최신 기술의 대형 언어 모델(Large Language Model, LLM)로, 코드 작성 및 코드에 관한 자연어를 생성할 수 있으며, 세 가지 버전은 다음과 같습니다.

    • Code Llama - 70B: 기본적인 코드 모델
    • Code Llama - 70B - Python: Python에 특화된 70B 모델
    • Code Llama - 70B - Instruct: 자연어 명령을 이해하기 위해 미세 조정된 70B 모델

    다음은 Code Llama 모델의 미세조정 변형인 Code Llama - Python과 Code Llama - Instruct에 대한 설명입니다.

    • Code Llama - Python: Code Llama - Python은 Code Llama의 특정한 변형으로, Python 코드의 100B 토큰에 대해 미세 조정(fine-tuned)되었습니다. Python은 코드 생성에 있어 가장 높이 평가받는 언어 중 하나이며, Python 및 PyTorch가 AI 커뮤니티에서 중요한 역할을 하는 것을 감안하여, 추가적인 유틸리티를 제공할 것으로 기대됩니다.
    • Code Llama - Instruct: Code Llama - Instruct는 Code Llama의 명령을 받은 특정한 변형입니다. Instruction tuning은 훈련 과정을 계속 진행하지만 목적이 다릅니다. 이 모델은 "자연어 명령" 입력과 예상 출력을 받습니다. 이것은 모델이 사용자의 명령에 대해 인간이 기대하는 것을 더 잘 이해하게 만들어줍니다. Code Llama를 코드 생성에 사용할 때는 항상 Code Llama - Instruct를 사용하는 것이 권장되며, Code Llama - Instruct는 자연어에서 도움이 되는 안전한 답변을 생성하도록 미세 조정되었습니다.

    이렇게 함으로써 Python 코드에 특화된 모델과 자연어 명령에 대한 미세 조정된 모델이 각각의 목적에 더 적합하게 사용될 수 있도록 합니다. 아래 그림은 LLAMA2 모델의 미세조정 학습 분류도입니다. 분류도에서 "Infilling code training"은 모델이 코드의 빈 부분을 채우는 작업을 학습하는 방법을 의미합니다.

    LLAMA2 모델의 미세조정 변형 분류도

    Code Llama 특징

    Code Llama는 Llama 2의 코드에 특화된 버전으로, Llama 2를 해당 코드 데이터셋으로 추가로 훈련시켜 생성 능력을 향상시켰습니다. Code Llama는 코드 및 자연어 프롬프트에서 코드 및 코드에 관한 자연어를 생성할 수 있습니다. 또한 코드 완성 및 디버깅에 사용할 수 있으며, Python, C++, Java, PHP, Typescript (Javascript), C# 및 Bash와 같은 오늘날 가장 인기 있는 언어들을 지원합니다.

     

    Code Llama 모델은 7B, 13B, 34B 및 70B 매개변수 크기로 제공되며, 각 모델은 500B 토큰의 코드 및 코드 관련 데이터로 훈련되었습니다. 70B 모델은 1Trillion(1조) 토큰으로 훈련되었습니다. 7B 및 13B 기본 및 Instruct 모델은 미들 채우기(Middle Fill, FIM) 기능으로 훈련되어 기존 코드에 코드를 삽입할 수 있으므로 코드 완성과 같은 작업을 지원할 수 있습니다.

     

    Code Llama 모델은 동작 및 대기 시간 요구 사항에 따라 성능이 다릅니다. 예를 들어, 7B 모델은 단일 GPU에서 동작될 수 있고, 34B 및 70B 모델은 최상의 결과를 반환하며 더 나은 코딩 지원을 제공하지만, 작은 7B 및 13B 모델은 더 빠르며 실시간 코드 완성과 같은 짧은 대기 시간이 필요한 작업에 더 적합합니다. Code Llama 모델은 최대 100,000 토큰의 컨텍스트로 안정적인 생성을 제공하며, 16,000 토큰의 시퀀스로 훈련되었습니다. 

    Code Llama 70B 성능 평가

    Code Llama의 성능을 평가하기 위해 HumanEval과 Mostly Basic Python Programming (MBPP)이라는 두가지 코딩 벤치마크를 사용했습니다. HumanEval은 모델이 문서 문자열을 기반으로 코드를 완성하는 능력을 테스트하고, MBPP는 모델이 설명을 기반으로 코드를 작성하는 능력을 테스트합니다. 벤치마크 테스트 결과, 아래 표와 같이 Code Llama는 오픈 소스 대규모 언어 모델보다 우수한 성능을 발휘하였고, Llama 2를 능가했습니다.

    Code Llama의 성능 평가

    728x90

    Code Llama 70B DEMO

    Code Llama 70B 모델은 아래 사이트에서 다운로드하거나, 온라인으로 접속하여 사용하실 수 있습니다.

    다음 화면은 Code Llama 70B instruct 버전을 퍼플렉시티 labs.perplexity.ai에서 접속한 화면입니다. 제가 스네이크 게임 파이썬 코드를 요청한 다음 응답 코드를 복사하여 바로 실행해보았는데요. 디버깅 없이 바로 게임이 정상 실행되었습니다.

    https://labs.perplexity.ai/

    아래는 Code Llama 70B instruct가 응답한 코드입니다. "pip install pygame"으로 종속성 라이브러리 설치 후 게임은  바로 정상 실행되었습니다. 

    import pygame
    import random
    import time
    
    pygame.init()
    
    # Define constants
    SCREEN_WIDTH = 600
    SCREEN_HEIGHT = 600
    FPS = 15
    
    # Define colors
    WHITE = (255, 255, 255)
    BLACK = (0, 0, 0)
    RED = (255, 0, 0)
    GREEN = (0, 255, 0)
    BLUE = (0, 0, 255)
    
    # Define screen
    screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
    pygame.display.set_caption("Snake Game")
    clock = pygame.time.Clock()
    
    # Define font
    font = pygame.font.SysFont("monospace", 16)
    
    # Define game variables
    snake_pos = [100, 50]
    snake_body = [[100, 50], [90, 50], [80, 50]]
    food_pos = [random.randrange(1, (SCREEN_WIDTH // 10)) * 10, random.randrange(1, (SCREEN_HEIGHT // 10)) * 10]
    food_spawn = True
    direction = "RIGHT"
    change_to = direction
    score = 0
    
    # Game loop
    running = True
    while running:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
    
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    change_to = "UP"
                if event.key == pygame.K_DOWN:
                    change_to = "DOWN"
                if event.key == pygame.K_LEFT:
                    change_to = "LEFT"
                if event.key == pygame.K_RIGHT:
                    change_to = "RIGHT"
    
        # Check if the direction has changed
        if change_to == "UP" and direction != "DOWN":
            direction = "UP"
        if change_to == "DOWN" and direction != "UP":
            direction = "DOWN"
        if change_to == "LEFT" and direction != "RIGHT":
            direction = "LEFT"
        if change_to == "RIGHT" and direction != "LEFT":
            direction = "RIGHT"
    
        # Move the snake
        if direction == "UP":
            snake_pos[1] -= 10
        if direction == "DOWN":
            snake_pos[1] += 10
        if direction == "LEFT":
            snake_pos[0] -= 10
        if direction == "RIGHT":
            snake_pos[0] += 10
    
        # Check if the snake has hit the boundary
        if snake_pos[0] < 0 or snake_pos[0] > SCREEN_WIDTH - 10:
            running = False
        if snake_pos[1] < 0 or snake_pos[1] > SCREEN_HEIGHT - 10:
            running = False
    
        # Check if the snake has hit itself
        for block in snake_body[1:]:
            if snake_pos[0] == block[0] and snake_pos[1] == block[1]:
                running = False
    
        # Check if the snake has eaten the food
        if snake_pos[0] == food_pos[0] and snake_pos[1] == food_pos[1]:
            food_spawn = False
            score += 1
        else:
            snake_body.pop()
    
        # Spawn new food
        if not food_spawn:
            food_pos = [random.randrange(1, (SCREEN_WIDTH // 10)) * 10, random.randrange(1, (SCREEN_HEIGHT // 10)) * 10]
        food_spawn = True
    
        # Insert new body part
        snake_body.insert(0, list(snake_pos))
    
        # Draw the screen
        screen.fill(BLACK)
    
        for pos in snake_body:
            pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 10, 10))
    
        pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 10, 10))
    
        # Draw score
        score_text = font.render("Score: " + str(score), True, WHITE)
        screen.blit(score_text, [0, 0])
    
        pygame.display.update()
        clock.tick(FPS)
    
    pygame.quit()

     

    아래 화면은 Snake Game 실행화면입니다. 방향키로 이동하여 빨간 점을 먹으면 점수가 올라갑니다. 

    Code Llama 70B가 만든 Snake game

    마치며

    이번 블로그에서는 메타에서 최근에 공개한 Code Llama 70B 모델에 대해 알아보았습니다. Code Llama는 코드 생성 및 자연어 명령을 이해하는 데에 특화된 대형 언어 모델로, 70B 모델은 기본 버전인 Code Llama, Python에 특화된 Code Llama - Python, 그리고 명령을 따르는 능력이 강화된 Code Llama - Instruct로 나뉩니다.

     

    또한 Code Llama 70B 모델은 1Trillion(1조) 토큰으로 훈련되어, 시리즈 중 최상의 결과와 더 나은 코딩을 지원할 수 있으며, HumanEval과 MBPP 코딩 벤치마크를 통해 확인한 결과, 다양한 언어 및 명령에 대한 지원과 성능 향상을 통해, 오픈소스 대규모 언어 모델 중에서 우수한 성과를 보인 것으로 나타났습니다.

     

    Code Llama 70B는 연구 및 상업적 사용을 위해 무료로 제공되고 있으며, 실제 코딩 작업에서 생산성을 높일 수 있는 강력한 도구가 될 것으로 기대됩니다. 여러분도 더 뛰어난 코딩 능력과 우수한 성능을 가지고 있는 Code Llama 70B를 한번 경험해 보시면 어떨까요? 그럼 저는 다음 시간에 더욱 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

     

    2024.01.30 - [AI 논문 분석] - [AI 논문] 코알라: '달리'보다 5배 빠른 ETRI의 이미지 생성 모델

     

    [AI 논문] 코알라: '달리'보다 5배 빠른 ETRI의 이미지 생성 모델

    안녕하세요! 오늘은 최근 뉴스에 보도된 우리나라 ETRI 연구소에서 개발한 KOALA라는 이미지 생성 모델에 대해서 알아보겠습니다. 기존 이미지 생성 모델인 오픈 AI의 '달리 2'와 '달리 3' 보다 빠른

    fornewchallenge.tistory.com

     

     

    728x90