Tüm rehberler
Rehber Yapay Zeka 02 · Araçlar

Hugging Face
Ekosistemi.

Transformers kütüphanesini tokenizer'dan pipeline'a öğren. AutoModel ve AutoTokenizer ile herhangi bir modeli iki satırda yükle. Datasets, Accelerate ve PEFT entegrasyonu.

00 Ekosisteme Giriş

Hugging Face; model deposu, açık kaynak kütüphaneler ve araştırmacı topluluğundan oluşan yapay zeka altyapısının merkezi haline gelmiştir.

Hugging Face, başlangıçta bir sohbet botu şirketi olarak kurulmuş; ancak 2019'da yayımladığı transformers kütüphanesiyle yapay zeka dünyasının en kritik açık kaynak altyapısına dönüşmüştür. Bugün itibariyle Hub üzerinde 800.000'i aşkın model, 150.000'den fazla dataset ve on binlerce Space (interaktif demo) bulunmaktadır. Google, Meta, Microsoft ve Mistral gibi büyük kuruluşlar modellerini doğrudan bu platformda yayımlamaktadır.

Temel Kütüphaneler

transformersAutoModel, AutoTokenizer, pipeline, Trainer — merkezi kütüphane. NLP, vision, audio destekler.
datasetsApache Arrow tabanlı veri yükleme ve işleme. Hub'daki binlerce dataset'e tek satırla erişim.
tokenizersRust ile yazılmış hızlı tokenizer çekirdeği. BPE, WordPiece, Unigram implementasyonları.
accelerateTek GPU → çok GPU → TPU geçişini tek satır değişiklikle yapar. Dağıtık eğitim soyutlaması.
peftLoRA, IA3, Prefix Tuning gibi parameter-efficient fine-tuning yöntemleri.
diffusersStable Diffusion, SDXL, DDPM gibi görüntü üretim modellerinin pipeline'ı.
evaluateBLEU, ROUGE, BERTScore, accuracy gibi standart metrikler için birleşik API.
safetensorsPyTorch .bin formatının güvenli ve hızlı alternatifi. Pickle exploit riskini ortadan kaldırır.

Cache Mekanizması

Hugging Face kütüphaneleri indirilen tüm modelleri ve veri setlerini yerel diske önbeller. Varsayılan konum ~/.cache/huggingface/ klasörüdür. Bu konumu HF_HOME ortam değişkeniyle değiştirebilirsiniz.

01 from_pretrained() çağrısı yapılır
02 Önce ~/.cache/huggingface/hub/ kontrol edilir
03 Cache'de varsa → diskten yükle (ağ isteği yok)
04 Cache'de yoksa → Hub'dan indir, önbelle, yükle
05 Her model sürümü ayrı hash klasöründe tutulur
hub_basics.py
import os
from transformers import AutoTokenizer, AutoModel

# Opsiyonel: cache konumunu değiştir
os.environ["HF_HOME"] = "/data/hf_cache"

# İlk çağrıda Hub'dan indirir, sonraki çağrılarda cache'den yükler
model_name = "google-bert/bert-base-uncased"
tokenizer  = AutoTokenizer.from_pretrained(model_name)
model      = AutoModel.from_pretrained(model_name)

# Cache konumunu kontrol et
from huggingface_hub import scan_cache_dir
cache_info = scan_cache_dir()
for repo in cache_info.repos:
    print(f"{repo.repo_id}: {repo.size_on_disk_str}")

# Token ile private model erişimi
# export HF_TOKEN=hf_xxxx  (ortam değişkeni olarak ayarla)
private_tok = AutoTokenizer.from_pretrained(
    "my-org/private-model",
    token=os.environ.get("HF_TOKEN")
)
NOT

Hub'daki model adları kullanici/model-adi formatındadır. bert-base-uncased gibi kısa isimler eski isimlendirmeden kalmadır; yeni modeller google-bert/bert-base-uncased şeklinde tam yol ile kullanılmalıdır.

01 Tokenizer API

Tokenization, ham metni modelin anlayabileceği tamsayı dizilerine dönüştürür; her model ailesinin kendi tokenizer'ı vardır ve bu birbirleriyle değiştirilemez.

Dil modelleri doğrudan metin üzerinde işlem yapamaz. Tokenization sürecinde metin önce token adı verilen parçalara bölünür, ardından her token bir tamsayı kimliğine (token ID) eşlenir. Farklı model aileleri farklı tokenization algoritmaları kullanır.

