YAML – YAML Ain't Markup Language
Čo je YAML?
YAML (YAML Ain’t Markup Language) je jazyk na serializáciu dát, ktorý ukladá štruktúrované údaje vo forme čitateľnej pre človeka aj pre stroj. Pôvodne skratka znamenala Yet Another Markup Language, neskôr sa zmenila na rekurzívny akronym zdôrazňujúci, že formát slúži na dáta, nie na dokumenty. V AI a IT praxi sa YAML používa predovšetkým na konfiguračné súbory.
Aktuálnou špecifikáciou je YAML 1.2 v revízii 1.2.2 z 1. októbra 2021. Táto verzia zosúlaďuje YAML s formátom JSON – každý platný JSON je zároveň platným YAML, takže prevod medzi oboma formátmi je priamočiary. Formát je nezávislý od programovacieho jazyka, parsery existujú v Pythone, Jave aj JavaScripte, a ten istý súbor tak číta viacero komponentov systému.
Syntax a formát YAML
Syntax YAML stojí na odsadení medzerami, dvojbodke pri pároch kľúč a hodnota a pomlčke pri položkách zoznamu, tabulátory formát nepovoľuje. Základnými stavebnými prvkami sú mapovania, sekvencie a skaláre, teda reťazce, čísla či logické hodnoty. Pre dlhšie texty, napríklad systémové prompty AI modelov, slúžia blokové viacriadkové reťazce. Súbor YAML nesie príponu .yaml alebo .yml – ide o ten istý formát, voľba prípony je vecou konvencie projektu.
Oproti JSON je zápis úspornejší a povoľuje komentáre, JSON zas býva jednoznačnejší pri strojovom prenose medzi službami. Práve jednoduchosť má odvrátenú stranu: YAML odvodzuje typ hodnoty implicitne, takže nekvótovaný reťazec sa môže zmeniť na iný typ – v špecifikácii 1.1 sa kód krajiny NO vyhodnotil ako logická hodnota false, čo je známy Norway problem. YAML 1.2 toto správanie v Core Schema odstránil, rozšírené parsery vrátane knižnice PyYAML však v predvolenom režime pracujú stále podľa starších pravidiel.
Pri načítaní YAML z nedôveryhodného zdroja siahni v Pythone po funkcii yaml.safe_load() – bežné načítanie dokáže zostaviť ľubovoľné objekty, čo je bezpečnostné riziko. Hodnoty, ktoré vyzerajú ako logické (no, off, yes) alebo ako čísla s vedúcou nulou, dávaj vždy do úvodzoviek.
Príklady použitia YAML v AI projektoch
YAML tvorí konfiguračnú vrstvu väčšiny nástrojov, s ktorými AI tímy pracujú. Kubernetes definuje želaný stav klastra v manifestoch YAML, Ansible v playbookoch a platformy ako GitLab v ňom opisujú CI/CD pipeline. Pri strojovom učení sa v ňom udržiavajú hyperparametre, cesty k datasetom a kroky tréningu – napríklad Kubeflow spúšťa pipeline zo súboru YAML a framework Hydra skladá konfigurácie experimentov z hierarchie súborov.
Prínos je najmä v tom, že konfigurácia žije oddelene od kódu. Zmenu učiacej rýchlosti alebo veľkosti dávky vidno v git diffe ako jeden riadok, čo uľahčuje reprodukovateľnosť experimentov. Odvrátenou stranou je, že chyba v odsadení alebo v nekvótovanej hodnote sa prejaví až pri behu pipeline, nie pri kompilácii.
Objem konfigurácie navyše rastie rýchlo a rozsiahle manifesty sa stávajú samostatnou vrstvou údržby, ktorú tímy validujú linterom v CI. Časť vývojárov preto pri jednoduchých konfiguráciách siaha po formátoch s explicitným typovaním, ako sú TOML alebo JSON; iné tímy zostávajú pri YAML pre čitateľnosť a podporu komentárov.
Zdroje k téme:
- YAML Language Development Team – YAML Ain’t Markup Language: https://yaml.org/
- IBM – What Is YAML?: https://www.ibm.com/think/topics/yaml
- HitchDev – The Norway Problem – why StrictYAML refuses to do implicit typing and so should you: https://hitchdev.com/strictyaml/why/implicit-typing-removed/
Uvedené informácie sú orientačné a môžu sa líšiť v závislosti od verzie, implementácie a prostredia.
Súvisiace články