Hugging Face, gdzie mieszkają otwarte modele
Hugging Face to trzy rzeczy naraz: repozytorium z setkami tysięcy modeli i zbiorów danych, zestaw bibliotek do pracy z nimi oraz usługa uruchamiająca modele bez własnego sprzętu. Dla większości zespołów pierwszy kontakt wygląda tak samo: szukają modelu do konkretnego zadania i trafiają na Hub.
Z czego się to składa
Hub przechowuje modele, zbiory danych i demonstracje. Działa na gicie, więc model to repozytorium z historią zmian, kartą opisującą jego zastosowanie i plikami wag. Możesz go sklonować, przejrzeć i uruchomić lokalnie.
Biblioteki to warstwa kodu. Transformers ładuje modele językowe i obrazowe jednym wywołaniem, Datasets pobiera i przetwarza zbiory danych, Sentence Transformers liczy embeddingi, a Diffusers obsługuje generowanie obrazów.
Inference Providers uruchamia modele przez API bez stawiania czegokolwiek. Żądanie trafia do jednego z partnerów obliczeniowych, a rozliczenie idzie po stawkach dostawcy, bez narzutu Hugging Face.
Spaces to hosting demonstracji. Aplikacja w Gradio albo Streamlit dostaje adres i działa w przeglądarce, co jest najszybszym sposobem, żeby pokazać model komuś, kto nie odpali notebooka.
Hub i karta modelu
Wyszukiwarka Hubu filtruje po zadaniu, języku, licencji i rozmiarze. To ostatnie kryterium bywa pomijane, a decyduje o tym, czy model w ogóle uruchomisz na posiadanym sprzęcie.
Karta modelu jest najważniejszym dokumentem i warto ją czytać przed pobraniem wag. Znajdziesz tam zamierzone zastosowanie, dane treningowe, znane ograniczenia i licencję. Model radzący sobie świetnie z angielskim potrafi zawodzić na polskim, a taki wytrenowany na tekstach z jednej dziedziny źle generalizuje na inną.
Osobno sprawdzaj format wag. Preferuj safetensors, ponieważ starszy format oparty na mechanizmie serializacji Pythona potrafi wykonać kod przy wczytywaniu pliku. To realna droga ataku, a nie teoretyczna, więc pobieranie wag z nieznanego konta bez sprawdzenia formatu jest ryzykiem.
Nazewnictwo modeli też niesie informację, choć nie jest znormalizowane. Człon w rodzaju base, large czy liczba parametrów mówi o rozmiarze, końcówka instruct oznacza wariant dostrojony do wykonywania poleceń, a chat do prowadzenia rozmowy. Model bez tych oznaczeń jest zwykle bazowy, czyli przewiduje dalszy ciąg tekstu, i użyty jak asystent zachowa się nieoczekiwanie. To częsta przyczyna wrażenia, że model jest słaby, choć po prostu wybrano niewłaściwy wariant.
Warto też patrzeć na liczbę pobrań i datę ostatniej aktualizacji. Model bez ruchu od dwóch lat zwykle ma nowszy odpowiednik, a różnica w jakości bywa duża.
Transformers w praktyce
Do prostych zadań wystarczy potok, który sam dobiera tokenizer i konfigurację.
pip install transformers torchfrom transformers import pipeline
klasyfikator = pipeline(
"text-classification",
model="cardiffnlp/twitter-xlm-roberta-base-sentiment"
)
print(klasyfikator("Zamowienie przyszlo dwa dni po terminie, ale produkt jest dobry"))Przy pierwszym uruchomieniu biblioteka pobiera wagi i zapisuje je w pamięci podręcznej, domyślnie w katalogu domowym. Na maszynie budującej obrazy kontenerów warto ustawić tę ścieżkę świadomie, bo inaczej każdy build pobiera model od nowa.
Do embeddingów sięgasz po Sentence Transformers, bibliotekę stojącą na tej samej warstwie, ale sprowadzającą osadzanie do jednego wywołania zamiast ręcznego tokenizowania i uśredniania wyjścia modelu.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("intfloat/multilingual-e5-base")
wektory = model.encode(["pierwszy fragment", "drugi fragment"])Model wielojęzyczny w rozmiarze podstawowym daje dobre wyniki dla polskiego i zmieści się na przeciętnej karcie graficznej, a nawet na procesorze przy niewielkim wolumenie. Wektory zapisujesz potem w bazie takiej jak Pinecone albo pgvector.
Inference Providers bez własnego GPU
Jeśli nie chcesz utrzymywać sprzętu, wywołujesz model przez API. Żądanie jest kierowane do jednego z partnerów, a Ty płacisz jego stawkę.
from huggingface_hub import InferenceClient
client = InferenceClient(api_key=os.environ["HF_TOKEN"])
odpowiedz = client.chat_completion(
model="meta-llama/Llama-3.3-70B-Instruct",
messages=[{"role": "user", "content": "Streszcz ponizszy tekst w trzech zdaniach: ..."}]
)Interfejs jest zgodny z konwencją znaną z OpenAI, więc podmiana dostawcy w istniejącym kodzie sprowadza się zwykle do zmiany adresu bazowego i klucza. To ułatwia porównanie modelu otwartego z zamkniętym na własnych danych, zanim podejmiesz decyzję.
Każde konto dostaje miesięczną pulę kredytów na próby. Plan Pro podnosi ją wyraźnie, a organizacje na planach zespołowych dzielą pulę między członków i mogą rozliczać wszystkie żądania centralnie, mimo że każdy używa własnego tokenu.
Spaces, czyli demo w kilka minut
Space to repozytorium z aplikacją, najczęściej w Gradio. Wypychasz kod, a platforma buduje obraz i wystawia adres.
import gradio as gr
from transformers import pipeline
streszczaj = pipeline("summarization", model="facebook/bart-large-cnn")
gr.Interface(
fn=lambda tekst: streszczaj(tekst, max_length=120)[0]["summary_text"],
inputs=gr.Textbox(lines=10),
outputs="text"
).launch()Darmowy wariant działa na procesorze, co wystarcza do lekkich modeli. Cięższe wymagają mocniejszej maszyny, rozliczanej godzinowo: od trzech centów za godzinę przy samym wzmocnieniu procesora, przez pojedyncze karty graficzne, aż po ponad dwadzieścia trzy dolary za godzinę przy zestawie ośmiu kart. Konta Pro dostają też zwielokrotnioną pulę na karcie ZeroGPU, przydzielanej dynamicznie tylko na czas obliczeń.
Spaces przydają się także wewnątrz zespołu, nie tylko do pokazywania na zewnątrz. Interfejs, w którym osoba z działu obsługi klienta może wkleić dziesięć realnych zgłoszeń i zobaczyć, jak model je klasyfikuje, daje lepszą informację zwrotną niż tabela z metrykami. Przy okazji zbierasz przypadki brzegowe, o których zespół techniczny by nie pomyślał.
Praktyczna uwaga: Space wystawiony publicznie bez ograniczeń bywa wykorzystywany przez boty. Jeśli demo kosztuje Cię za godzinę pracy karty, dołóż limit zapytań albo prosty mechanizm dostępu.
Cennik
| Plan | Koszt | Co dostajesz |
|---|---|---|
| Free | 0 USD | Publiczne repozytoria, ograniczone limity, pula kredytów na próby |
| Pro | 9 USD miesięcznie | Wyższe limity, ośmiokrotna pula ZeroGPU i najwyższy priorytet w kolejce, większa pula kredytów |
| Team | 20 USD za osobę miesięcznie | Wspólne repozytoria prywatne, dzielona pula kredytów, kontrola dostępu |
| Enterprise | 50 USD za osobę miesięcznie | Rozliczenie centralne, kontrola zgodności, wsparcie |
| Spaces z mocniejszą maszyną | od 0,03 USD za godzinę | Rozliczenie godzinowe, niezależne od planu |
Rachunek za inferencję jest osobny od abonamentu i zależy od modelu oraz dostawcy, do którego trafia żądanie. Przy stałym wolumenie policz koszt tysiąca wywołań w praktyce, bo różnice między modelami o podobnej jakości bywają kilkukrotne.
Dostrajanie modelu na własnych danych
Dostrajanie ma sens rzadziej, niż się wydaje, ale w konkretnych przypadkach daje wyniki nieosiągalne promptem. Chodzi o zadania, w których liczy się trzymanie stałego formatu, słownictwo z wąskiej dziedziny albo styl odpowiedzi charakterystyczny dla organizacji.
Zanim zaczniesz, sprawdź trzy rzeczy. Czy masz przynajmniej kilkaset przykładów dobrej jakości, bo poniżej tego progu efekt bywa gorszy niż przed dostrajaniem. Czy problem nie znika po dodaniu przykładów wprost do promptu, co jest tańsze i odwracalne. Czy zadanie jest stabilne w czasie, ponieważ każda zmiana wymagań oznacza kolejne dostrajanie.
Przy niewielkich zbiorach standardem jest metoda oparta o adaptery, w której trenujesz tylko niewielki dodatek do wag zamiast całego modelu. Wynik zajmuje kilkadziesiąt megabajtów zamiast kilkudziesięciu gigabajtów, a trening mieści się na jednej karcie graficznej.
from peft import LoraConfig, get_peft_model
konfiguracja = LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"])
model = get_peft_model(model_bazowy, konfiguracja)Dane treningowe przygotuj tak samo starannie jak zestaw testowy. Podziel je przed treningiem: część do uczenia, część odłożona do oceny i nietykana. Ocena na tych samych przykładach, na których model się uczył, zawsze wygląda świetnie i nic nie mówi.
Efekt uboczny wart uwagi to zapominanie. Model dostrojony do wąskiego zadania zwykle traci część ogólnych zdolności, więc jeśli ma obsługiwać także rozmowę poza dziedziną, sprawdź to osobno przed wdrożeniem.
Model otwarty czy API dostawcy
| Wariant | Zaleta | Wada | Kiedy wybrać |
|---|---|---|---|
| Model otwarty na własnym sprzęcie | Brak kosztu za token, dane nie wychodzą | Koszt sprzętu i utrzymania, słabsza jakość na trudnych zadaniach | Duży stały wolumen, dane wrażliwe |
| Model otwarty przez Inference Providers | Bez sprzętu, łatwa zmiana modelu | Płacisz za token, zależność od dostawcy | Testy i średni wolumen |
| Gemini albo OpenAI | Najwyższa jakość, multimodalność | Koszt rośnie z wolumenem, dane u dostawcy | Trudne zadania, mały i średni ruch |
| Ollama lokalnie | Praca offline, zero kosztu za token | Ograniczenia sprzętu deweloperskiego | Prototypy i praca z danymi poufnymi |
Reguła, która sprawdza się w większości projektów: zacznij od modelu zamkniętego, żeby sprawdzić, czy zadanie w ogóle da się rozwiązać. Dopiero gdy działa i znasz wolumen, policz, czy model otwarty obniży rachunek na tyle, żeby pokryć koszt utrzymania.
Warto przy tym liczyć koszt utrzymania uczciwie. Karta graficzna wynajęta w chmurze na stałe kosztuje kilkaset dolarów miesięcznie niezależnie od tego, ile żądań obsłuży, więc próg opłacalności wobec API leży wyżej, niż sugeruje sama stawka za token. Model otwarty zaczyna wygrywać przy stałym, wysokim obciążeniu, a nie przy ruchu skoncentrowanym w kilku godzinach dziennie.
Do zadań prostych i masowych, jak klasyfikacja czy embeddingi, model otwarty wygrywa niemal zawsze. Do zadań wymagających rozumowania różnica jakości nadal bywa widoczna.
Licencje, o których trzeba pamiętać
Otwarte wagi nie znaczą dowolnego użytku. Modele na Hubie mają różne licencje i część z nich ogranicza zastosowanie komercyjne, wymaga podania źródła albo zabrania używania wyników do trenowania konkurencyjnych modeli.
Trzy rzeczy warto sprawdzić przed wdrożeniem. Sama licencja modelu, bo bywa inna niż licencja kodu w tym samym repozytorium. Licencja zbioru danych, na którym model trenowano, ponieważ ograniczenia potrafią przechodzić na wynik. Wymóg akceptacji warunków, widoczny jako formularz przed pobraniem wag, co przy automatycznym pobieraniu w pipelinie kończy się błędem uwierzytelnienia.
Osobnym pytaniem jest pochodzenie danych treningowych, na które licencja nie zawsze odpowiada. Modele generujące obrazy oraz kod bywają przedmiotem sporów o to, na czym je trenowano, a ryzyko przechodzi na tego, kto publikuje wynik. W zastosowaniach, gdzie efekt trafia do klienta jako produkt, warto to rozstrzygnąć z prawnikiem, a nie na podstawie wpisu w karcie modelu.
W firmie sensownie jest utrzymywać krótką listę zaakceptowanych licencji i sprawdzać ją przy dodawaniu modelu do projektu. Odkrycie po roku, że model w produkcji ma licencję niekomercyjną, jest problemem prawnym, nie technicznym.
Typowe błędy
Pierwszy to wybieranie największego modelu, jaki się zmieści. Wersja podstawowa często wystarcza do klasyfikacji czy embeddingów, a działa kilka razy szybciej i taniej.
Drugi to pobieranie wag w każdym uruchomieniu kontenera. Ustaw katalog pamięci podręcznej i zamontuj go jako wolumen, inaczej start usługi zajmuje minuty i generuje niepotrzebny ruch.
Trzeci to pomijanie tokenizera przy porównaniach. Ten sam tekst po polsku zużywa różną liczbę tokenów w różnych modelach, więc porównanie kosztu bez tego jest mylące.
Czwarty to używanie modelu bez sprawdzenia karty. Model wytrenowany na danych z jednej dziedziny potrafi zachowywać się nieprzewidywalnie na innej, a karta zwykle o tym uprzedza.
Piąty to trzymanie tokenu dostępu w kodzie. Token z uprawnieniem do zapisu pozwala modyfikować repozytoria organizacji, więc traktuj go jak klucz produkcyjny.
FAQ
Czy Hugging Face jest darmowy?
Konto darmowe daje dostęp do publicznych modeli i zbiorów danych oraz niewielką pulę kredytów na inferencję. Plan Pro kosztuje 9 USD miesięcznie i podnosi limity, Team 20 USD za osobę, Enterprise 50 USD za osobę.
Osobno rozliczany jest magazyn repozytoriów prywatnych, o czym łatwo zapomnieć przy platformie kojarzonej z darmowym hostowaniem modeli. Stawka zaczyna się od osiemnastu dolarów za terabajt miesięcznie i maleje przy większych wolumenach. Ruch wychodzący i sieć dostarczania treści są w tej cenie, więc rachunek zależy od tego, ile trzymasz, a nie ile pobierasz. Przy zespole wersjonującym kilka wariantów dużego modelu ta pozycja rośnie szybciej niż abonament. Osobno rozliczane są Spaces na mocniejszej maszynie, od trzech centów za godzinę przy wzmocnionym procesorze wzwyż.
Czy mogę używać modeli komercyjnie?
Zależy od licencji konkretnego modelu, bo różnią się między sobą. Część pozwala na dowolne użycie, część ogranicza zastosowanie komercyjne albo nakłada dodatkowe warunki. Sprawdź licencję modelu i zbioru treningowego przed wdrożeniem.
Czym różni się Hugging Face od Ollamy?
Hugging Face to repozytorium i usługi wokół modeli, Ollama to narzędzie do uruchamiania modeli lokalnie jednym poleceniem. Nie konkurują ze sobą wprost: wiele modeli dostępnych w Ollamie pochodzi właśnie z Hubu.
Czy potrzebuję karty graficznej?
Do modeli embeddingowych i mniejszych klasyfikatorów wystarczy procesor, zwłaszcza przy niewielkim wolumenie. Modele językowe rzędu kilku miliardów parametrów wymagają karty albo skorzystania z Inference Providers, gdzie sprzęt jest po stronie dostawcy.
Jak zacząć bez uczenia własnego modelu?
Znajdź gotowy model do swojego zadania, uruchom go przez potok w bibliotece Transformers albo przez API i sprawdź jakość na własnych danych. Trenowanie własnego modelu ma sens dopiero wtedy, gdy żaden gotowy nie daje wystarczających wyników, a masz dane do dostrojenia.
Zasady rozliczeń opisuje dokumentacja Inference Providers, a modele znajdziesz na huggingface.co.