Want to Become a Sponsor? Contact Us Now!🎉

LLM
ctransformers를 사용한 Transformer 추론 가속화

ctransformers를 사용한 Transformer 추론 가속화

Published on

소개

최근 몇 년 동안 Transformer 기반 언어 모델은 언어 생성, 질의 응답 및 텍스트 분류와 같은 작업에서 뚜렷한 효과를 보여주며, 자연어 처리를 혁신적으로 변화시켰습니다. 그러나 이러한 모델은 종종 매우 크며, 수십 억 또는 수조의 매개 변수를 가지기 때문에 CPU에서 실행하기에 계산 비용이 많이 듭니다.

ctransformers는 이러한 대형 언어 모델을 보다 효율적이고 접근 가능하게 배포하기 위한 파이썬 라이브러리입니다. 최적화된 C/C++ 코드로 구현된 Transformer 모델을 위한 파이썬 바인딩을 제공하여 양자화 및 AVX 명령어 사용과 같은 기술을 활용하여 CPU 하드웨어에서 추론 속도를 획기적으로 높일 수 있습니다.

ctransformers를 사용하면 GPT-2, GPT-J, GPT-NeoX, Llama 등과 같은 모델을 몇 줄의 Python 코드로 로드하고 실행할 수 있습니다. 이 라이브러리는 다양한 모델을 위한 간단하고 유일한 인터페이스, Hugging Face Hub 및 LangChain 프레임워크와의 통합, 그리고 더 세밀한 제어를 위한 저수준 API에 대한 액세스를 제공합니다.

Anakin AI - The Ultimate No-Code AI App Builder

ctransformers란?

ctransformers는 뒷단에서 GGML 라이브러리를 활용합니다. GGML은 CPU에서 ML 모델을 실행하기 위한 텐서 라이브러리로, 특히 양자화된 데이터 유형을 위한 행렬 곱셈과 같은 일반적인 작업에 효율적인 구현을 제공합니다. GGML을 모델에 특화된 최적화된 커널과 결합하여 ctransformers는 인상적인 성능을 달성할 수 있습니다.

ctransformers의 가장 흥미로운 응용 프로그램 중 하나는 소비자 하드웨어에서 Llama 2와 같은 대형 오픈 소스 모델을 실행할 수 있는 기능입니다. 이를 통해 대형 언어 모델을 비용 효율적이고 환경 친화적으로 배포할 수 있는 가능성이 열리며, 더 넓은 범위의 사용자 및 응용 프로그램에게 접근성을 높일 수 있습니다.

이 기사에서는 ctransformers의 기술적 세부 사항, 기능, 성능 특성 및 API에 대해 자세히 알아보겠습니다. 모델 로드, 텍스트 생성 및 LangChain과의 통합과 같은 코드 예제를 통해 진행합니다. 마지막으로, CPU 추론의 효과와 NLP 및 AI의 미래에 대한 잠재력에 대해 논의하겠습니다.

ctransformers의 주요 기능 몇 가지:

  • 다양한 모델을 로드하고 실행하기 위한 통합 인터페이스
  • Hugging Face Hub에서 모델 실행 지원
  • LangChain 프레임워크와의 통합
  • 더 세밀한 제어를 위한 저수준 C API 액세스
  • AVX 명령어를 이용한 최적화된 CPU 추론

ctransformers의 설치

ctransformers를 설치하려면 pip를 사용하면 됩니다:

pip install ctransformers

GPU 지원이 필요한 경우, CT_CUBLAS 환경 변수를 설정하여 설치하세요:

CT_CUBLAS=1 pip install ctransformers --no-binary ctransformers

ctransformers의 기본 사용법

모델을 로드하고 실행하는 주요 클래스는 AutoModelForCausalLM입니다. 다음은 모델을 로드하는 방법입니다:

from ctransformers import AutoModelForCausalLM
 
# 로컬 파일에서 로드
llm = AutoModelForCausalLM.from_pretrained('path/to/ggml-model.bin', model_type='gpt2')
 
# Hugging Face Hub에서 로드
llm = AutoModelForCausalLM.from_pretrained('marella/gpt-2-ggml')

model_type 인자는 로드하는 모델의 유형을 지정합니다. gpt2, gptj, gpt_neox, dolly-v2, starcoder 등의 옵션이 있습니다.

텍스트를 생성하려면 모델을 호출하면 됩니다:

output = llm("AI is going to")
print(output) 

더 세밀한 제어를 위해 생성기 인터페이스를 사용할 수도 있습니다:

tokens = llm.tokenize("AI is going to")
 
for token in llm.generate(tokens):
    print(llm.detokenize(token))

ctransformers와 LangChain의 통합

ctransformers는 LangChain 프레임워크와 함께 모델을 사용할 수 있는 래퍼를 제공합니다:

from ctransformers.langchain import CTransformers
 
llm = CTransformers(model='marella/gpt-2-ggml')
 
# LangChain 기본 기능과 함께 사용
from langchain import PromptTemplate, LLMChain
 
template = """질문: {question}
대답:"""
 
prompt = PromptTemplate(template=template, input_variables=['question'])
llm_chain = LLMChain(prompt=prompt, llm=llm)
 
question = "AI가 무엇인가요?"
print(llm_chain.run(question))

Llama 모델 실행

ctransformers는 GGML 형식의 오픈 소스 Llama 모델을 실행할 수 있습니다. 다음은 Llama 2 모델을 사용한 예입니다:

from ctransformers import AutoModelForCausalLM
 
model_id = "TheBloke/Llama-2-7B-GGML"
 
config = {
    'max_new_tokens': 256, 
    'repetition_penalty': 1.1,
    'temperature': 0.1
}
 
llm = AutoModelForCausalLM.from_pretrained(
    model_id, 
    model_type="llama",
    config=config
)
 
prompt = "주기율표에서 처음 10개 원소를 기억하기 위해 시를 쓰세요"
output = llm(prompt)
print(output)

이 예제에서는 7B 매개 변수 Llama 2 모델을 GGML 형식으로 변환하여 로드하고 주어진 텍스트로부터 시를 생성합니다.

config 사전을 사용하여 최대 토큰, 반복 페널티, 온도 등과 같은 여러 생성 매개변수를 지정할 수 있습니다.

결론

ctransformers는 최적화된 C/C++ 구현을 뒷받침으로 한 CPU에서 대규모 언어 모델을 쉽고 효율적으로 실행할 수 있는 방법을 제공합니다. 간단한 Python API, Hugging Face Hub 및 LangChain과의 통합, 다양한 모델 지원을 통해 Transformer를 기반으로 한 애플리케이션을 구축하는 데 강력한 도구입니다. Llama 2와 같은 모델을 합리적인 성능으로 CPU에서 실행할 수 있는 능력은 대형 언어 모델의 경제적이고 환경 친화적인 배포에 대한 새로운 가능성을 엽니다. 오픈 소스 Transformer 모델을 중심으로 한 생태계가 계속 성장함에 따라 ctransformers와 같은 라이브러리는 이러한 모델을 접근 가능하고 실용적으로 사용할 수 있도록 하는 데 중요한 역할을 할 것입니다.