Google의 대규모 언어 모델인 Gemma를 기반으로 개발된 CodeGemma는 코드 생성 및 완성에 특화된 모델입니다. Gemma의 강력한 언어 이해 능력과 방대한 학습 데이터를 바탕으로, CodeGemma는 다양한 프로그래밍 언어와 도메인에서 뛰어난 성능을 발휘합니다.

코딩은 소프트웨어 개발의 핵심이지만, 때로는 반복적이고 지루한 작업이 될 수 있습니다. 특히 상용구 코드를 작성하거나 복잡한 문제를 해결하려 할 때 많은 시간과 노력이 필요합니다. 코드 생성과 관련된 대규모 언어 모델(Large Language Models, LLMs)로는 DeepSeek Coder, StarCoder2, Stable Code 등이 있지만, CodeGemma는 속도와 성능 면에서 이들을 앞서고 있습니다.

CodeGemma는 코드 완성, 코드 생성, 자연어 이해, 수학적 추론, 지침 추적 등 다양한 코딩 작업을 수행할 수 있는 강력한 경량 모델 컬렉션입니다. 선행 학습된 7B 변형, 명령 조정 변형, 그리고 최첨단 2B 변형 등 총 3가지 모델 변형을 제공하여 개발자들의 니즈에 맞게 선택할 수 있습니다. 특히 최첨단 2B 변형은 다른 모델보다 최대 2배 더 빠른 코드 작성을 제공하여 개발 속도를 획기적으로 향상합니다.

CodeGemma 모델은 지능형 코드 완성 및 생성 기능을 통해 행, 함수, 전체 코드 블록을 빠르게 작성할 수 있도록 도와줍니다. 또한 웹 문서, 수학, 코드 등 방대한 데이터로 학습된 모델인 만큼 문법적으로 정확하고 의미상으로도 유의미한 코드를 생성하므로 오류와 디버깅 시간을 줄일 수 있습니다. 뿐만 아니라 Python, JavaScript, Java, Kotlin, C++, C#, Rust, Go 등 다양한 언어를 지원하여 개발자들의 언어 선택의 폭을 넓혀줍니다.

CodeGemma를 활용하는 방법에는 다양한 옵션이 있습니다. 이 글에서는 Hugging Face를 이용한 CodeGemma 활용 방법에 대해 알아보고자 합니다. Hugging Face는 자연어 처리와 기계 학습 분야에서 널리 사용되는 오픈 소스 라이브러리로, CodeGemma와 같은 최신 모델들을 손쉽게 사용할 수 있도록 도와줍니다.

지금부터 Hugging Face를 통해 CodeGemma를 활용하는 방법을 단계별로 살펴보겠습니다.


1. Hugging Face에서 CodeGemma 액세스 하기

CodeGemma를 사용하기 위한 첫 번째 단계는 Hugging Face 플랫폼에 액세스 하는 것입니다. Hugging Face는 최신 자연어 처리 및 기계 학습 모델을 공유하고 협업할 수 있는 인기 있는 오픈 소스 커뮤니티입니다.

CodeGemma 모델에 액세스 하려면 먼저 Hugging Face 계정이 필요합니다. 아직 계정이 없다면 회원가입을 진행해야 합니다. 회원가입은 무료이며, 이메일을 통해 간편하게 가입할 수 있습니다. Hugging Face 웹사이트에 접속하여 "Sign Up" 버튼을 클릭하고, 이메일 주소와 비밀번호를 입력하면 됩니다. 

계정이 있다면, Hugging Face 웹사이트에 로그인하세요. 로그인이 완료되면 이제 CodeGemma 모델에 액세스 할 수 있습니다.

계정이 있다면, Hugging Face 웹사이트에 로그인하세요. 로그인이 완료되면 이제 CodeGemma 모델에 액세스 할 수 있습니다. 'Acknowledge license'를 클릭합니다. CodeGemma 모델을 사용하려면 Kaggle을 통해 액세스 권한을 얻어야 합니다.

"Model License Consent on Kaggle would like to access your Hugging Face account."라는 메시지가 나타납니다. Kaggle이 사용자의 Hugging Face 계정에 액세스 하려고 한다는 것을 의미합니다. "Authorize" 버튼을 클릭하면 "Gemma Access Request" 페이지로 이동합니다. "Gemma Access Request" 페이지에서는 CodeGemma 모델 사용에 필요한 라이선스 약관에 동의해야 합니다. 약관을 자세히 읽어보고, 동의한다면 체크박스를 선택한 후 확인 버튼을 클릭하세요. 이 과정을 완료하면 CodeGemma 모델을 사용할 수 있는 권한을 얻게 됩니다.

