2024년 2월 27일 화요일

생성AI 기반 코딩 에이전트 개발하기

 이 글은 GitHub Copilot과 같은 생성AI 기반 코딩 에이전트 개발방법을 간단히 정리한다.

CODE LLAMA 개념도

머리말
Code LLAMA는 코드 작업에 특화된 LLAMA2 기반 기술로, 커뮤니티 라이센스로 릴리즈되었다. 코드 라마는 라마2 기반으로 5,000억 토큰 코드 데이터를 학습하였다. 파이썬, 자연어 명령어를 이해할 수 있고, 미세 조정을 통해 성능을 개선했다. 

파이썬, C++, JAVA, PHP. C#, TypeScript, Bash 코드 생성을 지원한다. 7B, 13B 모델을 제공하며, 16k 컨텍스트 길이를 학습하였다. 코드 라마는 위치 임베딩을 을 스케일링할 수 있는 RoPE가 적용되었다. 
코드 학습 예시

라마2를 이용해 인터뷰 프로그래밍 질문 항목을 만들고, 코드 라마를 통해 테스트를 수행해 평가되었다. 

이 글은 다음 개발환경에서 동작되었다. 
  • NVIDIA GPU (Over 28 GB RAM), CUDA 12.1, PyTorch 2.1.2+cu121 (link)
이 글은 학습모델을 최적화하기 위해, 4비트 양자화를 사용해, 크기를 줄인 모델을 사용한다.
4비트 양자화 개념도

코드 라마 사용 방법
4.33 버전부터는 학습 및 추론 예제, 안전한 텐서 포맷(safetensors), 4비트 양자화, 파라메터 미세조정(PEFT), 모델 생성 지원 도우, 배포 등 기능이 트랜스포머 라이브러리에 추가되었다. 다음과 같이 최신 버전을 설치한다.
pip install --upgrade transformers
pip install accelerate peft bitsandbytes transformers trl

다음은 코드 라마 모델을 로딩하고, 트랜스포머 파이프라인을  생성한 후, 기본적인 함수 정의를 생성하는 예제이다. 입력하고 실행해 본다.
from transformers import AutoTokenizer
import transformers
import torch

tokenizer = AutoTokenizer.from_pretrained("codellama/CodeLlama-7b-hf")
pipeline = transformers.pipeline(
    "text-generation",
    model="codellama/CodeLlama-7b-hf",
    torch_dtype=torch.float16,
    device_map="auto",
)

sequences = pipeline(
    'def fibonacci(',
    do_sample=True,
    temperature=0.2,
    top_p=0.9,
    num_return_sequences=1,
    eos_token_id=tokenizer.eos_token_id,
    max_length=100,
)
for seq in sequences:
    print(f"Result: {seq['generated_text']}")

다음은 그 결과를 보여준다.

이 경우 70억 파라메터를 가진 모델이기 때문에, 최소한 28GB이상 GPU RAM이 필요하다(4바이트일경우 = 7 x 10^9 x 4 bytes. 8바이트일 경우 56GB). 

라마2 미세 조정 방법은 다음 링크를 참고한다. 

마무리
코딩에 대한 생성 AI 모델 테스트는 일반적으로 HumanEval 데이터세트에서 벤치마킹된다. 이 데이터세트는 모델 함수 서명과 스트링이 제공되며, 함수 본문을 작성하는 프로그래밍 과제로 구성된다. 생성된 코드는 미리 정의된 단위 테스트 세트를 실행해 검증한다. 그 결과 얼마나 많은 테스트를 통과했는 지 비율이 리포트된다. 

다음은 그 결과 리더보드 평균 점수를 보여준다. 

레퍼런스
부록. Text to SQL 아키텍처
모델 아키텍처(참고. Text to SQL)




댓글 없음:

댓글 쓰기