AI 생태계의 끊임없는 발전으로 머신러닝 모델을 정의하는 방법이 점점 다양해지고 있으며, 학습과 미세 조정을 통해 생성된 모델 가중치를 저장하는 방법 또한 다양해지고 있습니다. 이와 같은 방법 중, KerasHub를 사용하면 다양한 ML 프레임워크 간에 인기 있는 모델 아키텍처와 그 가중치를 혼합하고 매칭할 수 있게 지원할 수 있습니다.
예를 들어, 체크포인트를 로드하는 데 널리 사용되는 플랫폼으로는 Hugging Face Hub가 있습니다. 이러한 모델 체크포인트 중 대부분이 Hugging Face의 트랜스포머
라이브러리를 사용하여 SafeTensors 포맷으로 생성됩니다. 모델 체크포인트를 생성할 때 어떤 ML 프레임워크가 사용되었든, 이러한 가중치를 KerasHub 모델로 로드할 수 있으며, 이를 통해 원하는 프레임워크(JAX, PyTorch 또는 TensorFlow)를 사용하여 모델을 실행할 수 있습니다.
즉, JAX에서 Mistral이나 Llama의 체크포인트를 로드할 수 있으며, 심지어 PyTorch로 Gemma를 로드할 수 있어 어느때보다 뛰어난 최고의 유연성을 제공할 수 있습니다.
이러한 용어 중 일부를 좀 더 자세히 살펴보고, 실제로 어떻게 작동하는지 알아봅시다.
모델을 로드할 때는 뚜렷이 구분되는 두 가지 요소가 필요합니다. 바로 모델 아키텍처와, 보통 ‘체크포인트’라고 불리는 모델 가중치입니다. 이제 각각을 좀 더 자세히 살펴봅시다.
'모델 아키텍처'란 모델의 레이어 배열 방법과 모델 내부에서 발생하는 작업을 의미합니다. 이를 모델의 '구조'라고 표현할 수도 있습니다. PyTorch, JAX 또는 Keras와 같은 Python 프레임워크를 사용해 모델 아키텍처를 표현합니다.
'모델 가중치'란 모델의 매개변수, 즉 훈련 과정에서 변경되는 모델 내의 숫자를 의미합니다. 이러한 가중치의 구체적인 값이 훈련된 모델의 특성을 결정합니다.
'체크포인트'란 훈련 중 특정 지점의 모델 가중치 값을 저장한 스냅샷입니다. 공유되어 널리 사용되는 일반적인 체크포인트 파일은 상당히 뛰어난 훈련 성과에 도달한 모델입니다. 동일한 모델 아키텍처를 미세 조정과 다양한 기술을 이용하여 추가로 개선하면, 새롭게 체크포인트 파일이 생성됩니다. 예를 들어, 많은 개발자가 Google의 gemma-2-2b-it 모델을 자신만의 데이터세트로 미세 조정했습니다(600개 이상의 예제를 검색할 수 있음). 이렇게 미세 조정된 모델 대부분이 기존 gemma-2-2b-it 모델과 동일한 아키텍처를 사용하지만, 체크포인트의 가중치는 다양한 값을 지닙니다.
즉, 모델 아키텍처는 코드로 정의되고, 모델 가중치는 훈련을 통해 얻은 매개변수로서 체크포인트 파일 형태로 저장됩니다. 모델 아키텍처와 모델 가중치(체크포인트 파일 형태)를 함께 사용할 때, 유용한 결과를 생성하는 기능적인 모델이 만들어집니다.
Hugging Face의 트랜스포머 라이브러리 및 Google의 KerasHub 라이브러리와 같은 도구는 모델 아키텍처와 이를 테스트할 수 있는 API를 제공합니다. 체크포인트 저장소의 예로는 Hugging Face Hub와 Kaggle Models이 있습니다.
원하는 체크포인트 저장소와 모델 아키텍처 라이브러리를 혼합하고 매칭할 수 있습니다. 예를 들어, Hugging Face Hub에서 체크포인트를 로드해 JAX 모델 아키텍처에 적용하고, 이를 KerasHub로 미세 조정할 수 있습니다. 다른 작업의 경우 Kaggle Models의 체크포인트가 더 적합할 수도 있습니다. 이러한 유연성과 구성 요소 간의 분리를 통해 하나의 생태계에 얽매이지 않을 수 있습니다.
KerasHub에 대해 몇 번 이야기했지만, 좀 더 자세히 살펴봅시다.
KerasHub는 Python 라이브러리로 모델 아키텍처를 더 쉽게 정의할 수 있게 도와줍니다. 현재 가장 널리 사용되며 인기 있는 머신러닝 모델을 다수 포함하고 있고, 새로운 모델이 계속 추가되고 있습니다. Keras를 기반으로 하기 때문에, KerasHub는 오늘날 사용하는 세 가지 주요 Python 머신러닝 라이브러리(예: PyTorch, JAX 및 TensorFlow)를 지원할 수 있습니다. 따라서 원하는 라이브러리로 모델 아키텍처를 정의할 수 있습니다.
게다가 KerasHub는 가장 대중적인 체크포인트 포맷을 지원하기 때문에 다양한 체크포인트 저장소에서 체크포인트를 쉽게 로드할 수 있습니다. 예를 들어, Hugging Face와 Kaggle에는 이러한 모델 아키텍처에 로드할 수 있는 수십만개의 체크포인트가 존재합니다.
트랜스포머
라이브러리와의 비교보통 개발자는 워크플로에서 Hugging Face 트랜스포머
라이브러리를 사용하여 모델을 미세 조정한 뒤, 이를 Hugging Face Hub에 업로드합니다. 트랜스포머
사용자라면 KerasHub에서 다수의 익숙한 API 패턴도 발견할 수 있습니다. 자세한 사항은 KerasHub API 문서를 참조하세요. KerasHub의 흥미로운 점 중 하나는 Hugging Face Hub에 존재하는 다양한 체크포인트가 트랜스포머
라이브러리뿐만 아니라 KerasHub에서도 호환된다는 점입니다. 그럼, 어떻게 작동하는지 한번 살펴보도록 하겠습니다.
Hugging Face에는 Hugging Face Hub라는 모델 체크포인트 저장소가 있습니다. 이는 머신러닝 커뮤니티가 모델 체크포인트를 업로드하여 전 세계와 공유하는 여러 플랫폼 중 하나입니다. 특히 Hugging Face에서 인기 있는 포맷인 SafeTensors 포맷은 KerasHub와도 호환됩니다.
모델 아키텍처를 사용할 수 있다면 Hugging Face Hub에서 이러한 체크포인트를 KerasHub 모델로 직접 로드할 수 있습니다. 원하는 모델을 사용할 수 있는지 궁금하다면 https://keras.io/keras_hub/presets/에서 지원되는 모델 아키텍처 목록을 확인해 보세요. 참고: 이러한 모델 아키텍처를 사용하여 커뮤니티에서 생성한 미세 조정된 체크포인트도 호환이 가능합니다! 프로세스를 더욱 자세하게 설명하는 새로운 가이드를 최근에 제작했습니다.
이 모든 것이 어떻게 작동할까요? KerasHub에는 Hugging Face 트랜스포머
모델의 사용을 간소화하는 변환기가 내장되어 있습니다. 이 변환기가 Hugging Face 모델의 체크포인트를 KerasHub와 호환되는 포맷으로 변환하는 프로세스를 자동으로 처리해 줍니다. 덕분에 몇 줄의 코드만으로 Hugging Face Hub에서 사전학습된 다양한 Hugging Face 트랜스포머 모델을 KerasHub에 바로 로드할 수 있습니다.
누락된 모델 아키텍처가 있는 경우, GitHub에 pull 요청을 제출하여 이를 추가할 수 있습니다.
그렇다면 Hugging Face Hub의 체크포인트를 KerasHub로 어떻게 로드할 수 있을까요? 몇 가지 구체적인 예를 살펴보겠습니다.
우선 Keras의 '백엔드'로 사용할 머신러닝 라이브러리를 선택합니다. 예시에서는 JAX를 사용하지만 JAX, PyTorch 또는 TensorFlow 중 어느 것을 사용해도 좋습니다. 어떤 것을 선택하더라도 문제없이 동작합니다. 그런 다음 keras
, keras_hub
및 huggingface_hub
를 임포트한 뒤, Hugging Face User Access 토큰으로 로그인하면 모델 체크포인트에 액세스할 수 있습니다.
import os
os.environ["KERAS_BACKEND"] = "jax" # or "torch" or "tensorflow"
import keras
from keras_hub import models
from huggingface_hub import login
login('HUGGINGFACE_TOKEN')
우선 JAX에서 Mistral의 체크포인트를 실행해 볼까요? KerasHub의 사용 가능한 아키텍처 모델 목록에는 Mistral 모델이 몇 가지 존재합니다. 그 중 mistral_0.2_instruct_7b_en
을 테스트해 보겠습니다. 해당 페이지를 클릭하면 from_preset
을 호출하기 위해서는 MistralCausalLM
클래스를 사용해야 한다는 안내가 보입니다. Hugging Face Hub의 경우 여기에 해당하는 모델 체크포인트가 저장되어 있습니다(900개 이상의 미세 조정된 버전이 존재). 목록을 살펴보다 보면 segolilylabs/Lily-Cybersecurity-7B-v0.2
라는 경로명과 함께 사이버 보안 분야에 초점을 맞춘 Lily라고 불리는 인기 있는 미세 조정 모델을 찾을 수 있습니다. KerasHub가 Hugging Face Hub를 찾을 수 있도록 해당 경로 앞에 'hf://
'를 추가해야 합니다.
모든 과정을 정리하면 다음과 같은 코드를 작성할 수 있습니다.
# Model checkpoint from Hugging Face Hub
gemma_lm = models.MistralCausalLM.from_preset("hf://segolilylabs/Lily-Cybersecurity-7B-v0.2")
gemma_lm.generate("Lily, how do evil twin wireless attacks work?", max_length=30)
Llama 3.1-8B-Instruct는 인기 모델로 지난달에만 다운로드 횟수가 500만 건 이상에 달합니다. JAX에 이 모델의 미세 조정 버전을 실행해 보겠습니다. 1,400개 이상의 미세 조정 체크포인트가 존재하기 때문에 선택의 폭이 넓습니다. xVerify 미세 조정 체크포인트가 눈에 띄니 KerasHub에서 JAX 로 로드해 보겠습니다.
사용 중인 모델 아키텍처를 반영할 수 있도록 Llama3CausalLM 클래스를 활용하겠습니다. 앞선 예시와 마찬가지로 Hugging Face Hub의 올바른 경로 앞에 'hf://
'를 붙여야 합니다. 몇 줄의 코드만으로 모델을 로드하고 호출할 수 있다니 놀랍지 않나요?
# Model checkpoint from Hugging Face Hub
gemma_lm = models.Llama3CausalLM.from_preset("hf://IAAR-Shanghai/xVerify-8B-I")
gemma_lm.generate("What is the tallest building in NYC?", max_length=100)
마지막으로 미세 조정된 Gemma-3-4b-it 체크포인트를 JAX에 로드해 봅시다. Gemma3CausalLM 클래스를 사용하고, 미세 조정된 체크포인트 중 하나를 선택하겠습니다. 다국어 번역기인 EraX를 사용해 볼까요? 앞선 예시와 마찬가지로 Hugging Face Hub 접두어를 붙인 경로명을 사용하여 'hf://erax-ai/EraX-Translator-V1.0
'의 전체 경로를 생성합니다.
# Model checkpoint from Hugging Face Hub
gemma_lm = models.Gemma3CausalLM.from_preset("hf://erax-ai/EraX-Translator-V1.0")
gemma_lm.generate("Translate to German: ", max_length=30)
앞서 살펴본 것처럼 모델 아키텍처가 모델 가중치에 영향을 받을 필요가 없습니다. 즉, 서로 다른 라이브러리에서 아키텍처와 가중치를 결합할 수 있습니다.
KerasHub는 서로 다른 프레임워크와 체크포인트 저장소 간의 간극을 메워줍니다. PyTorch 기반 트랜스포머 라이브러리로 생성된 모델 체크포인트도 Hugging Face Hub에서 가져와, 선택한 백엔드(예: JAX, TensorFlow 또는 PyTorch)에서 실행되는 Keras 모델에 손쉽게 로드할 수 있습니다. 이를 통해 커뮤니티에서 미세 조정한 다양한 모델을 활용하는 동시에, 이를 실행할 백엔드 프레임워크를 자유롭게 선택할 수 있습니다.
아키텍처, 가중치, 프레임워크를 혼합하고 매칭하는 프로세스를 간소화함으로써, KerasHub는 사용자의 실험과 혁신을 지원할 수 있는 단순하지만, 강력한 유연성을 제공합니다.