Tokenization Algoritmaları

WordPieceBERT ailesi kullanır. "playing" → ["play", "##ing"]. Alt kelimeler ## öneki alır. Kelime dağarcığı sabit (30.522 token).
BPE (Byte-Pair Encoding)GPT ailesi kullanır. Sık geçen karakter çiftlerini birleştirerek öğrenir. "Ġplaying" — Ġ boşluk bayrağı.
SentencePiece / UnigramLLaMA, Mistral, T5 kullanır. Dil bağımsız; boşluk yerine ▁ (alt çizgi) kullanır. Herhangi bir dili destekler.

Temel Kullanım

tokenizer_demo.py
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")

text = "Transformers are powerful."

# 1) encode: sadece input_ids döndürür
ids = tokenizer.encode(text)
print(ids)
# [101, 19081, 2024, 3928, 1012, 102]

# 2) __call__: tam batch, tüm tensorleri döndürür (önerilen)
enc = tokenizer(text, return_tensors="pt")
print(enc.keys())
# dict_keys(['input_ids', 'token_type_ids', 'attention_mask'])

print("input_ids     :", enc["input_ids"])
print("attention_mask:", enc["attention_mask"])
print("token_type_ids:", enc["token_type_ids"])

# Token isimlerini gör
tokens = tokenizer.convert_ids_to_tokens(enc["input_ids"][0].tolist())
print(tokens)
# ['[CLS]', 'transformers', 'are', 'powerful', '.', '[SEP]']

# Decode: token ID'lerini metne geri çevir
decoded = tokenizer.decode(enc["input_ids"][0], skip_special_tokens=True)
print(decoded)
# 'transformers are powerful.'

# Padding ve truncation (batch için kritik)
batch_texts = [
    "Short text.",
    "This is a much longer sentence that needs padding.",
]
batch_enc = tokenizer(
    batch_texts,
    padding=True,          # en uzun seq'e göre pad
    truncation=True,      # max_length'i aşanları kes
    max_length=512,
    return_tensors="pt",
)
print(batch_enc["input_ids"].shape)  # torch.Size([2, N])

Special Tokens

[CLS]BERT: her sekansın başı. Sınıflandırma için kullanılan [CLS] vektörü bu tokendan alınır.
[SEP]BERT: cümle ayırıcı ve sekans sonu. Çift cümle görevlerinde iki cümleyi ayırır.
[PAD]Batch'teki kısa sekansları doldurmak için. attention_mask=0 yapılarak modelin görmezden gelmesi sağlanır.
[UNK]Kelime dağarcığında bulunmayan tokenlar için. Sık görülmesi tokenizer uyumsuzluğuna işaret eder.
<|endoftext|>GPT ailesi: metin sonu belirteci. Üretim sırasında durdurma sinyali olarak kullanılır.
<s> / </s>SentencePiece modelleri (LLaMA vb.): başlangıç ve bitiş tokeni.
DİKKAT

Farklı model ailelerinin tokenizer'ları birbirleriyle kesinlikle karıştırılmamalıdır. BERT'in tokenizer'ı ile GPT modelini kullanmaya çalışırsanız anlamsız çıktılar alırsınız. Her zaman modelle birlikte gelen tokenizer'ı kullanın: AutoTokenizer.from_pretrained(ayni_model_adi).

02 AutoModel ve Pipeline

Auto sınıfları model türünü config dosyasından otomatik tespit eder; pipeline ise tokenizer + model + post-processing'i tek arayüzde birleştirir.

AutoModel Ailesi

Her görev için ayrı bir Auto sınıfı mevcuttur. Bu sınıflar, modelin config.json dosyasındaki architectures alanını okuyarak doğru model sınıfını yükler.

AutoModelSadece backbone — sınıflandırma başlığı yok. Feature extraction veya özel görevler için.
AutoModelForCausalLMGPT stili otoregresif üretim modelleri (LLaMA, Mistral, GPT-2). Sonraki token tahmini.
AutoModelForSeq2SeqLMEncoder-decoder modeller (T5, BART). Çeviri, özetleme, soru-cevap.
AutoModelForSequenceClassificationMetin sınıflandırma (duygu analizi, konu tespiti). Üstte linear classification head bulunur.
AutoModelForTokenClassificationToken başına etiket (NER, POS tagging). Her token için ayrı sınıf skoru üretir.
AutoModelForQuestionAnsweringExtractive QA. Context içinde cevap span'ının başlangıç/bitiş pozisyonunu tahmin eder.

