일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 공간분석
- 빅데이터분석기사
- fastapi
- KNN
- qgis
- ml 웹서빙
- 인공지능
- GPU
- K최근접이웃
- CUDA
- pytorch
- webserving
- 3유형
- 실기
- QGIS설치
- 머신러닝
- streamlit
- Ai
- 딥러닝
- 예제소스
- 2유형
- Kaggle
- 공간시각화
- 성능
- 캐글
- dl
- ㅂ
- DASH
- 1유형
- gradio
- Today
- Total
에코프로.AI
[Hugging Face - 4] models 본문

이 섹션에서는 모델을 만들고 사용하는 방법을 자세히 살펴보겠습니다. 체크포인트에서 모델을 인스턴스화할 때 유용한 AutoModel 클래스를 사용하겠습니다.
AutoModel 클래스와 그 모든 관계된 클래스는 사실 라이브러리에서 사용할 수 있는 다양한 모델에 대한 간단한 래퍼입니다. 체크포인트에 적합한 모델 아키텍처를 자동으로 추측한 다음 이 아키텍처로 모델을 인스턴스화할 수 있으므로 영리한 래퍼입니다.
그러나 사용하려는 모델 유형을 알고 있다면 해당 아키텍처를 정의하는 클래스를 직접 사용할 수 있습니다. BERT 모델에서 이것이 어떻게 작동하는지 살펴보겠습니다.
구현환경
- IDE : vscode
- Language : Python
- 가상환경 생성
- 라이브러리 설치 (torch 를 사용하는, transformers 라이브러리 설치)
HuggingFace 의 transformers 라이브러리와, 그에 맞는 torch 라이브러리를 동시에 설치
pip install transformers[torch]
vscode의 터미널에서 명령어 입력하여 설치

Creating a Transformer (Transformers 모델 만들기)
BERT 모델을 초기화하기 위해 가장 먼저 해야 할 일은 구성 개체를 로드하는 것입니다:
from transformers import BertConfig, BertModel
# Building the config
config = BertConfig()
# Building the model from the config
model = BertModel(config)
구성에는 모델을 구축하는 데 사용되는 많은 속성이 포함되어 있습니다:
print(config)

지금 모든 속성이 어떤 기능을 하는지 확인하지는 못하지만, 일부 속성은 알아볼 수 있습니다. 숨겨진 상태 벡터의 크기를 정의하는 "hidden_size" 속성, 트랜스포머 모델에 있는 레이어 수를 정의하는 "num_hidden_layers" 속성이 바로 그것입니다.
Different loading methods (다른 모델생성 메소드)
기본 구성에서 모델을 생성하면 모델의 가중치 값이 임의의 값으로 초기화됩니다:
from transformers import BertConfig, BertModel
config = BertConfig()
model = BertModel(config)
# Model is randomly initialized!
이 상태에서도 모델을 사용할 수 있지만 모델의 가중치 값이 임의의 랜덤 값으로 초기화되어 신뢰성없는 결과를 출력하므로 먼저 학습시켜야 합니다. 특정 작업에 대해 처음부터 모델을 학습시킬 수도 있지만, 1장에서 살펴본 것처럼 오랜 시간과 많은 데이터가 필요하며 환경에 미치는 영향도 무시할 수 없습니다. 불필요하고 중복된 노력을 피하려면 이미 학습된 모델을 공유하고 재사용할 수 있어야 합니다.
이미 학습된 트랜스포머 모델을 로드하는 방법은 간단합니다. from_pretrained() 메서드를 사용하면 됩니다:
from transformers import BertModel
model = BertModel.from_pretrained("bert-base-cased")
앞에서 보았듯이 BertModel을 동등한 AutoModel 클래스로 대체할 수 있습니다. 이렇게 하면 체크포인트에 구애받지 않는 코드가 생성되므로 이제부터는 이렇게 할 것입니다. 코드가 한 체크포인트에서 작동하면 다른 체크포인트에서도 원활하게 작동해야 합니다. 이는 아키텍처가 다르더라도 유사한 작업(예: 감정 분석 작업)을 위해 학습된 체크포인트라면 적용됩니다.
위의 코드 샘플에서는 BertConfig를 사용하지 않고 대신 bert-base-대소문자 식별자를 통해 사전 학습된 모델을 로드했습니다. 이것은 BERT 작성자가 직접 학습한 모델 체크포인트이며, 자세한 내용은 모델 카드에서 확인할 수 있습니다.
이제 이 모델은 체크포인트의 모든 가중치로 초기화됩니다. 학습된 작업에 대한 추론에 바로 사용할 수 있으며, 새로운 작업에 대해 미세 조정( fine-tuned )할 수도 있습니다. 처음부터 훈련하지 않고 미리 훈련된 가중치로 훈련하면 좋은 결과를 빠르게 얻을 수 있습니다.
가중치는 캐시 폴더에 다운로드되어 캐시되어 있으므로(향후 from_pretrained() 메서드를 호출해도 다시 다운로드되지 않습니다) 기본값은 ~/.cache/huggingface/transformers입니다. HF_HOME 환경 변수를 설정하여 캐시 폴더를 사용자 지정할 수 있습니다.
모델을 로드하는 데 사용되는 식별자는 BERT 아키텍처와 호환되는 한 모델 허브에 있는 모든 모델의 식별자가 될 수 있습니다. 사용 가능한 BERT 체크포인트의 전체 목록은 여기에서 확인할 수 있습니다.
Saving methods (모델 저장 메소드)
모델을 저장하는 것은 로드하는 것만큼이나 쉽습니다. from_pretrained() 메서드와 유사한 save_pretrained() 메서드를 사용합니다:
model.save_pretrained("E:\hf")
이렇게 하면 디스크에 두 개의 파일이 저장됩니다:

