Online koncové body a nasazení pro odvozování v reálném čase
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)
Azure Machine Učení umožňuje provádět odvozování dat v reálném čase pomocí modelů nasazených do online koncových bodů. Odvozování je proces použití nových vstupních dat na model strojového učení k vygenerování výstupů. I když se tyto výstupy obvykle označují jako "předpovědi", lze použít k vygenerování výstupů pro jiné úlohy strojového učení, jako je klasifikace a clustering.
Online koncové body
Online koncové body nasazují modely na webový server, který může vracet předpovědi v rámci protokolu HTTP. Pomocí online koncových bodů zprovozníte modely pro odvozování v reálném čase v synchronních požadavcích s nízkou latencí. Doporučujeme je používat v následujících případech:
- Máte požadavky na nízkou latenci
- Váš model může na žádost odpovědět v relativně krátkém časovém intervalu.
- Vstupy modelu se vejdou do datové části POŽADAVKU HTTP.
- Potřebujete vertikálně navýšit kapacitu z hlediska počtu požadavků.
Pokud chcete definovat koncový bod, musíte zadat:
- Název koncového bodu: Tento název musí být v oblasti Azure jedinečný. Další informace o pravidlech pojmenování najdete v tématu Omezení koncových bodů.
- Režim ověřování: Pro koncový bod si můžete vybrat mezi režimem ověřování založeném na klíči a azure machine Učení režimem ověřování na základě tokenu. Platnost klíče nevyprší, ale platnost tokenu vyprší. Další informace o ověřování najdete v tématu Ověřování u online koncového bodu.
Azure Machine Učení poskytuje pohodlí při používání spravovaných online koncových bodů pro nasazování modelů ML na klíč. Toto je doporučený způsob použití online koncových bodů ve službě Azure Machine Učení. Spravované online koncové body pracují s výkonnými procesory a GPU v Azure škálovatelným a plně spravovaným způsobem. Tyto koncové body se také stará o obsluhu, škálování, zabezpečení a monitorování vašich modelů, aby vám uvolnily režii při nastavování a správě základní infrastruktury. Informace o nasazení do spravovaného online koncového bodu najdete v tématu Nasazení modelu ML s online koncovým bodem.
Proč zvolit spravované online koncové body přes ACI nebo AKS(v1)?
Použití spravovaných online koncových bodů je doporučeným způsobem použití online koncových bodů ve službě Azure Machine Učení. Následující tabulka uvádí klíčové atributy spravovaných online koncových bodů v porovnání s řešeními Azure Machine Učení SDK/CLI v1 (ACI a AKS(v1)).
Atributy | Spravované online koncové body (v2) | ACI nebo AKS(v1) |
---|---|---|
Zabezpečení nebo izolace sítě | Snadné příchozí nebo odchozí řízení pomocí rychlého přepínače | Virtuální síť není podporovaná nebo vyžaduje složitou ruční konfiguraci |
Spravovaná služba | – Plně spravované zřizování a škálování výpočetních prostředků - Konfigurace sítě pro prevenci exfiltrace dat – Upgrade hostitelského operačního systému, řízené zavedení místních aktualizací |
– Škálování je omezené ve verzi 1. – Konfigurace nebo upgrade sítě musí být spravována uživatelem. |
Koncept koncového bodu nebo nasazení | Rozlišení mezi koncovým bodem a nasazením umožňuje složité scénáře, jako je bezpečné zavedení modelů. | Žádný koncept koncového bodu |
Diagnostika a monitorování | – Ladění místního koncového bodu je možné pomocí Dockeru a editoru Visual Studio Code – Pokročilá analýza metrik a protokolů s grafem nebo dotazem pro porovnání mezi nasazeními – Rozpis nákladů dolů na úroveň nasazení |
Žádné snadné místní ladění |
Škálovatelnost | Neomezené, elastické a automatické škálování | – ACI není škálovatelná. – AKS (v1) podporuje pouze škálování v clusteru a vyžaduje konfiguraci škálovatelnosti. |
Připravenost pro podnikové zpracování | Private Link, klíče spravované zákazníkem, ID Microsoft Entra, správa kvót, integrace fakturace, SMLOUVA SLA | Nepodporováno |
Pokročilé funkce ML | – Shromažďování dat modelu – Monitorování modelů - Model šampion-challenger, bezpečné zavedení, zrcadlení provozu – Zodpovědná rozšiřitelnost umělé inteligence |
Nepodporováno |
Případně pokud dáváte přednost použití Kubernetes k nasazení modelů a obsluhování koncových bodů a jste obeznámeni se správou požadavků na infrastrukturu, můžete použít online koncové body Kubernetes. Tyto koncové body umožňují nasazovat modely a obsluhovat online koncové body v plně nakonfigurovaných a spravovaných clusterech Kubernetes kdekoli s procesory nebo gpu.
Proč zvolit spravované online koncové body přes AKS(v2)?
Spravované online koncové body vám můžou pomoct zjednodušit proces nasazení a poskytovat následující výhody pro online koncové body Kubernetes:
Spravovaná infrastruktura
- Automaticky zřídí výpočetní prostředky a hostuje model (stačí zadat typ virtuálního počítače a nastavení škálování).
- Automatické aktualizace a opravy základní image hostitelského operačního systému
- Automaticky provede obnovení uzlu, pokud dojde k selhání systému.
Monitorování a protokoly
- Monitorování dostupnosti, výkonu a smlouvy SLA modelu s využitím nativní integrace se službou Azure Monitor
- Ladění nasazení pomocí protokolů a nativní integrace se službou Azure Log Analytics
Zobrazení nákladů
- Spravované online koncové body umožňují monitorovat náklady na úrovni koncového bodu a nasazení.
Poznámka:
Spravované online koncové body jsou založené na výpočetních Učení azure. Při použití spravovaného online koncového bodu platíte poplatky za výpočetní prostředky a síťové poplatky. Za příplatek není žádný příplatek. Další informace o cenách najdete v cenové kalkulačce Azure.
Pokud používáte virtuální síť Azure Machine Učení k zabezpečení odchozího provozu ze spravovaného online koncového bodu, budou se vám účtovat pravidla odchozích přenosů azure a plně kvalifikovaných názvů domén, která používá spravovaná virtuální síť. Další informace najdete v tématu Ceny pro spravovanou virtuální síť.
Spravované online koncové body vs. online koncové body Kubernetes
Následující tabulka uvádí hlavní rozdíly mezi spravovanými online koncovými body a online koncovými body Kubernetes.
Spravované online koncové body | Online koncové body Kubernetes (AKS(v2)) | |
---|---|---|
Doporučení uživatelé | Uživatelé, kteří chtějí spravované nasazení modelu a vylepšené prostředí MLOps | Uživatelé, kteří preferují Kubernetes a mohou si sami spravovat požadavky na infrastrukturu |
Zřizování uzlů | Zřizování, aktualizace, odebrání spravovaného výpočetního prostředí | Odpovědnost uživatelů |
Údržba uzlů | Aktualizace imagí spravovaného hostitelského operačního systému a posílení zabezpečení | Odpovědnost uživatelů |
Změna velikosti clusteru (škálování) | Spravované ruční a automatické škálování, které podporuje zřizování dalších uzlů | Ruční a automatické škálování, které podporuje škálování počtu replik v rámci pevných hranic clusteru |
Typ výpočetních prostředků | Spravováno službou | Cluster Kubernetes spravovaný zákazníkem (Kubernetes) |
Spravovaná identita | Podporuje se | Podporováno |
Virtuální síť (VNet). | Podporováno prostřednictvím spravovaná izolace sítě | Odpovědnost uživatelů |
Průběžné monitorování a protokolování | Azure Monitor a Log Analytics využívají (včetně klíčových metrik a tabulek protokolů pro koncové body a nasazení) | Odpovědnost uživatelů |
Protokolování pomocí Přehledy aplikace (starší verze) | Podporováno | Podporováno |
Zobrazení nákladů | Podrobné informace o úrovni koncového bodu nebo nasazení | Úroveň clusteru |
Náklady použité na | Virtuální počítače přiřazené k nasazením | Virtuální počítače přiřazené ke clusteru |
Zrcadlený provoz | Podporuje se | Nepodporované |
Nasazení bez kódu | Podporované (modely MLflow a Triton ) | Podporované (modely MLflow a Triton ) |
Online nasazení
Nasazení je sada prostředků a výpočetních prostředků potřebných k hostování modelu, který provádí skutečné odvozování. Jeden koncový bod může obsahovat více nasazení s různými konfiguracemi. Toto nastavení pomáhá oddělit rozhraní prezentované koncovým bodem od podrobností implementace , které jsou přítomné v nasazení. Online koncový bod má mechanismus směrování, který může směrovat požadavky na konkrétní nasazení v koncovém bodu.
Následující diagram znázorňuje online koncový bod se dvěma nasazeními, modrými a zelenými. Modré nasazení používá virtuální počítače se skladovou jednotkou procesoru a používá verzi 1 modelu. Zelené nasazení používá virtuální počítače se skladovou jednotkou GPU a používá verzi 2 modelu. Koncový bod je nakonfigurovaný tak, aby směroval 90 % příchozího provozu do modrého nasazení, zatímco zelené nasazení přijímá zbývajících 10 %.
Následující tabulka popisuje klíčové atributy nasazení:
Atribut | Popis |
---|---|
Name | Název nasazení. |
Název koncového bodu | Název koncového bodu pro vytvoření nasazení v části. |
Model | Model, který se má použít pro nasazení. Tato hodnota může být odkazem na existující model verze v pracovním prostoru nebo specifikace vloženého modelu. |
Cesta kódu | Cesta k adresáři v místním vývojovém prostředí, který obsahuje veškerý zdrojový kód Pythonu pro bodování modelu. Můžete použít vnořené adresáře a balíčky. |
Bodovací skript | Relativní cesta k souboru bodování v adresáři zdrojového kódu. Tento kód Pythonu init() musí mít funkci a run() funkci. Funkce init() bude volána po vytvoření nebo aktualizaci modelu (můžete ji použít k uložení modelu do mezipaměti, například). Funkce run() se volá při každém vyvolání koncového bodu, aby se udělalo skutečné bodování a předpověď. |
Prostředí | Prostředí pro hostování modelu a kódu. Tato hodnota může být odkazem na existující prostředí s verzí v pracovním prostoru nebo specifikaci vloženého prostředí. Poznámka: Microsoft pravidelně opravuje základní image kvůli známým ohrožením zabezpečení. Abyste mohli použít opravenou image, budete muset znovu nasadit koncový bod. Pokud zadáte vlastní image, zodpovídáte za její aktualizaci. Další informace najdete v tématu Opravy obrázků. |
Typ instance | Velikost virtuálního počítače, která se má použít pro nasazení. Seznam podporovaných velikostí najdete v seznamu skladových položek spravovaných online koncových bodů. |
Počet instancí | Početinstancích Založte hodnotu na očekávané úloze. Pro zajištění vysoké dostupnosti doporučujeme nastavit hodnotu alespoň 3 na hodnotu . Pro provádění upgradů si vyhrazujeme dalších 20 %. Další informace najdete v tématu Přidělení kvóty virtuálních počítačů pro nasazení. |
Informace o nasazení online koncových bodů pomocí šablony CLI, SADY SDK, studia a ARM najdete v tématu Nasazení modelu ML s online koncovým bodem.
Nasazení pro codery a jiné než codery
Azure Machine Učení podporuje nasazení modelu do online koncových bodů pro codery a jiné než codery, a to tím, že poskytuje možnosti nasazení bez kódu, nasazení s nízkým kódem a nasazení byOC (Bring Your Own Container).
- Nasazení bez kódu poskytuje odvozování předem pro běžné architektury (například scikit-learn, TensorFlow, PyTorch a ONNX) prostřednictvím MLflow a Tritonu.
- Nasazení s minimem kódu umožňuje poskytnout minimální kód spolu s modelem ML pro nasazení.
- Nasazení BYOC umožňuje prakticky přenést všechny kontejnery ke spuštění vašeho online koncového bodu. Ke správě kanálů MLOps můžete použít všechny funkce platformy Azure Machine Učení, jako je automatické škálování, GitOps, ladění a bezpečné zavedení.
Následující tabulka uvádí klíčové aspekty možností online nasazení:
Bez kódu | Nízký kód | BYOC | |
---|---|---|---|
Souhrn | Používá integrované odvozování pro oblíbené architektury, jako jsou scikit-learn, TensorFlow, PyTorch a ONNX, prostřednictvím MLflow a Triton. Další informace najdete v tématu Nasazení modelů MLflow do online koncových bodů. | Používá zabezpečené a veřejně publikované kurátorované image pro oblíbené architektury s aktualizacemi každých dva týdny k řešení ohrožení zabezpečení. Zadáte hodnoticí skript nebo závislosti Pythonu. Další informace najdete v tématu Azure Machine Učení kurátorovaná prostředí. | Kompletní zásobník poskytnete prostřednictvím podpory služby Azure Machine Učení pro vlastní image. Další informace najdete v tématu Použití vlastního kontejneru k nasazení modelu do online koncového bodu. |
Vlastní základní image | Ne, kurátorované prostředí to poskytne pro snadné nasazení. | Ano a Ne, můžete použít kurátorovaný obrázek nebo přizpůsobený obrázek. | Ano, přineste přístupné umístění image kontejneru (například docker.io, Azure Container Registry (ACR) nebo Microsoft Container Registry (MCR) nebo soubor Dockerfile, který můžete sestavit nebo odeslat pomocí ACR pro váš kontejner. |
Vlastní závislosti | Ne, kurátorované prostředí to poskytne pro snadné nasazení. | Ano, přineste prostředí Azure Machine Učení, ve kterém model běží, buď image Dockeru se závislostmi Conda, nebo soubor dockerfile. | Ano, tato možnost bude zahrnuta v imagi kontejneru. |
Vlastní kód | Ne, bodovací skript se automaticky vygeneruje pro snadné nasazení. | Ano, přineste svůj bodovací skript. | Ano, tato možnost bude zahrnuta v imagi kontejneru. |
Poznámka:
AutoML spustí automaticky bodovací skript a závislosti pro uživatele, takže můžete nasadit libovolný model AutoML bez vytváření dalšího kódu (pro nasazení bez kódu) nebo můžete upravit automaticky generované skripty pro potřeby vaší firmy (pro nasazení s minimem kódu). Informace o nasazení pomocí modelů AutoML najdete v tématu Nasazení modelu AutoML s online koncovým bodem.
Ladění online koncových bodů
Azure Machine Učení poskytuje různé způsoby, jak ladit online koncové body místně a pomocí protokolů kontejnerů.
Místní ladění pomocí počítače Azure Učení odvozování serveru HTTP
Skript bodování můžete ladit místně pomocí počítače Azure Učení odvozování serveru HTTP. Server HTTP je balíček Pythonu, který zpřístupňuje funkci bodování jako koncový bod HTTP a zabalí kód serveru Flask a závislosti do jednotného balíčku. Je součástí předem připravených imagí Dockeru pro odvozování, které se používají při nasazování modelu se službou Azure Machine Učení. Pomocí samotného balíčku můžete model nasadit místně pro produkční prostředí a také snadno ověřit bodovací (vstupní) skript v místním vývojovém prostředí. Pokud dojde k potížím se skriptem bodování, server vrátí chybu a umístění, kde k chybě došlo. Visual Studio Code můžete také použít k ladění pomocí azure machine Učení odvozování serveru HTTP.
Další informace o ladění pomocí serveru HTTP najdete v tématu Ladění hodnoticí skript pomocí azure machine Učení odvozování serveru HTTP.
Místní ladění
Pro místní ladění potřebujete místní nasazení. To znamená model, který je nasazený do místního prostředí Dockeru. Toto místní nasazení můžete použít k testování a ladění před nasazením do cloudu. Pokud chcete nasadit místně, musíte mít nainstalovaný a spuštěný Modul Dockeru . Azure Machine Učení pak vytvoří místní image Dockeru, která napodobuje image azure machine Učení. Azure Machine Učení sestaví a spustí nasazení pro vás místně a uloží image do mezipaměti pro rychlé iterace.
Mezi kroky místního ladění obvykle patří:
- Kontrola úspěšného místního nasazení
- Vyvolání místního koncového bodu pro odvozování
- Kontrola výstupu operace vyvolání v protokolech
Další informace o místním ladění najdete v tématu Místní nasazení a ladění pomocí místních koncových bodů.
Místní ladění pomocí editoru Visual Studio Code (Preview)
Důležité
Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti.
Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
Stejně jako u místního ladění musíte mít nejprve nainstalovaný a spuštěný modul Dockeru a pak nasadit model do místního prostředí Dockeru. Jakmile budete mít místní nasazení, Azure Machine Učení místní koncové body používají vývojové kontejnery Dockeru a Visual Studio Code (vývojové kontejnery) k sestavení a konfiguraci místního prostředí ladění. S vývojovými kontejnery můžete využívat funkce editoru Visual Studio Code, jako je interaktivní ladění, z kontejneru Dockeru.
Další informace o interaktivním ladění online koncových bodů v editoru VS Code najdete v tématu Místní ladění online koncových bodů v editoru Visual Studio Code.
Ladění s využitím protokolů kontejneru
Pro nasazení nemůžete získat přímý přístup k virtuálnímu počítači, na kterém je model nasazený. Můžete ale získat protokoly z některých kontejnerů, které jsou na tomto virtuálním počítači spuštěné. Existují dva typy kontejnerů, ze které můžete protokoly získat:
- Server odvozování: Protokoly zahrnují protokol konzoly (ze serveru odvozování), který obsahuje výstup funkcí tisku/protokolování ze skriptu bodování (
score.py
kód). - Inicializátor úložiště: Protokoly obsahují informace o tom, jestli se data kódu a modelu úspěšně stáhla do kontejneru. Kontejner se spustí před spuštěním kontejneru serveru pro odvození.
Další informace o ladění pomocí protokolů kontejneru najdete v tématu Získání protokolů kontejneru.
Směrování provozu a zrcadlení do online nasazení
Vzpomeňte si, že jeden online koncový bod může mít více nasazení. Když koncový bod přijímá příchozí provoz (nebo požadavky), může směrovat procenta provozu do každého nasazení, jak se používá v nativní strategii nasazení s modrou/zelenou barvou. Může také zrcadlit (nebo kopírovat) provoz z jednoho nasazení do jiného, označovaného také jako zrcadlení provozu nebo stínování.
Směrování provozu pro modré/zelené nasazení
Modré/zelené nasazení je strategie nasazení, která umožňuje zavést nové nasazení (zelené nasazení) pro malou podmnožinu uživatelů nebo požadavků, než ho úplně zpřístupníte. Koncový bod může implementovat vyrovnávání zatížení, aby každému nasazení přidělil určité procento provozu, přičemž celkové přidělení napříč všemi nasazeními sčítá až 100 %.
Tip
Požadavek může obejít nakonfigurované vyrovnávání zatížení provozu zahrnutím hlavičky azureml-model-deployment
HTTP . Nastavte hodnotu hlavičky na název nasazení, do kterého se má požadavek směrovat.
Následující obrázek ukazuje nastavení v studio Azure Machine Learning pro přidělování provozu mezi modrým a zeleným nasazením.
Toto přidělení provozu směruje provoz, jak je znázorněno na následujícím obrázku, přičemž 10 % provozu přejde do zeleného nasazení a 90 % provozu přejde do modrého nasazení.
Zrcadlení provozu do online nasazení
Koncový bod může také zrcadlit (nebo kopírovat) provoz z jednoho nasazení do jiného nasazení. Zrcadlení provozu (označované také jako stínové testování) je užitečné, když chcete otestovat nové nasazení s produkčním provozem, aniž by to mělo vliv na výsledky, které zákazníci dostávají z existujících nasazení. Například při implementaci modrého/zeleného nasazení, kde se 100 % provozu směruje na modrou a 10 % se zrcadlí se zeleným nasazením, výsledky zrcadleného provozu do zeleného nasazení se nevrátí klientům, ale metriky a protokoly se zaznamenávají.
Informace o používání zrcadlení provozu najdete v tématu Sejf zavedení pro online koncové body.
Další možnosti online koncových bodů ve službě Azure Machine Učení
Ověřování a šifrování
- Ověřování: Klíče a tokeny azure machine Učení
- Spravovaná identita: Přiřazené uživatelem a přiřazený systém
- Ve výchozím nastavení ssl pro vyvolání koncového bodu
Automatické škálování
Automatické škálování automaticky spustí správné množství prostředků ke zvládnutí zatížení u vaší aplikace. Spravované koncové body podporují automatické škálování prostřednictvím integrace s funkcí automatického škálování služby Azure Monitor. Můžete nakonfigurovat škálování na základě metrik (například využití >procesoru 70 %), škálování na základě plánu (například pravidla škálování pro špičku pracovní doby) nebo kombinaci.
Informace o tom, jak nakonfigurovat automatické škálování, najdete v tématu Postup automatického škálování online koncových bodů.
Izolace spravované sítě
Při nasazování modelu ML do spravovaného online koncového bodu můžete zabezpečit komunikaci s online koncovým bodem pomocí privátních koncových bodů.
Zabezpečení příchozích žádostí o bodování a odchozí komunikace s pracovním prostorem a dalšími službami můžete nakonfigurovat samostatně. Příchozí komunikace používá privátní koncový bod pracovního prostoru Azure Machine Učení. Odchozí komunikace používá privátní koncové body vytvořené pro spravovanou virtuální síť pracovního prostoru.
Další informace najdete v tématu Izolace sítě se spravovanými online koncovými body.
Monitorování online koncových bodů a nasazení
Monitorování koncových bodů služby Azure Machine Učení je možné prostřednictvím integrace se službou Azure Monitor. Tato integrace umožňuje zobrazit metriky v grafech, konfigurovat výstrahy, dotazovat se z tabulek protokolů, používat application Přehledy k analýze událostí z kontejnerů uživatelů atd.
Metriky: Pomocí služby Azure Monitor můžete sledovat různé metriky koncových bodů, jako je latence požadavků, a přejít k podrobnostem na úrovni nasazení nebo stavu. Můžete také sledovat metriky na úrovni nasazení, jako je využití procesoru nebo GPU, a přejít k podrobnostem na úrovni instance. Azure Monitor umožňuje sledovat tyto metriky v grafech a nastavit řídicí panely a výstrahy pro další analýzu.
Protokoly: Odesílání metrik do pracovního prostoru služby Log Analytics, kde můžete dotazovat protokoly pomocí syntaxe dotazu Kusto. Metriky můžete také odesílat do účtu úložiště nebo do služby Event Hubs pro další zpracování. Kromě toho můžete použít vyhrazené tabulky protokolů pro události, přenosy a protokoly kontejnerů související s online koncovým bodem. Dotaz Kusto umožňuje složitou analýzu spojování více tabulek.
Application Insights: Kurátorovaná prostředí zahrnují integraci s Přehledy aplikace a při vytváření online nasazení ji můžete povolit nebo zakázat. Integrované metriky a protokoly se odesílají do Application Insights a k další analýze můžete použít její integrované funkce, jako jsou živé metriky, vyhledávání transakcí, selhání a výkon.
Další informace o monitorování najdete v tématu Monitorování online koncových bodů.
Injektáž tajných kódů v online nasazeních (Preview)
Injektáž tajných kódů v kontextu online nasazení je proces načítání tajných kódů (například klíčů rozhraní API) z úložišť tajných kódů a jejich vložení do kontejneru uživatele, který běží uvnitř online nasazení. Tajné kódy budou nakonec přístupné prostřednictvím proměnných prostředí, což zajistí bezpečný způsob, jak je využívat server pro odvozování, který spouští váš bodovací skript nebo zásobník odvozování, který přinášíte s přístupem nasazení BYOC (přineste si vlastní kontejner).
Tajné kódy můžete vkládat dvěma způsoby. Tajné kódy můžete vkládat sami, používat spravované identity nebo můžete použít funkci injektáže tajných kódů. Další informace o způsobech vkládání tajných kódů najdete v tématu Injektáž tajných kódů v online koncových bodech (Preview).
Další kroky
- Nasazení online koncových bodů pomocí Azure CLI a sady Python SDK
- Nasazení dávkových koncových bodů pomocí Azure CLI a sady Python SDK
- Použití izolace sítě se spravovanými online koncovými body
- Nasazení modelů pomocí REST
- Monitorování spravovaných online koncových bodů
- Zobrazení nákladů na spravované online koncové body
- Správa a navýšení kvót pro prostředky s využitím služby Azure Machine Learning.