코드를 생성하는 LLM의 등장 (GitHub Copilot, StarCoder, Code-LLaMA)

ChatGPT가 등장하고 많은 사람들이 본인의 업무 혹은 과제를 위해서 거대언어모델을 사용하기 시작했고 AI에 대한 영향력이 점차 커지고 있습니다. 사실 ChatGPT 나오기전부터 LLM의 도움을 받아서 업무를 하고 있는 집단이 있었습니다. 바로 개발자들이었습니다. 개발자들은 2021년부터 GitHub Copilot이 등장하면서 코드를 만들어주는 AI모델을 사용하면서 개발했습니다. ChatGPT가 나온 이후에는 GPT-4를 많이 사용했습니다. 올해 LLM 시장이 확대되면서 Hugging Face가 후원한 BigCode 프로젝트에서 나온 StarCoder 프로젝트도 나왔습니다. 이후 Meta에서도 LLaMA를 코드특화한 Code-LLaMA가 등장했습니다. 이번 블로그에서는 코드용 LLM에 대해 알아보고 각 모델에 대한 특징을 알아보겠습니다.
코드용 LLM이란?
표준국어사전에 의하면 언어는 생각, 느낌 따위를 나타내거나 전달하는 데에 쓰는 음성, 문자 따위의 수단 또는 그 음성이나 문자 따위의 사회 관습적인 체계입니다. 언어는 한국어, 영어와 같은 자연적으로 발생한 자연어도 있지만 C, C++, Python, Golang과 같은 인간과 컴퓨터 사이를 연결해주는 프로그래밍 언어가 있습니다. 코드용 LLM은 이러한 프로그래밍 언어를 생성해 개발자들의 개발 편익을 높여주는 LLM입니다.

Shima Imani, Du, Shrivastava (2023), MATHPROMPTER: MATHEMATICAL REASONING
USING LARGE LANGUAGE MODELS
그렇다면 단순히 코드용 LLM은 개발자만을 위한 도구라고 생각하면 오산입니다. 프로그래밍 언어의 가장 큰 특징은 자연어와 달리 표현보다 논리성이 우선적이라고 볼 수 있습니다. 우리가 사용하는 자연어의 경우 논리가 맞지 않더라도 표현을 잘 하게 되면 의도하는 바가 충분히 전달되지만 프로그래밍 언어의 경우 표현을 아무리 잘한다하더라도 논리가 맞지 않으면 의사소통이 이루어지지 않습니다. 그렇기 때문에 코드용 LLM은 코드만 생성하는 작업뿐만 아니라 수학문제풀기와 같은 논리적인 연산이 필요한 경우에도 많이 사용되고 있습니다.
그렇다면 현재 나온 코드용 LLM이 어떤 것이 있는지 확인하고 각자의 특징에 대해 설명하고자 합니다.
GitHub Copilot
GitHub Copilot은 2021년에 처음 출시한 코드용 LLM입니다. 해당 서비스의 기초가 되는 모델은 OpenAI에서 나온 Codex입니다. Codex의 경우 GPT-3를 기반으로 만들어진 모델이지만 GPT-3는 자연어와 프로그래밍 언어 모두를 학습시켰지만 해당 모델은 프로그래밍언어만 학습을 시켰습니다. Codex의 경우 주로 파이썬 위주로 학습시켰지만 JS, Golang, Perl, PHP, Ruby, Swift, TypeScript와 같은 언어들도 학습되어 있어 다양한 언어를 포괄하고 있습니다. GitHub Copilot의 경우 구독제로 운영하며 월 10달러 혹은 연 100달러를 내야 사용가능합니다.
2023년 GPT-4가 출시에 맞춰서 GitHub Copilot도 GitHub Copilot X를 출시했습니다. 현재 시점에서 Copilot X는 Waiting list를 받고 있으며 정식 출시는 시간이 걸릴 것으로 판단하고 있습니다. 다만 GPT-4가 뛰어난 코드 생성능력을 보여주고 있기 때문에 GitHub Copilot X 또한 코드 생성능력에서만큼은 확실하게 보장받을 수 있을것이라고 기대하고 있습니다.
StarCoder
GitHub Copilot은 크게 2가지 문제점을 갖고 있습니다. 우선 GitHub Copilot의 경우 라이센스가 위반해서 코드를 모았다는 의혹을 갖고 있으며 오픈소스 모델이 아니기 때문에 사용하는데 제약이 있을 수 밖에 없습니다. 그러나 BigCode에서 만든 StarCoder는 이 2가지 문제에서 자유로운 코드용 LLM입니다.
StarCoder는 인공지능 윤리에 엄격한 Hugging Face와 클라우드 컴퓨팅업체 ServiceNow가 개방적으로 협업체인 BigCode에서 만든 코드용 LLM입니다. StarCoder는 80개 이상의 프로그래밍 언어, Git 커밋, GitHub 이슈, Jupyter Notebook등 GitHub에서 허가한 데이터로 학습된 모델입니다. 해당 모델을 만들 때 사용한 데이터의 경우 에서 user명으로 확인할 수 있습니다. 만일 코드 기여자가 해당 코드를 사용하지 않는다면 옵트아웃도 가능하게 만들었다고 합니다. 그리고 톨로카와 협업해 이름, 비밀번호, 이메일 주소와 같은 개인 식별 정보를 훈련 데이터에서 제거해 쉽게 사용했다고 합니다.
또한 StarCoder의 경우 모델이 공개되어 있어 누구나 접근해서 무료로 사용할 수 있습니다. 사용하는 코드는 다음과 같습니다.
from transformers import AutoModelForCausalLM, AutoTokenizer
checkpoint = "bigcode/starcoder"
device = "cuda" # for GPU usage or "cpu" for CPU usage
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForCausalLM.from_pretrained(checkpoint).to(device)
inputs = tokenizer.encode("def print_hello_world():", return_tensors="pt").to(device)
outputs = model.generate(inputs)
print(tokenizer.decode(outputs[0]))
Code-LLaMA
마지막으로 소개할 코드용 LLM은 Code-LLaMA입니다. Code-LLaMA는 LLaMA 2에 코드에 특화된 데이터셋을 추가로 학습시켜 만든 코드버전입니다. 그렇기에 위에서 봤던 GitHub Copilot이나 StarCoder와 달리 코드와 코드에 대한 자연어까지 생성할 수 있습니다. Code-LLaMA의 경우 LLaMA 처럼 7B, 13B, 34B 3가지 크기로 출시되었습니다. 7B의 경우 단일 GPU에서 작동할 수 있게 만들었으며 34B의 경우 최상의 결과를 반환하지만 시간 지연이 존재합니다. Code-LLaMA를 잘 튜닝했을 경우 현재 최고의 퍼포먼스라 불리는 GPT-4보다 코드추론능력이 좋다고 평가받고 있습니다.
뿐만 아니라 Code LLaMA의 경우 Code LLaMA Python 버전과 instruct 버전을 지원해 다양한 버전으로 나올 수 있게 합니다. GitHub Copilot과 달리 Code-LLaMA는 모델 weight를 공개해서 사람들이 더 자연스럽게 튜닝할 수 있게 했으며 리서치용도에서 자유롭게 개발할 수 있도록 만들었습니다. 그러나 StarCoder와 비교했을 때 Code-LLaMA 또한 어떤 데이터로 학습되었는지 알 수 없으며 LLaMA 특유의 라이선스로 인해 상업적으로 사용할 때 문제가 발생할 수 있습니다.
앞으로의 코드용 LLM은?