from_pretrained Parametreleri

automodel_load.py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoConfig

model_id = "mistralai/Mistral-7B-Instruct-v0.3"

# Config'i önce indir, değiştir, sonra modeli yükle
config = AutoConfig.from_pretrained(model_id)
print(config.model_type)   # mistral
print(config.hidden_size)  # 4096

# Temel yükleme parametreleri
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",          # GPU'lara otomatik dağıt (accelerate gerekir)
    torch_dtype=torch.bfloat16, # bf16 ile yarım bellek kullanımı
    trust_remote_code=False,   # Güvenlik: bilinmeyen kod çalıştırma
    attn_implementation="flash_attention_2",  # Flash Attention
)

print(model.get_memory_footprint() / 1e9, "GB")

pipeline() ile Hızlı Kullanım

pipeline() fonksiyonu, tokenization, inference ve çıktı çözümleme adımlarını tek bir fonksiyon çağrısında birleştirir. Prototipleme ve üretime hazır uygulamalar için idealdir.

pipeline_demo.py
from transformers import pipeline
import torch

# 1) Duygu Analizi
sentiment = pipeline(
    "sentiment-analysis",
    model="distilbert/distilbert-base-uncased-finetuned-sst-2-english",
    device=0 if torch.cuda.is_available() else -1,
)
result = sentiment("The movie was absolutely wonderful!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]

# 2) NER (Named Entity Recognition)
ner = pipeline(
    "ner",
    model="dslim/bert-base-NER",
    aggregation_strategy="simple",
)
entities = ner("Hugging Face was founded in New York by Clément Delangue.")
for e in entities:
    print(f"{e['word']}{e['entity_group']} ({e['score']:.2f})")
# Hugging Face → ORG (0.99)
# New York     → LOC (0.99)
# Clément Delangue → PER (0.98)

# 3) Metin Üretimi
generator = pipeline(
    "text-generation",
    model="openai-community/gpt2",
    device_map="auto",
)
outputs = generator(
    "Machine learning is",
    max_new_tokens=50,
    num_return_sequences=2,
    temperature=0.8,
    do_sample=True,
)
for out in outputs:
    print(out["generated_text"])
    print("---")
NOT

pipeline() üretim ortamında kullanılırken dikkatli olun. Aynı modeli defalarca çağıracaksanız pipeline nesnesini bir kez oluşturun, her istekte yeniden oluşturmayın. Model yükleme pahalı bir işlemdir.

03 Datasets Kütüphanesi

datasets kütüphanesi, Apache Arrow formatını kullanarak büyük veri setlerini sıfır kopyalamayla yükler; Hub'daki yüz binlerce dataset'e tek satır kodla erişim sağlar.

Apache Arrow formatı, verileri sütun tabanlı olarak diske yazar ve bellekle eşler (memory-map). Bu sayede 100 GB'lık bir dataset'i RAM'e tamamen yüklemeden işleyebilirsiniz. Ayrıca Python ve Rust arasında sıfır kopyalama (zero-copy) ile hız sağlanır.

load_dataset Kullanımı

datasets_load.py
from datasets import load_dataset

# Hub'dan yükle
ds = load_dataset("stanfordnlp/imdb")
print(ds)
# DatasetDict({'train': Dataset({features: ['text','label'], num_rows: 25000}),
#              'test':  Dataset({features: ['text','label'], num_rows: 25000})})

# Sadece belirli split'i yükle
train_ds = load_dataset("stanfordnlp/imdb", split="train")

# Yerel CSV dosyasından yükle
local_ds = load_dataset("csv", data_files="my_data.csv")

# JSON Lines dosyasından yükle
jsonl_ds = load_dataset("json", data_files="my_data.jsonl")

# Streaming modu: büyük dataset'leri diske indirmeden işle
streamed = load_dataset("HuggingFaceFW/fineweb", streaming=True, split="train")
for sample in streamed.take(3):
    print(sample["text"][:200])

Dataset Dönüşümleri

datasets_transform.py
from datasets import load_dataset
from transformers import AutoTokenizer
from torch.utils.data import DataLoader

ds      = load_dataset("stanfordnlp/imdb")
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")

# .map(): her örneğe fonksiyon uygula
def tokenize(batch):
    return tokenizer(
        batch["text"],
        padding="max_length",
        truncation=True,
        max_length=512,
    )

tokenized = ds.map(tokenize, batched=True, num_proc=4)

# .filter(): koşulu sağlamayanları çıkar
long_reviews = ds["train"].filter(lambda x: len(x["text"].split()) > 100)

# .shuffle() ve .train_test_split()
split = ds["train"].shuffle(seed=42).train_test_split(test_size=0.1)
print(split)
# DatasetDict({'train': Dataset(22500), 'test': Dataset(2500)})

# PyTorch DataLoader'a aktar
tokenized.set_format("torch", columns=["input_ids", "attention_mask", "label"])
loader = DataLoader(tokenized["train"], batch_size=16, shuffle=True)

batch = next(iter(loader))
print(batch["input_ids"].shape)   # torch.Size([16, 512])
print(batch["label"].shape)      # torch.Size([16])
NOT

.map(batched=True) kullanmak, örnek başına çağrı yapmaktan çok daha hızlıdır. num_proc parametresiyle paralel işleme ekleyerek büyük dataset'leri dakikalar yerine saniyelerde tokenize edebilirsiniz.

04 Trainer API

Trainer, eğitim döngüsünü, değerlendirmeyi, checkpoint kaydetmeyi ve logging'i tek bir sınıfta kapsüller; özel gereksinimlerde callback sistemiyle genişletilebilir.

Manuel eğitim döngüsü yazmak yerine Trainer sınıfı; gradient accumulation, mixed precision, distributed training ve learning rate scheduling gibi ileri düzey özellikleri kutudan çıkar halde sunar. TrainingArguments ile tüm hiper-parametreler merkezi olarak yönetilir.

TrainingArguments Parametreleri

output_dirCheckpoint'ların ve final modelin kaydedileceği dizin.
num_train_epochsToplam eğitim epoch sayısı. max_steps ile birlikte kullanılamazlar.
per_device_train_batch_sizeHer GPU için batch boyutu. Gerçek batch = bu değer × GPU sayısı.
gradient_accumulation_stepsN adım sonra optimizer adımı at. Efektif batch boyutunu N katına çıkarır.
learning_rateAdamW için başlangıç öğrenme oranı. Genellikle 2e-5 ile 5e-5 arası.
eval_strategy"steps" veya "epoch". Değerlendirme ne zaman yapılacağını belirler.
save_strategy"steps" veya "epoch". Checkpoint ne zaman kaydedilsin.
bf16 / fp16Mixed precision eğitim. Ampere+ GPU için bf16, öncesi için fp16 tercih edilir.
load_best_model_at_endTrue yapılırsa eğitim bitince en iyi checkpoint yüklenir.
trainer_classification.py
import numpy as np
from datasets import load_dataset
from transformers import (
    AutoTokenizer, AutoModelForSequenceClassification,
    TrainingArguments, Trainer, DataCollatorWithPadding,
)
import evaluate

# 1) Veri ve tokenizer
ds        = load_dataset("stanfordnlp/imdb")
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")

def preprocess(batch):
    return tokenizer(batch["text"], truncation=True, max_length=512)

tokenized = ds.map(preprocess, batched=True)

# 2) Model (2 sınıf: pozitif / negatif)
model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert/distilbert-base-uncased",
    num_labels=2,
)

