본문 바로가기

Programming!

로컬 RAG 에서 Exaone 32B 모델을 돌리려니.. (중간)

쿨러가 아주 그냥.. 내 M3 Max  MBP 가 열기를 내뿜는다. 이런 열기는 인텔시절 이후 오랜만이군..ㅎㅎ

 

해서 7.8b 로 Ollama에 얹혀서 임베딩과 답변을 진행해봤다.

 

langchain4j:
    provider: ollama #openai
    open-ai:
        embedding-model:
            api-key: ""
            model-name: "text-embedding-3-small"
        chat-model:
            api-key: ""
            model-name: "gpt-4o-2024-11-20"
            log-requests: true
            log-responses: true
            max-retries: 1
            store: false

    ollama:
        embedding-model:
            base-url: http://localhost:11434
            model-name: "mxbai-embed-large" #ollama pull mxbai-embed-large 1024
            timeout: 60s
        chat-model:
            model-name: "exaone3.5:7.8b"
            log-requests: true
            log-responses: true
            max-retries: 1
            timeout: 60s
            temperature: 0.7
            top-p: 1.0
            base-url: http://localhost:11434

 

 

 

진행하면서 나왔던 예외 목록

 

Embedding dimension 수치 오류

- OpenAI의 Embedding 모델은 dimension : 1536, Ollama의 dimension 의 1024 

- 참고

임베딩(embedding)에서 차원(dimension)은 텍스트, 이미지, 또는 다른 데이터를 숫자 벡터로 표현할 때 사용되는 벡터의 크기를 의미합니다. 
간단히 말해, 벡터의 요소 수를 나타내는 것입니다.


* 임베딩 차원의 의미

- 정보의 압축과 표현: 차원은 얼마나 많은 정보를 벡터에 담을 수 있는지를 결정합니다. 높은 차원은 더 많은 정보와 뉘앙스를 표현할 수 있지만, 계산 비용이 더 높습니다.
- 의미적 공간: 임베딩 공간에서 각 차원은 잠재적으로 의미의 한 측면을 나타낼 수 있습니다. 예를 들어, 단어의 임베딩에서 일부 차원은 "남성 vs 여성", "긍정적 vs 부정적" 같은 의미적 축을 나타낼 수 있습니다.
- 유사성 측정: 임베딩의 주요 목적 중 하나는 데이터 간의 유사성을 측정하는 것입니다. 차원은 이러한 유사성을 계산하는 데 사용되는 공간의 크기를 정의합니다.


* 차원 선택의 영향

- 특정 차원 수를 선택하는 것은 몇 가지 트레이드오프를 수반합니다:
384 차원 (예: all-MiniLM): 상대적으로 작고 효율적이며, 리소스 제약이 있는 환경에 적합합니다.
768 차원 (예: BERT-base): 중간 크기로, 적당한 성능과 효율성의 균형을 제공합니다.
1536 차원 (예: text-embedding-3-large): 더 큰 차원은 더 많은 정보를 담을 수 있어 더 정확한 의미 표현과 검색이 가능합니다.

 

 

Json 밴틱(```json)을 포함하며 결과 Response 를 제공하는 것에 따른 변환 오류. 

-- OpenAI : 프롬프트에 'Json 밴틱 제거'

==> 제거해줌.

-- Exaone : 프롬프트에 'Json 밴틱 제거'

==> 뭔데? 포함해서 내려줌.

 

- 사용량 단위 오류.

-- OpenAI : 프롬프트에 '한달 사용량에 대한 설명(description)은 GB 로 하고 실제 사용량(perMonth)을 알려줍니다. '

==> 이경우 OpenAI 는 모든 단위를 GB로 맞춰줌.

-- Exaone : 프롬프트에 '한달 사용량에 대한 설명(description)은 GB 로 하고 실제 사용량(perMonth)을 알려줍니다.'

==> 이경우 Exaone 는 설명에만 GB로 하고, 실제 사용량은 MB로 알려줌. ( 두부있으면 사오고, 계란도 한 판..같은 건가? ㅎㅎ )

==> 프롬프트 문장 구조를 보면 좀 잘 못됨을 알 수 있는데.. OpenAI는 알아서 맞춰주고, Exaone은 명확하게 프롬프트를 짜야 한다.

 

- 요금제 결과  실패.

-- OpenAI : 임베딩 결과에서 나온 요금제 목록에서 나름 최적의 요금제 결과를 뽑아냄. 

-- Exaone : 음.. 

 

보듯이 한달동안 15GB의 사용량이 예상된다고 되어 있는데 무려 76GB의 사용량 제공의 42요금제를 추천한다.

프롬프트와 또 싸움을 해야 하는 군... 32b는 괜찮을까?

 

결과적으로 보면 exaone은 사용자가 정교한 프롬프트를 넣어야 원하는 답변이 나오고, openai는 대충 프롬프트 넣든, 정교하게 넣든 얼추 원하는 답변을 잘 내논다.

 

[ 결론 : 기본적으로 엑사원은 7.2b라서 답변 퀄리티가 떨어질 수 있으며, 프롬프트도 더  정확하게 짜야 할 수 도 있다. ]  

 

그래서.... 나중에 M5 Max MBP로 가면 Exaone3.5:32b로 테스트 해보도록 하겠다. 꼬옥!! ㅎㅎ