config.json 파일을 살펴보면 모델 아키텍처를 구축하는 데 필요한 속성을 알 수 있습니다. 이 파일에는 체크포인트가 시작된 위치와 마지막으로 체크포인트를 저장할 때 사용했던 🤗 트랜스포머 버전 등 몇 가지 메타데이터도 포함되어 있습니다.
model.safetensors 파일은 상태 사전으로 알려져 있으며 모델의 모든 가중치가 포함되어 있습니다. 구성은 모델의 아키텍처를 파악하는 데 필요하고 모델 가중치는 모델의 매개변수이므로 두 파일은 서로 밀접하게 연관되어 있습니다.
Using a Transformer model for inference (추론에 트랜스포머 모델 사용)
저장한 모델 다시 불러오기
model2 = BertModel.from_pretrained("E:\hf")
이제 모델을 로드하고 저장하는 방법을 알았으니 이를 사용하여 몇 가지 예측을 해보겠습니다. 트랜스포머 모델은 토큰화 도구가 생성하는 숫자만 처리할 수 있습니다. 하지만 토큰화기에 대해 논의하기 전에 모델이 허용하는 입력에 대해 살펴봅시다.
Tokenizers 는 입력을 적절한 프레임워크의 텐서로 캐스팅하는 작업을 처리할 수 있지만, 이해를 돕기 위해 모델에 입력을 보내기 전에 수행해야 하는 작업을 간단히 살펴보겠습니다.
몇 가지 시퀀스가 있다고 가정해 보겠습니다:
sequences = ["Hello!", "Cool.", "Nice!"]
Tokenizers 는 이를 일반적으로 입력 ID라고 하는 어휘 인덱스로 변환합니다. 이제 각 시퀀스는 숫자 목록이 됩니다! 결과 출력은 다음과 같습니다:
encoded_sequences = [
[101, 7592, 999, 102],
[101, 4658, 1012, 102],
[101, 3835, 999, 102],
]
인코딩된 시퀀스의 목록, 즉 리스트입니다. 텐서는 직사각형 모양(행렬을 생각하세요)만 허용합니다. 이 '배열'은 이미 직사각형 모양이므로 텐서로 변환하는 것은 쉽습니다:
import torch
model_inputs = torch.tensor(encoded_sequences)
Using the tensors as inputs to the model (텐서를 모델 입력으로 사용)
모델에서 텐서를 사용하는 방법은 매우 간단합니다. 입력값을 가지고 모델을 호출하기만 하면 됩니다:
output = model2(model_inputs)
모델은 다양한 인수를 허용하지만 입력 ID만 필요합니다. 다른 인수의 기능과 필요 시기는 나중에 설명하겠지만, 먼저 트랜스포머 모델이 이해할 수 있는 입력을 구축하는 토큰라이저에 대해 자세히 살펴볼 필요가 있습니다.
output
이 출력은 BERT 모델의 다양한 다운스트림 작업(예: 문장 분류, 토큰 분류, 질문 답변 등)에 사용될 수 있는 풍부한 표현을 제공합니다

[참고사이트] https://huggingface.co/learn/nlp-course/chapter2/3?fw=pt
끝~

'AI Tutorial' 카테고리의 다른 글
[Hugging Face - 6] Handling multiple sequences(여러 시퀀스 처리하기) (0) | 2025.01.01 |
---|---|
[Hugging Face - 5] Tokenizers (2) | 2025.01.01 |
[Hugging Face - 3] pipeline() 함수 - 내부 처리로직 (2) | 2024.12.27 |
[Hugging Face - 2] Transformer? (1) | 2024.12.24 |
[Hugging Face - 1] Hugging Face 소개 및 기본사용(Feat. pipeline) (0) | 2024.12.23 |