# 3) Metrik fonksiyonu
accuracy = evaluate.load("accuracy")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    preds = np.argmax(logits, axis=1)
    return accuracy.compute(predictions=preds, references=labels)

# 4) Eğitim argümanları
args = TrainingArguments(
    output_dir="./imdb-distilbert",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=32,
    learning_rate=2e-5,
    weight_decay=0.01,
    eval_strategy="epoch",
    save_strategy="epoch",
    load_best_model_at_end=True,
    metric_for_best_model="accuracy",
    bf16=True,
    logging_steps=100,
    report_to="none",  # wandb/tensorboard devre dışı
)

# 5) Trainer oluştur ve başlat
trainer = Trainer(
    model=model,
    args=args,
    train_dataset=tokenized["train"],
    eval_dataset=tokenized["test"],
    tokenizer=tokenizer,
    data_collator=DataCollatorWithPadding(tokenizer),
    compute_metrics=compute_metrics,
)

trainer.train()
# Eğitim tamamlandıktan sonra en iyi modeli kaydet
trainer.save_model("./imdb-distilbert-best")
results = trainer.evaluate()
print(results)
# {'eval_loss': 0.18, 'eval_accuracy': 0.934, ...}

05 Accelerate ile Çok GPU

Accelerate, tek GPU kodunu birden fazla GPU veya TPU'ya dağıtmak için gereken donanım soyutlamasını sağlar; mevcut kodu minimal değişiklikle ölçeklendirir.