이제 Hugging Face와 Kaggle을 통해 CodeGemma 모델에 액세스 할 준비가 되었습니다. 다음 단계에서는 선택한 모델을 실제 프로젝트에 적용하는 방법에 대해 자세히 알아보겠습니다.

2. Colab에서 CodeGemma 구현하기

이제 CodeGemma 모델에 액세스 할 수 있게 되었으니, 실제로 모델을 사용하여 코드 생성과 완성을 해보겠습니다. 이 글에서는 Google Colab을 사용하여 CodeGemma를 구현하는 방법을 단계별로 설명하겠습니다.

2.1. pip를 이용한 필요 패키지 설치
Colab에서 CodeGemma를 사용하려면 먼저 필요한 패키지를 설치해야 합니다. 다음 명령어를 실행하여 transformers와 accelerate 패키지를 설치하세요.

!pip install transformers accelerate

2.2. 필요 패키지 불러오기
필요한 패키지를 설치했다면, 이제 패키지를 불러와야 합니다. 다음 코드를 실행하여 필요한 모듈을 임포트 하세요.

from transformers import GemmaTokenizer, AutoModelForCausalLM

2.3. Hugging Face에 로그인하기
CodeGemma 모델을 사용하려면 Hugging Face에 로그인해야 합니다. notebook_login() 함수를 사용하여 간편하게 로그인할 수 있습니다.

from huggingface_hub import notebook_login
notebook_login()

Hugging Face Access Token이 필요합니다. Token : 영역에 Hugging Face Access Token 입력 후 엔터를 클릭합니다. 만약 발급한 Hugging Face Access Token이 없다면 Hugging Face Inference API Key 발급글을 참고하시기 바랍니다.

2.4. 코드 생성을 위한 CodeGemma 모델 사용하기
이제 CodeGemma 모델을 사용하여 코드를 생성해 보겠습니다. 다음 코드를 실행하여 CodeGemma 모델을 불러오세요.

tokenizer = GemmaTokenizer.from_pretrained("google/codegemma-2b")
model = AutoModelForCausalLM.from_pretrained("google/codegemma-2b")

위 코드는 코드 생성에 최적화된 codegemma 2B 모델을 불러옵니다. 이제 model.generate() 메서드를 사용하여 코드를 생성할 수 있습니다. max_new_tokens 매개변수를 사용하여 생성할 새로운 토큰의 최대 개수를 지정합니다.

input_text = "Write me a Python function to calculate the nth fibonacci number."
input_ids = tokenizer(input_text, return_tensors="pt")

outputs = model.generate(**input_ids, max_length=150, num_return_sequences=1)
print(tokenizer.decode(outputs[0]))

Output:

<bos>Write me a Python function to calculate the nth fibonacci number.py
<|fim_prefix|><|fim_suffix|><|fim_middle|>def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

n = int(input("Enter the nth term: "))
print("The nth term of the Fibonacci sequence is:", fibonacci(n))
<|file_separator|><eos>

2.5. 코드 완성을 위한 CodeGemma 모델 사용하기
CodeGemma 모델은 코드 완성에도 사용할 수 있습니다. 코드 완성 예시를 보여드리겠습니다. 다음 코드를 실행하면 주어진 프롬프트를 기반으로 함수를 완성합니다.

prompt = '''\\
<|fim_prefix|>import datetime

def calculate_age(birth_year):
    """Calculates a person's age based on their birth year."""
    current_year = datetime.date.today().year
<|fim_suffix|>
    return age
<|fim_middle|>\\
'''

inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
prompt_len = inputs["input_ids"].shape[-1]
outputs = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(outputs[0][prompt_len:]))

Output:

age = current_year - birth_year<|file_separator|>test_calculate_age.py
<|fim_suffix|>
    assert calculate_age(1990) == 33
    assert calculate_age(1980) == 43
    assert calculate_age(1970) == 53
    assert calculate_age(1960) == 63
    assert calculate_age(1950) == 73

