Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Důležité
Témata na této stránce jsou relevantní pouze pro scénáře odvozování dávek, které nepoužívají základní modely Databricks optimalizované pro scénáře odvozování dávek. Viz Použijte umělou inteligenci na data pomocí Azure Databricks AI Functions.
Tato stránka popisuje, jak provádět dávkové odvozování datového rámce Sparku pomocí registrovaného modelu v Databricks. Pracovní postup se vztahuje na různé modely strojového učení a hlubokého učení, včetně TensorFlow, PyTorch a scikit-learn. Obsahuje osvědčené postupy pro načítání dat, odvozování modelů a ladění výkonu.
Pro odvozování modelů pro aplikace hlubokého učení doporučuje Azure Databricks následující pracovní postup. Například poznámkové bloky, které používají TensorFlow a PyTorch, najdete v příkladech batchového inferencí .
Pracovní postup odvozování modelů
Databricks doporučuje následující pracovní postup pro provádění dávkových odvozování pomocí datových rámců Spark.
Krok 1: Nastavení prostředí
Ujistěte se, že váš cluster používá kompatibilní verzi modulu runtime Databricks ML tak, aby odpovídala trénovacímu prostředí. Model protokolovaný pomocí MLflow obsahuje požadavky, které je možné nainstalovat, aby se zajistilo, že se prostředí trénování a odvozování shodují.
requirements_path = os.path.join(local_path, "requirements.txt")
if not os.path.exists(requirements_path):
dbutils.fs.put("file:" + requirements_path, "", True)
%pip install -r $requirements_path
%restart_python
Krok 2: Načtení dat do datových rámců Sparku
V závislosti na datovém typu použijte k načtení dat do datového rámce Sparku příslušnou metodu:
| Datový typ | Metoda |
|---|---|
| Tabulka z katalogu Unity (doporučeno) | table = spark.table(input_table_name) |
| Soubory obrázků (JPG, PNG) | files_df = spark.createDataFrame(map(lambda path: (path,), file_paths), ["path"]) |
| Záznamy TF | df = spark.read.format("tfrecords").load(image_path) |
| Jiné formáty (Parquet, CSV, JSON, JDBC) | Načítání pomocí Spark datových zdrojů. |
Krok 3: Načtení modelu z registru modelů
V tomto příkladu se k odvozování používá model z registru modelů Databricks.
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Krok 4: Provedení inference modelu pomocí pandas UDF
Funkce UDF pandas využívají Apache Arrow k efektivnímu přenosu dat a knihovně pandas ke zpracování. Typické kroky pro výpočet pomocí funkcí definovaných uživatelem v pandas jsou:
- Načtěte natrénovaný model: Pomocí MLflow vytvořte UDF Sparku pro odvozování.
- Předběžné zpracování vstupních dat: Ujistěte se, že vstupní schéma odpovídá požadavkům modelu.
- Spustit predikci modelu: Použijte UDF funkci modelu na DataFrame.
df_result = df_spark.withColumn("prediction", predict_udf(*df_spark.columns))
- (Doporučeno) Uložte předpovědi do katalogu Unity.
Následující příklad ukládá předpovědi do katalogu Unity.
df_result.write.mode("overwrite").saveAsTable(output_table)
Ladění výkonu pro odvozování modelů
Tato část obsahuje několik tipů pro ladění a optimalizaci výkonu pro inference modelu v Azure Databricks. Přehled najdete v tématu Provedení dávkového odvozování pomocí datového rámce Spark.
Obvykle existují dvě hlavní části odvozování modelu: kanál vstupu dat a odvozování modelů. Vstupní datový kanál je náročný na vstupně-výstupní vstup a odvozování modelů je náročné na výpočet. Určení kritického bodu pracovního postupu je jednoduché. Tady je několik přístupů:
- Snižte model na triviální model a změřte příklady za sekundu. Pokud je rozdíl celkového času průběhu mezi úplným modelem a triviálním modelem minimální, pak je zpracování vstupu dat pravděpodobně kritickým bodem, jinak je kritickým bodem inference modelu.
- Pokud spouštíte odvozování modelu pomocí GPU, zkontrolujte metriky využití GPU . Pokud využití GPU není nepřetržitě vysoké, může být úzkým hrdlem datový vstupní kanál.
Optimalizace kanálu vstupu dat
Použití GRAFICKÝch procesorů může efektivně optimalizovat rychlost spouštění pro odvozování modelů. S tím, jak se GPU a další akcelerátory stávají rychlejšími, je důležité, aby datový vstupní kanál držel krok s poptávkou. Vstupní kanál dat načte data do datových rámců Sparku, transformuje je a načte jako vstup pro odvozování modelu. Pokud je vstupní data kritickým bodem, tady je několik tipů pro zvýšení propustnosti vstupně-výstupních operací:
Nastavte maximální počet záznamů na dávku. Větší maximální počet záznamů může snížit režijní náklady na vstupně-výstupní operace volání funkce UDF, za předpokladu, že se záznamy vejdou do paměti. Pokud chcete nastavit velikost dávky, nastavte následující konfiguraci:
spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")Načtěte data v dávkách a připravte je předem na předběžné zpracování vstupních dat v panda UDF.
Pro TensorFlow doporučuje Azure Databricks používat tf.data API. Mapu můžete parsovat paralelně nastavením
num_parallel_callsve funkcimapa volánímprefetchabatchpro předběžné načtení a dávkování.dataset.map(parse_example, num_parallel_calls=num_process).prefetch(prefetch_size).batch(batch_size)Pro PyTorch azure Databricks doporučuje používat třídu DataLoader. Můžete nastavit
batch_sizepro dávkování anum_workerspro paralelní načítání dat.torch.utils.data.DataLoader(images, batch_size=batch_size, num_workers=num_process)
Příklady dávkové inferenční úlohy
Příklady v této části se řídí doporučeným pracovním postupem odvození hlubokého učení. Tyto příklady ukazují, jak provádět odvozování modelů pomocí předem natrénovaného modelu neuronové sítě s hlubokými zbytkovými sítěmi (ResNets).
Extrakce strukturovaných dat a dávkové odvozování pomocí UDF Sparku
Následující ukázkový poznámkový blok ukazuje vývoj, protokolování a vyhodnocení jednoduchého agenta pro extrakci strukturovaných dat k transformaci nezpracovaných, nestrukturovaných dat do uspořádaných a použitelných informací prostřednictvím automatizovaných technik extrakce. Tento přístup ukazuje, jak implementovat vlastní agenty pro dávkové odvozování pomocí třídy PythonModel MLflow a použít model protokolovaného agenta jako funkci spark User-Defined (UDF). Tento poznámkový blok také ukazuje, jak využít hodnocení agenta Mosaic AI k vyhodnocení přesnosti s použitím referenčních dat.