Accelerate kütüphanesinin temel felsefesi şudur: eğitim kodunuzu bir kez yazın, istediğiniz donanımda çalıştırın. Tek GPU, çok GPU (DDP), mix precision, DeepSpeed ve FSDP arasında geçiş yapmak için kodu değil, konfigürasyonu değiştirirsiniz.

Kurulum ve Konfigürasyon

terminal
# Kurulum
pip install accelerate

# İnteraktif konfigürasyon (makine başına bir kez)
accelerate config
# Soru sorar: kaç GPU? mixed precision? DeepSpeed?
# ~/.cache/huggingface/accelerate/default_config.yaml oluşturur

# Script'i çalıştır
accelerate launch train.py

# Konfigürasyonu override ederek çalıştır
accelerate launch --num_processes 4 --mixed_precision bf16 train.py

Tek GPU'dan Çok GPU'ya Minimal Geçiş

train_accelerate.py
import torch
from torch.utils.data import DataLoader
from transformers import AutoModelForSequenceClassification, AutoTokenizer
from accelerate import Accelerator

# Accelerator nesnesini oluştur — device yönetimini devralır
accelerator = Accelerator(
    mixed_precision="bf16",        # bf16 / fp16 / no
    gradient_accumulation_steps=4,
)

# Model ve tokenizer — cihaza taşımayı accelerator halleder
model_name = "distilbert/distilbert-base-uncased"
model     = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)

# DataLoader'ı kendiniz oluşturun
train_loader = DataLoader(train_dataset, batch_size=16, shuffle=True)

# Accelerator ile hazırla: model, optimizer, dataloader birlikte
model, optimizer, train_loader = accelerator.prepare(model, optimizer, train_loader)

# Eğitim döngüsü — .to(device) çağrısına gerek yok
model.train()
for epoch in range(3):
    for batch in train_loader:
        with accelerator.accumulate(model):
            outputs = model(**batch)
            loss    = outputs.loss
            accelerator.backward(loss)   # loss.backward() yerine
            optimizer.step()
            optimizer.zero_grad()

    if accelerator.is_main_process():
        print(f"Epoch {epoch} tamamlandı")

# Model kaydet (sadece main process)
accelerator.wait_for_everyone()
unwrapped = accelerator.unwrap_model(model)
unwrapped.save_pretrained("./output", is_main_process=accelerator.is_main_process())
NOT

Accelerate ile yazdığınız kod, accelerate launch olmadan da doğrudan çalışır — bu durumda tek GPU veya CPU kullanır. Bu özellik geliştirme ve debug süreçlerini kolaylaştırır.

06 PEFT ile Etkin Fine-tuning

Parameter-Efficient Fine-Tuning yöntemleri, modelin yalnızca küçük bir parametre alt kümesini güncelleyerek büyük modelleri sınırlı GPU belleğiyle ince ayar yapılabilir hale getirir.

7B parametreli bir modeli tam olarak fine-tune etmek için yaklaşık 112 GB GPU belleği gerekir (bf16, optimizer state dahil). PEFT yöntemleri bu sorunu çözer: LoRA (Low-Rank Adaptation), büyük ağırlık matrislerini dondurup yalnızca düşük rankli adaptör matrislerini eğitir. Eğitilen parametre sayısı orijinalin %1'inden azına düşebilir.

LoRA Matematiki

Orijinal ağırlık matrisi W ∈ ℝd×k için LoRA şunu öğrenir: ΔW = A·B, burada A ∈ ℝd×r ve B ∈ ℝr×k, r << min(d,k). Çıkarım sırasında W' = W + α/r · A·B hesaplanır. r=8, α=16 ile tipik bir 7B model için eğitilen parametre sayısı ~20M'a düşer.

peft_lora.py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model, TaskType, PeftModel
from datasets import load_dataset

model_id  = "mistralai/Mistral-7B-v0.3"
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.pad_token = tokenizer.eos_token

# Modeli bf16 ile yükle
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16,
    device_map="auto",
)

# LoRA konfigürasyonu
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16,                   # rank — küçük = az parametre
    lora_alpha=32,           # scaling faktörü
    lora_dropout=0.05,       # adaptör dropout
    target_modules=[         # hangi katmanlar eğitilecek
        "q_proj", "k_proj", "v_proj",
        "o_proj", "gate_proj", "up_proj", "down_proj",
    ],
    bias="none",
)

