LG의 오픈소스 AI, 엑사원 3.0 사용후기

아무것도 모르는 사람의 기준으로

Jinhwan Kim
11 min readAug 11, 2024

최근 재밌는 뉴스를 봤다. LG AI 연구원에서 AI 모델을 공개했다는 것 그것도 오픈소스로.

From exaone hugging-face

심지어 (LG피셜) Gemma (구글)나 Llama (메타)같은 다른 오픈소스 AI 모델들보다도 더 좋은 성능을 나타낸다고 한다.

그래서 한번 써봤다.

단, 나는 LLM을 웹 서비스로만 사용해 본 사람이고, 모델 단위로 사용하는 AI 엔지니어는 아니며 특히 Python을 사용하지 않는 만큼 사용 방법이 AI 엔지니어의 의도와, 방법과는 다를 수 있으니 이상한 점이나 잘못된 점이 있다면 적극적으로 알려주길 바람.

특히 AI 개발자의 관점이 아니라 그냥 사용자의 기준으로 볼 것이기 때문에 모델 퍼포먼스가 어쩌고 파라미터 수가 어쩌고… 등의 이야기는 생략. (알지도 못한다 !)

허깅페이스

우선 LLM 모델은 허깅페이스에서 (깃허브와 비슷) 사용할 수 있다.

별 다른 비용은 들지 않지만 허깅페이스에 계정 생성이 필요하고, 엑사원 리포지토리에 사용하겠다는 신청(?) 이후 승인되어야 사용할 수 있다.

이후 내 로컬 PC (M1 MAC)에서 엑사원을 사용할 것이기 때문에 이 모델을 다운로드(?) 받기 위해 내 허깅페이스 계정에 대한 접근 권한을 가진 토큰 발행이 필요하다.

이 때 토큰 권한은 뭔지 몰라서 다 체크했지만, 아마 Repositores에 Read 부분이 있어야 하지 않을까 싶다.

이제 리포지토리에 있는 설명대로 빠르게 시작해보자 ! (사실 하루 종일 걸렸다)

라이브러리 불러오기

아래 코드는 Quickstart에 있는 예시 코드의 첫 부분으로, torch라는 라이브러리를 불러오고 transformers에서 2개의 함수를 불러오는 역할을 한다. 설명은 간단한데 여기서부터 엄청난 파혐이 생겼다.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

나는 업무에서나 취미에서나 파이썬을 가급적이면 쓰지 않고, 정말 꼭 써야한다면 Colab을 이용해서 일회용으로 사용한다.

왜냐면 venv, conda, miniconda, pip3, pip, python3… 등의 파이썬 특유의 작업 환경 설정이 정말 싫기 때문. (진심, 로컬 PC에 파이썬을 묻히기도 싫다)

그래서 당연히 Colab에서 시도를 해봤다.

먼저 Colab에서 허깅페이스에 접근하는 토큰 권한을 추가하는 방법은 다음 코드를 사용할 수 있다. (나는 이 방법을 검색해서 찾았는데, 유일한 방법이 아닐 수도 있다 !)

# pip install huggingface_hub
from huggingface_hub import notebook_login
notebook_login()

이후 나타나는 창에 아까 발급한 토큰을 입력하면 정상적으로 연동 되었다는 로그가 나타난다.

이어서 Quickstart의 코드를 실행하면

메모리가 터진다. 이는 충분히 이해가능한 부분으로 이 모델의 크기는 약 30GB이기 때문에 유료버전, Colab Pro가 아니면 돌릴 수 없다. (유료여도 돌릴 수 있는지는 모르겠다)

라이브러리 불러오기 2

이제 어쩔 수 없이 PC에 파이썬을 설치해야 한다.

그럼에도 불구하고 아직 파이썬을 쓰고 싶지는 않기에 R에서 파이썬을 사용할 수 있게 하는 reticulate라는 R 패키지를 사용한다.

# install.packages('reticulate')r
library(reticulate)

install_python(version = '3.12.4')
use_python_version('3.12.4')

conda_install(packages = 'torch', pip = TRUE)
conda_install(packages = 'transformers')