CodeGemma 모델은 완성된 코드 뒤에 추가 콘텐츠를 반환할 수 있습니다. 예를 들면 위와 같습니다. 생성된 출력에서 올바른 완성 코드 뒤에 추가 내용이 있습니다. 모델은 완성된 코드를 반환한 후, FIM 토큰 중 하나 또는 EOS 토큰을 반환합니다. 이러한 토큰 뒤에 오는 모든 내용은 무시해야 합니다. 이를 처리하는 좋은 방법은 generate 함수에 종결자(terminators) 리스트를 제공하는 것입니다.

FIM_PREFIX = '<|fim_prefix|>'
FIM_SUFFIX = '<|fim_suffix|>'
FIM_MIDDLE = '<|fim_middle|>'
FIM_FILE_SEPARATOR = '<|file_separator|>'

terminators = tokenizer.convert_tokens_to_ids([FIM_PREFIX, FIM_MIDDLE, FIM_SUFFIX, FIM_FILE_SEPARATOR])
terminators += [tokenizer.eos_token_id]

outputs = model.generate(
  **inputs,
  max_new_tokens=100,
  eos_token_id=terminators,
)

이 경우 응답에서 첫 번째 구분자가 발견되는 즉시 생성이 중단됩니다.

Output:

age = current_year - birth_year<|file_separator|>

이제 tokenizer.decode()를 사용하여 생성된 출력을 디코딩할 때, 첫 번째 구분자까지만 고려하면 됩니다. 이렇게 하면 원하는 완성 코드만 얻을 수 있습니다. 이 방법을 사용하면 CodeGemma 모델에서 생성된 출력을 효과적으로 처리하고, 원하는 완성 코드만 추출할 수 있습니다. 모델이 생성한 추가 콘텐츠를 필터링하여 코드 완성 기능을 보다 효율적으로 활용할 수 있습니다.

3. CodeGemma 활용 사례

CodeGemma 모델은 프리트레인 된 변형과 명령어 튜닝된 변형으로 나뉘며, 각각 입력과 출력이 다릅니다. 프리트레인 된 모델은 코드 완성 및 생성을 위해 코드의 일부나 자연어를 입력받아 코드와 자연어를 출력하고, 명령어 튜닝된 모델은 자연어 프롬프트를 입력받아 코드와 자연어를 생성합니다. 모델 학습에는 최신 세대의 TPU 하드웨어와 JAX, ML Pathways 소프트웨어 프레임워크가 사용되었으며, 다양한 평가 지표와 결과를 통해 성능이 검증되었습니다.

CodeGemma 모델은 코드 완성, 코드 생성, 코드 대화, 코드 교육 등 다양한 분야에서 활용될 수 있습니다. 대규모 코드 및 자연어 데이터셋으로 학습되었으며, 중간 채우기, 의존성 그래프 기반 패킹, 단위 테스트 기반 어휘 패킹 등의 기법이 적용되었습니다. 또한 엄격한 안전성 필터링을 통해 콘텐츠의 품질과 안전성을 확보했다고 합니다.


CodeGemma는 코드 생성 및 완성 분야에서 강력한 성능을 발휘하는 대규모 언어 모델입니다. 프리트레인 된 변형과 명령어 튜닝된 변형으로 제공되며, 다양한 프로그래밍 작업에 활용될 수 있습니다. 대규모 데이터셋을 바탕으로 한 학습, 혁신적인 데이터 전처리 기법, 엄격한 안전성 필터링 등을 통해 높은 품질의 결과를 제공합니다.

Hugging Face를 통해 CodeGemma 모델을 사용하는 방법을 알아보았습니다. Colab과 Hugging Face의 파이프라인을 활용하여 코드 생성과 완성 작업을 수행하는 예시를 살펴보았으며, 생성된 결과를 효과적으로 처리하는 방법도 익혔습니다. CodeGemma는 개발자들의 업무 효율성을 크게 향상할 수 있는 강력한 도구입니다. 반복적인 코드 작성에 소모되는 시간을 줄이고, 창의적인 문제 해결에 집중할 수 있도록 돕습니다. 다양한 프로그래밍 언어와 도메인에 적용 가능하므로, 폭넓은 활용이 기대됩니다.

앞으로도 CodeGemma와 같은 혁신적인 AI 모델들이 개발자 커뮤니티에 큰 기여를 할 것으로 예상됩니다. 코드 생성 및 완성 기술의 발전은 소프트웨어 개발 패러다임에 변화를 가져올 것이며, 개발자들은 이를 적극적으로 활용함으로써 더욱 효율적이고 창의적인 개발 프로세스를 구축할 수 있을 것입니다.

반응형