# PEFT modelini oluştur
peft_model = get_peft_model(model, lora_config)
peft_model.print_trainable_parameters()
# trainable params: 20,185,088 || all params: 7,261,577,216 || trainable%: 0.2780

# Normal Trainer ile eğit
args = TrainingArguments(
    output_dir="./mistral-lora",
    num_train_epochs=2,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=8,
    learning_rate=2e-4,
    bf16=True,
    logging_steps=50,
    save_strategy="epoch",
    report_to="none",
)
trainer = Trainer(model=peft_model, args=args, train_dataset=train_ds)
trainer.train()

# Adaptörü kaydet (sadece LoRA ağırlıkları — küçük dosya)
peft_model.save_pretrained("./mistral-lora-adapter")

# Daha sonra yükle ve birleştir
base_model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.bfloat16)
merged     = PeftModel.from_pretrained(base_model, "./mistral-lora-adapter")
merged     = merged.merge_and_unload()  # LoRA ağırlıklarını ana modele gömülü hale getir
merged.save_pretrained("./mistral-merged")
DİKKAT

target_modules listesi modelden modele değişir. Mistral için attention ve MLP projeksiyonlarını hedeflemek iyi sonuç verir. peft_model.print_trainable_parameters() ile seçilen parametre oranını her zaman doğrulayın; çok düşük oran (altlık: %0.1 altı) underfitting, çok yüksek oran gereksiz bellek kullanımı demektir.

07 safetensors ve Model Hub

safetensors formatı PyTorch'un pickle tabanlı .bin formatının güvenli ve hızlı alternatifidir; push_to_hub ile modeller birkaç satırla topluluğa açılabilir.

PyTorch .bin ile safetensors Karşılaştırması

Özellik.bin (pickle).safetensors
GüvenlikPickle kodu çalıştırabilir — exploit riskiSadece tensor verisi — kod çalıştırmaz
Yükleme HızıYavaş (Python pickle parse)Hızlı (mmap tabanlı, lazy loading)
BellekYükleme sırasında iki kopyaZero-copy mmap
Kısmi YüklemeDesteklemezBelirli katmanları seçerek yükle
Hub DesteğiEvet (eski)Evet (varsayılan)
safetensors_hub.py
import torch
from safetensors.torch import save_file, load_file
from transformers import AutoModelForSequenceClassification, AutoTokenizer

model_id = "distilbert/distilbert-base-uncased"
model    = AutoModelForSequenceClassification.from_pretrained(model_id, num_labels=2)

# safetensors ile manuel kaydet
state_dict = {k: v.cpu() for k, v in model.state_dict().items()}
save_file(state_dict, "model.safetensors")

# Geri yükle
loaded_state = load_file("model.safetensors")
model.load_state_dict(loaded_state)

# save_pretrained zaten safetensors kullanır (transformers >= 4.34)
model.save_pretrained("./my-model")       # model.safetensors oluşturur
tokenizer.save_pretrained("./my-model")   # tokenizer.json vb.

# ─── Hub'a Yükle ─────────────────────────────────────────
from huggingface_hub import HfApi, create_repo

api = HfApi()

# Repo oluştur (yoksa)
create_repo("my-username/imdb-distilbert", exist_ok=True)

# Klasörü doğrudan Hub'a yükle
api.upload_folder(
    folder_path="./my-model",
    repo_id="my-username/imdb-distilbert",
    repo_type="model",
)

# Alternatif: push_to_hub ile doğrudan gönder
model.push_to_hub("my-username/imdb-distilbert")
tokenizer.push_to_hub("my-username/imdb-distilbert")

# ─── Model Card (README.md) ──────────────────────────────
from huggingface_hub import ModelCard

card_content = """---
language: en
license: apache-2.0
tags:
  - text-classification
  - sentiment-analysis
datasets:
  - stanfordnlp/imdb
metrics:
  - accuracy
---
# IMDB Sentiment Classifier
DistilBERT fine-tuned on IMDB for binary sentiment analysis.
Accuracy: 93.4% on test set.
"""
card = ModelCard(card_content)
card.push_to_hub("my-username/imdb-distilbert")
NOT

Hub'a model yüklemeden önce HF_TOKEN ortam değişkenini ayarlamanız veya huggingface-cli login komutunu çalıştırmanız gerekir. Token'ı huggingface.co/settings/tokens adresinden oluşturabilirsiniz. Write iznine sahip bir token kullanın.