py_install("transformers", pip = TRUE)
py_install("torch", pip = TRUE)
py_run_string("import transformers; import torch")
py_run_string("
from transformers import HfApi
api = HfApi()
api.set_access_token('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')

messages = [{'role': 'user', 'content': 'Who are you?'}]
pipe = pipeline('text-generation', model='LGAI-EXAONE/EXAONE-3.0-7.8B-Instruct', trust_remote_code=True)
output = pipe(messages)
print(output)
")

그러나 이 시도도 실패했다.

분명히 터미널에서 torchtransformers를 설치했는데 모듈을 찾을 수 없다는 에러가 떴고, 검색을 해보니 누구는 py_install()을 써라, 누구는 conda로 가상 환경을 따로 만들고 conda_install()을 써라, 누구는 brew에서 파이썬을 밀고 재설치한 다음 써라… 라고 하는데

하도 사공이 많아서 reticulate도 포기했다. (후술하겠지만 오류가 난 이유는 따로 있다)

라이브러리 불러오기 3

이제 정말 어쩔 수 없이, .py코드를 사용해야만 한다. 이렇게 된 이상 최근에 나온 새 IDE 인 positron을 사용해볼 겸이라는 위안을 삼고 해봤다.

그러나 어김 없이 import torch 의 벽을 뚫지 못했고 (새삼 AI 엔지니어들이 대단) 아예 pytorch 페이지에 찾아가서 여러가지를 보던 중 충격적인 문장을 발견한다.

파이썬의 최신 버전은 3.12인데 3.11까지만 Pytorch (torch)가 지원된다니 나는 몇시간 동안 뻘짓을 했고, 파이썬에서는 이를 알려주지 않았다. 심지어 pip list 의 결과에는 분명히 torchtransformers가 있었다.

그래서 python 3.12를 밀고 3.11을 재설치한 다음 pip인지 pip3인지로 torch를 설치한 뒤에야 import torch 문장을 넘을 수 있었다. (파혐 낭낭하게 추가)

그렇다고 이후 진행이 되었는가?라고 하면 아니고, 이어서 또 다른 문제가 발생했다.

이번에는 transformers에서 문제가 발생했는데 transformers에서 사용하는 tokenizers의 버전이 너무 높아서 오류가 났다 (최신 버전은 0.19.1, 정상 작동 되는 버전은 0.11.1 ~ 0.14,심지어 0.11.3은 안됨)

다행히 pip install tokenizers==0.13.3인가 대충 이딴 코드로 레거시 버전을 지정해서 설치했고, 다음 오류를 만났다.

허깅페이스 2

앞서 Colab에서는 허깅페이스와의 연동을 GUI로 할 수 있었다. 그러나 파이썬은 터미널에서 돌리던, .py파일을 만들고 실행하던 GUI 기반 연동이 불가능하다.

허깅페이스 계정을 만든지 채 하루도 안되는 사람이 API를 찾기까지는 정말 귀찮아서 GPT한테 물어봤는데 세 가지 방법이 전부 동작하지 않았다.

엄청 돌고 돌아 결국 찾은 방법은…

huggingface-cli login 을 터미널에서 입력하고 앞서 발급한 토큰을 입력하는 것.

이후 코드는 당연히 실행되지 않고 (transformers가 작동하지 않는다는 에러가 또 발생), 이는 transformers의 버전을 4.41 이상으로 올려설치하는 것으로 해결 가능하다. (기본 pip에서 설치하면 4.32.1이 설치된다 !)

이제 transformers를 4.44.0 버전으로 지정 설치하고, 이어서 충돌되는 dill이라는 라이브러리를 0.3.8에서 0.3.6으로 downgrade한다.

이어서 spyder 라는 라이브러리에서 버전 충돌이 난다고 엄청 빽빽대지만 이때쯤 알빠노를 시전하며 걍 돌렸다. 단, accelerate라는 패키지를 추가로 설치해야만 한다.

모델 다운로드

파혐을 넘치게 쌓고 난 뒤, 드디어 Colab에서 했던 모델 다운로드가 시작된다. 이는 그나마 오류가 생기지 않는 부분이다. 단, 파일 크기가 꽤 있다보니 다운로드에 시간이 꽤 오래 걸린다.

코드 실행시 checkpoint shards를 로딩하는데, 이 또한 시간이 걸린다.

아 추가로 M1 Mac에서는 CUDA를 지원하지 않기 때문에 예시 코드의 cuda 부분을 mps라는 대체제로 바꿔줘야만 한다.

# input_ids.to("cuda"),
input_ids.to("mps"),

결과

엑사원한테 소원을 물어보면 정확하고 유용한 정보를 제공하는 것이라고 한다.

여기서 아래 엔터 2개와 asdf는 큰 의미를 갖는데, PC가 멈춘 줄 알고 친 엔터와 asdf로, 이는 이 QUICKSTART의 파이썬 코드를 실행, 저 3문장의 답을 듣기까지의 시간이 정말 오래걸리기 때문이다. (대충 한시간 걸림)

또 한가지 수상했던 점은, 이후에 다시 한번 실행했을 때 (마찬가지로 대충 한시간 걸림) 나오는 답변이 완전히 동일하다는 것.

LLM을 잘은 모르지만 이론상 랜덤성이 들어가기 때문에 사용자가 시드를 고정시키는 것이 아니라면, (고정시키는 방법이 있는 지도 모른다) 동일한 질문을 해도 답변이 거의 항상 달라야 한다고 알고 있고 실제로도 대-GPT에게 동일한 물어봤을 땐 몇초만에 다른 답변을 만들어냈다. (평소에는 GPT4o를 쓰지만 그냥 레거시 4로 돌려봄)

그래서 원래는 몇가지 질문을 만들고 무료 방법들인 GPT, Claude 그리고 엑사원의 결과를 비교해보려고 했는데 우선 질문 하나에 1시간 걸리는 것에서 포기했고, 심지어 매번 동일한 답변을 만들어 내는 것에 또 아쉬움을 느꼈다.

이는 내가 제대로 사용하지 않았기 때문에 이런 엉망인 결과가 나온 것일것이라 생각하지만, 적어도 리포지토리의 가이드라인대로는 했으니 할 말은 없다.

혹시나 GPT, Claude는 “웹” 기반 모델이라 다른 것일까 싶어서 리포지토리의 비교 대상군이었던 Gemma (구글)도 사용해봤다.

당연히 (?) 빠른 시간과 다른 답변을 보여주었다.

시간은 아마 로컬에서 돌리느냐 아니면 빵빵한 자원을 가진 구글의 서버에서 돌리느냐의 차이가 아닐까 생각

결론

나는 모든 도전과 시도에 대해 항상 응원하지만, 그렇다고 결과도 항상 좋아하진 않는다.

LG의 엑사원 3.0은 적어도 나처럼 아무것도 모르는 일반인은 쓸 수 없는 수준.

정말로 그냥 GPT나 Claude를 쓰자.

별개로 파이썬, 잠깐이지만 함께해서 더러웠고 다신 만나지 말자…

--

--