ChatGPT 만들어서 떼돈 벌어보겠습니다

개발자정씨(플레이)
|2024. 3. 1. 16:22

최근 Mata에서 공개한 Llama와 같이, 최근에는 오픈소스형 인공지능 모델을 쉽게 찾아볼 수 있습니다.

 

llama-node라고 인공지능 학습 모델을 쉽게 연결 시켜주는 package가 존재합니다. 해당 패키지를 이용해서 ChatGPT 모작을 만들어보겠습니다. llama-node의 소개페이지(https://llama-node.vercel.app)에 들어가보면 샘플코드를 확인 할 수 있습니다.

 

해당 코드를 응용하여 아래와 같이 코드를 작성하였습니다.

import readline from "readline";
import { LLM } from "llama-node";
import { LLamaCpp } from "llama-node/dist/llm/llama-cpp.js";
import path from "path";

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const model = path.resolve(process.cwd(), "모델명");
const llama = new LLM(LLamaCpp);

async function loadLlama() {
  await llama.load({
    modelPath: model,
    enableLogging: true,
    nCtx: 1024,
    seed: 0,
    f16Kv: false,
    logitsAll: false,
    vocabOnly: false,
    useMlock: false,
    embedding: false,
    useMmap: true,
    nGpuLayers: 0,
  });
}

async function processInput() {
  rl.question("텍스트를 입력하세요: ", async (prompt) => {
    await run(prompt);
  });
}

async function run(prompt) {
  await llama.createCompletion({
    nThreads: 4,
    nTokPredict: 2048,
    topK: 40,
    topP: 0.1,
    temp: 0.2,
    repeatPenalty: 1,
    prompt,
  }, (response) => {
    process.stdout.write(response.token);
    if(response.completed) processInput();
  });
}

(async () => {
  await loadLlama();
  processInput();
})();

 

 

사용한 패키지는 "llama-node"와 "@llama-node/llama-cpp"이며, 모델로는 위에서 언급한 mata의 Open AI Model인 "llama-2-7b-chat.ggmlv3.q5_1.bin"와 샘플코드에 기재되어 있고, 좋은 성능으로 평가 받고 있는 "vicuna-7b-v1.3.ggmlv3.q5_1.bin"를 사용하였습니다. 여기서 우리는 파일명으로부터 해당 모델이 어떠한 특징을 가지고 있는지 알아둘 필요가 있을 것 같습니다.

llama-2, vicuna 모델명을 의미합니다.
7b 모델의 크기와 학습에 사용된 파라미터의 양을 나타냅니다. "b"는 billion(10억)을 의미하며, 여기서는 파라미터의 수를 나타냅니다. 따라서 "7b"는 700억 개의 파라미터를 갖는 모델을 나타냅니다. 많은 파라미터는 모델이 데이터의 다양한 특성과 패턴을 더 세밀하게 학습할 수 있게 해주어 보다 정밀한 예측을 가능하게 합니다. 
ggmlv3 GGML은 GPU 없이 CPU를 활용해서 개인 컴퓨터에서도 LLM(Large Language Model)을 돌리기 위한 경량화 라이브러리입니다. v3는 아마도 버전으로 추측됩니다.
q5_1 quantization(양자화)를 의미합니다. AI에서 양자화는 주로 모델의 가중치(weight)와 활성화 함수의 출력을 특정한 범위 내의 값으로 제한하는 과정을 가리킵니다. 이것은 모델의 파라미터를 효율적으로 저장하고 연산량을 줄이는 등의 목적으로 사용됩니다.

 

자 이제 동작시켜 볼까요? 먼저 llama-2입니다.

 

혹시 꽤나 준수하다고 생각하셨나요? 아쉽게도 위의 캡쳐본은 5배속으로 돌린겁니다... GPU가 없는 노트북에서 동작시킨거라지만 상당히 느리군요. 해당 부분은 GGML과도 연관이 있는 부분이라고 생각이 들어 섣불리 성능을 판별하기는 어려울 것 같습니다. 그래도 꽤나 AI스럽게 동작하는 Llama!

 

이번엔 vicuna를 테스트 해보겠습니다.

 

??? 저의 질문을 제대로 인식하지 못하는 것 같습니다. 다른 질문을 해볼까요?

 

"favorite movie"가 뭐냐고 묻는 vicuna... 성능 좋다며...

 

 

 

오늘의 한마디 : OPEN SOURCE AI Model로 돈버는건 무리! 코딩공부 더 열심히 하자!