index.html 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <meta name="description" content="Targeting SOTA TTS solutions.">
  7. <link rel="canonical" href="https://speech.fish.audio/finetune/">
  8. <link rel="prev" href="../install/">
  9. <link rel="next" href="../inference/">
  10. <link rel="alternate" href="./" hreflang="en">
  11. <link rel="alternate" href="../zh/finetune/" hreflang="zh">
  12. <link rel="alternate" href="../ja/finetune/" hreflang="ja">
  13. <link rel="alternate" href="../pt/finetune/" hreflang="pt">
  14. <link rel="alternate" href="../ko/finetune/" hreflang="ko">
  15. <link rel="alternate" href="../ar/finetune/" hreflang="ar">
  16. <link rel="icon" href="../assets/logo.svg">
  17. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.1">
  18. <title>Finetune - Fish Audio</title>
  19. <link rel="stylesheet" href="../assets/stylesheets/main.484c7ddc.min.css">
  20. <link rel="stylesheet" href="../assets/stylesheets/palette.ab4e12ef.min.css">
  21. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  22. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
  23. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  24. <link rel="stylesheet" href="../stylesheets/extra.css">
  25. <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
  26. </head>
  27. <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
  28. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  29. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  30. <label class="md-overlay" for="__drawer"></label>
  31. <div data-md-component="skip">
  32. <a href="#fine-tuning" class="md-skip">
  33. Skip to content
  34. </a>
  35. </div>
  36. <div data-md-component="announce">
  37. </div>
  38. <header class="md-header md-header--shadow" data-md-component="header">
  39. <nav class="md-header__inner md-grid" aria-label="Header">
  40. <a href="https://speech.fish.audio" title="Fish Audio" class="md-header__button md-logo" aria-label="Fish Audio" data-md-component="logo">
  41. <img src="../assets/logo.svg" alt="logo">
  42. </a>
  43. <label class="md-header__button md-icon" for="__drawer">
  44. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  45. </label>
  46. <div class="md-header__title" data-md-component="header-title">
  47. <div class="md-header__ellipsis">
  48. <div class="md-header__topic">
  49. <span class="md-ellipsis">
  50. Fish Audio
  51. </span>
  52. </div>
  53. <div class="md-header__topic" data-md-component="header-topic">
  54. <span class="md-ellipsis">
  55. Finetune
  56. </span>
  57. </div>
  58. </div>
  59. </div>
  60. <form class="md-header__option" data-md-component="palette">
  61. <input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
  62. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
  63. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg>
  64. </label>
  65. <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
  66. <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
  67. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  68. </label>
  69. <input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_2">
  70. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
  71. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  72. </label>
  73. </form>
  74. <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
  75. <div class="md-header__option">
  76. <div class="md-select">
  77. <button class="md-header__button md-icon" aria-label="Select language">
  78. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg>
  79. </button>
  80. <div class="md-select__inner">
  81. <ul class="md-select__list">
  82. <li class="md-select__item">
  83. <a href="./" hreflang="en" class="md-select__link">
  84. English
  85. </a>
  86. </li>
  87. <li class="md-select__item">
  88. <a href="../zh/finetune/" hreflang="zh" class="md-select__link">
  89. 简体中文
  90. </a>
  91. </li>
  92. <li class="md-select__item">
  93. <a href="../ja/finetune/" hreflang="ja" class="md-select__link">
  94. 日本語
  95. </a>
  96. </li>
  97. <li class="md-select__item">
  98. <a href="../pt/finetune/" hreflang="pt" class="md-select__link">
  99. Português (Brasil)
  100. </a>
  101. </li>
  102. <li class="md-select__item">
  103. <a href="../ko/finetune/" hreflang="ko" class="md-select__link">
  104. 한국어
  105. </a>
  106. </li>
  107. <li class="md-select__item">
  108. <a href="../ar/finetune/" hreflang="ar" class="md-select__link">
  109. العربية
  110. </a>
  111. </li>
  112. </ul>
  113. </div>
  114. </div>
  115. </div>
  116. <label class="md-header__button md-icon" for="__search">
  117. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  118. </label>
  119. <div class="md-search" data-md-component="search" role="dialog">
  120. <label class="md-search__overlay" for="__search"></label>
  121. <div class="md-search__inner" role="search">
  122. <form class="md-search__form" name="search">
  123. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
  124. <label class="md-search__icon md-icon" for="__search">
  125. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  126. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
  127. </label>
  128. <nav class="md-search__options" aria-label="Search">
  129. <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
  130. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
  131. </a>
  132. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  133. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
  134. </button>
  135. </nav>
  136. <div class="md-search__suggest" data-md-component="search-suggest"></div>
  137. </form>
  138. <div class="md-search__output">
  139. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  140. <div class="md-search-result" data-md-component="search-result">
  141. <div class="md-search-result__meta">
  142. Initializing search
  143. </div>
  144. <ol class="md-search-result__list" role="presentation"></ol>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. <div class="md-header__source">
  151. <a href="https://github.com/fishaudio/fish-speech" title="Go to repository" class="md-source" data-md-component="source">
  152. <div class="md-source__icon md-icon">
  153. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
  154. </div>
  155. <div class="md-source__repository">
  156. fishaudio/fish-speech
  157. </div>
  158. </a>
  159. </div>
  160. </nav>
  161. </header>
  162. <div class="md-container" data-md-component="container">
  163. <main class="md-main" data-md-component="main">
  164. <div class="md-main__inner md-grid">
  165. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  166. <div class="md-sidebar__scrollwrap">
  167. <div class="md-sidebar__inner">
  168. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  169. <label class="md-nav__title" for="__drawer">
  170. <a href="https://speech.fish.audio" title="Fish Audio" class="md-nav__button md-logo" aria-label="Fish Audio" data-md-component="logo">
  171. <img src="../assets/logo.svg" alt="logo">
  172. </a>
  173. Fish Audio
  174. </label>
  175. <div class="md-nav__source">
  176. <a href="https://github.com/fishaudio/fish-speech" title="Go to repository" class="md-source" data-md-component="source">
  177. <div class="md-source__icon md-icon">
  178. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4"/></svg>
  179. </div>
  180. <div class="md-source__repository">
  181. fishaudio/fish-speech
  182. </div>
  183. </a>
  184. </div>
  185. <ul class="md-nav__list" data-md-scrollfix>
  186. <li class="md-nav__item">
  187. <a href=".." class="md-nav__link">
  188. <span class="md-ellipsis">
  189. Introduction
  190. </span>
  191. </a>
  192. </li>
  193. <li class="md-nav__item">
  194. <a href="../install/" class="md-nav__link">
  195. <span class="md-ellipsis">
  196. Installation
  197. </span>
  198. </a>
  199. </li>
  200. <li class="md-nav__item md-nav__item--active">
  201. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  202. <label class="md-nav__link md-nav__link--active" for="__toc">
  203. <span class="md-ellipsis">
  204. Finetune
  205. </span>
  206. <span class="md-nav__icon md-icon"></span>
  207. </label>
  208. <a href="./" class="md-nav__link md-nav__link--active">
  209. <span class="md-ellipsis">
  210. Finetune
  211. </span>
  212. </a>
  213. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  214. <label class="md-nav__title" for="__toc">
  215. <span class="md-nav__icon md-icon"></span>
  216. Table of contents
  217. </label>
  218. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  219. <li class="md-nav__item">
  220. <a href="#fine-tuning-llama" class="md-nav__link">
  221. <span class="md-ellipsis">
  222. Fine-tuning LLAMA
  223. </span>
  224. </a>
  225. <nav class="md-nav" aria-label="Fine-tuning LLAMA">
  226. <ul class="md-nav__list">
  227. <li class="md-nav__item">
  228. <a href="#1-prepare-the-dataset" class="md-nav__link">
  229. <span class="md-ellipsis">
  230. 1. Prepare the dataset
  231. </span>
  232. </a>
  233. </li>
  234. <li class="md-nav__item">
  235. <a href="#2-batch-extraction-of-semantic-tokens" class="md-nav__link">
  236. <span class="md-ellipsis">
  237. 2. Batch extraction of semantic tokens
  238. </span>
  239. </a>
  240. </li>
  241. <li class="md-nav__item">
  242. <a href="#3-pack-the-dataset-into-protobuf" class="md-nav__link">
  243. <span class="md-ellipsis">
  244. 3. Pack the dataset into protobuf
  245. </span>
  246. </a>
  247. </li>
  248. <li class="md-nav__item">
  249. <a href="#4-finally-fine-tuning-with-lora" class="md-nav__link">
  250. <span class="md-ellipsis">
  251. 4. Finally, fine-tuning with LoRA
  252. </span>
  253. </a>
  254. </li>
  255. </ul>
  256. </nav>
  257. </li>
  258. </ul>
  259. </nav>
  260. </li>
  261. <li class="md-nav__item">
  262. <a href="../inference/" class="md-nav__link">
  263. <span class="md-ellipsis">
  264. Inference
  265. </span>
  266. </a>
  267. </li>
  268. <li class="md-nav__item">
  269. <a href="../server/" class="md-nav__link">
  270. <span class="md-ellipsis">
  271. Server
  272. </span>
  273. </a>
  274. </li>
  275. <li class="md-nav__item">
  276. <a href="../en/samples.md" class="md-nav__link">
  277. <span class="md-ellipsis">
  278. Samples
  279. </span>
  280. </a>
  281. </li>
  282. </ul>
  283. </nav>
  284. </div>
  285. </div>
  286. </div>
  287. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  288. <div class="md-sidebar__scrollwrap">
  289. <div class="md-sidebar__inner">
  290. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  291. <label class="md-nav__title" for="__toc">
  292. <span class="md-nav__icon md-icon"></span>
  293. Table of contents
  294. </label>
  295. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  296. <li class="md-nav__item">
  297. <a href="#fine-tuning-llama" class="md-nav__link">
  298. <span class="md-ellipsis">
  299. Fine-tuning LLAMA
  300. </span>
  301. </a>
  302. <nav class="md-nav" aria-label="Fine-tuning LLAMA">
  303. <ul class="md-nav__list">
  304. <li class="md-nav__item">
  305. <a href="#1-prepare-the-dataset" class="md-nav__link">
  306. <span class="md-ellipsis">
  307. 1. Prepare the dataset
  308. </span>
  309. </a>
  310. </li>
  311. <li class="md-nav__item">
  312. <a href="#2-batch-extraction-of-semantic-tokens" class="md-nav__link">
  313. <span class="md-ellipsis">
  314. 2. Batch extraction of semantic tokens
  315. </span>
  316. </a>
  317. </li>
  318. <li class="md-nav__item">
  319. <a href="#3-pack-the-dataset-into-protobuf" class="md-nav__link">
  320. <span class="md-ellipsis">
  321. 3. Pack the dataset into protobuf
  322. </span>
  323. </a>
  324. </li>
  325. <li class="md-nav__item">
  326. <a href="#4-finally-fine-tuning-with-lora" class="md-nav__link">
  327. <span class="md-ellipsis">
  328. 4. Finally, fine-tuning with LoRA
  329. </span>
  330. </a>
  331. </li>
  332. </ul>
  333. </nav>
  334. </li>
  335. </ul>
  336. </nav>
  337. </div>
  338. </div>
  339. </div>
  340. <div class="md-content" data-md-component="content">
  341. <article class="md-content__inner md-typeset">
  342. <a href="https://github.com/fishaudio/fish-speech/blob/main/docs/en/finetune.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
  343. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
  344. </a>
  345. <a href="https://github.com/fishaudio/fish-speech/raw/main/docs/en/finetune.md" title="View source of this page" class="md-content__button md-icon">
  346. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
  347. </a>
  348. <h1 id="fine-tuning">Fine-tuning</h1>
  349. <div class="admonition warning">
  350. <p class="admonition-title">Warning</p>
  351. <p>We highly do note recoomand users to do fine-tuning on an RL trained model. Fine-tuning a model after RL can shift the model distribution, which may lead to degraded performance.</p>
  352. </div>
  353. <p>In the current version, you only need to finetune the 'LLAMA' part.</p>
  354. <h2 id="fine-tuning-llama">Fine-tuning LLAMA</h2>
  355. <h3 id="1-prepare-the-dataset">1. Prepare the dataset</h3>
  356. <div class="language-text highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>.
  357. </span><span id="__span-0-2"><a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>├── SPK1
  358. </span><span id="__span-0-3"><a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a>│ ├── 21.15-26.44.lab
  359. </span><span id="__span-0-4"><a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a>│ ├── 21.15-26.44.mp3
  360. </span><span id="__span-0-5"><a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a>│ ├── 27.51-29.98.lab
  361. </span><span id="__span-0-6"><a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>│ ├── 27.51-29.98.mp3
  362. </span><span id="__span-0-7"><a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a>│ ├── 30.1-32.71.lab
  363. </span><span id="__span-0-8"><a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a>│ └── 30.1-32.71.mp3
  364. </span><span id="__span-0-9"><a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a>└── SPK2
  365. </span><span id="__span-0-10"><a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a> ├── 38.79-40.85.lab
  366. </span><span id="__span-0-11"><a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a> └── 38.79-40.85.mp3
  367. </span></code></pre></div>
  368. <p>You need to convert your dataset into the above format and place it under <code>data</code>. The audio file can have the extensions <code>.mp3</code>, <code>.wav</code>, or <code>.flac</code>, and the annotation file should have the extension <code>.lab</code>.</p>
  369. <div class="admonition info">
  370. <p class="admonition-title">Info</p>
  371. <p>The <code>.lab</code> annotation file only needs to contain the transcription of the audio, with no special formatting required. For example, if <code>hi.mp3</code> says "Hello, goodbye," then the <code>hi.lab</code> file would contain a single line of text: "Hello, goodbye."</p>
  372. </div>
  373. <div class="admonition warning">
  374. <p class="admonition-title">Warning</p>
  375. <p>It's recommended to apply loudness normalization to the dataset. You can use <a href="https://github.com/fishaudio/audio-preprocess">fish-audio-preprocess</a> to do this.</p>
  376. <div class="language-bash highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>fap<span class="w"> </span>loudness-norm<span class="w"> </span>data-raw<span class="w"> </span>data<span class="w"> </span>--clean
  377. </span></code></pre></div>
  378. </div>
  379. <h3 id="2-batch-extraction-of-semantic-tokens">2. Batch extraction of semantic tokens</h3>
  380. <p>Make sure you have downloaded the VQGAN weights. If not, run the following command:</p>
  381. <div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>huggingface-cli<span class="w"> </span>download<span class="w"> </span>fishaudio/openaudio-s1-mini<span class="w"> </span>--local-dir<span class="w"> </span>checkpoints/openaudio-s1-mini
  382. </span></code></pre></div>
  383. <p>You can then run the following command to extract semantic tokens:</p>
  384. <div class="language-bash highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>python<span class="w"> </span>tools/vqgan/extract_vq.py<span class="w"> </span>data<span class="w"> </span><span class="se">\</span>
  385. </span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a><span class="w"> </span>--num-workers<span class="w"> </span><span class="m">1</span><span class="w"> </span>--batch-size<span class="w"> </span><span class="m">16</span><span class="w"> </span><span class="se">\</span>
  386. </span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a><span class="w"> </span>--config-name<span class="w"> </span><span class="s2">&quot;modded_dac_vq&quot;</span><span class="w"> </span><span class="se">\</span>
  387. </span><span id="__span-3-4"><a id="__codelineno-3-4" name="__codelineno-3-4" href="#__codelineno-3-4"></a><span class="w"> </span>--checkpoint-path<span class="w"> </span><span class="s2">&quot;checkpoints/openaudio-s1-mini/codec.pth&quot;</span>
  388. </span></code></pre></div>
  389. <div class="admonition note">
  390. <p class="admonition-title">Note</p>
  391. <p>You can adjust <code>--num-workers</code> and <code>--batch-size</code> to increase extraction speed, but please make sure not to exceed your GPU memory limit.</p>
  392. </div>
  393. <p>This command will create <code>.npy</code> files in the <code>data</code> directory, as shown below:</p>
  394. <div class="language-text highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>.
  395. </span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>├── SPK1
  396. </span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>│ ├── 21.15-26.44.lab
  397. </span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a>│ ├── 21.15-26.44.mp3
  398. </span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>│ ├── 21.15-26.44.npy
  399. </span><span id="__span-4-6"><a id="__codelineno-4-6" name="__codelineno-4-6" href="#__codelineno-4-6"></a>│ ├── 27.51-29.98.lab
  400. </span><span id="__span-4-7"><a id="__codelineno-4-7" name="__codelineno-4-7" href="#__codelineno-4-7"></a>│ ├── 27.51-29.98.mp3
  401. </span><span id="__span-4-8"><a id="__codelineno-4-8" name="__codelineno-4-8" href="#__codelineno-4-8"></a>│ ├── 27.51-29.98.npy
  402. </span><span id="__span-4-9"><a id="__codelineno-4-9" name="__codelineno-4-9" href="#__codelineno-4-9"></a>│ ├── 30.1-32.71.lab
  403. </span><span id="__span-4-10"><a id="__codelineno-4-10" name="__codelineno-4-10" href="#__codelineno-4-10"></a>│ ├── 30.1-32.71.mp3
  404. </span><span id="__span-4-11"><a id="__codelineno-4-11" name="__codelineno-4-11" href="#__codelineno-4-11"></a>│ └── 30.1-32.71.npy
  405. </span><span id="__span-4-12"><a id="__codelineno-4-12" name="__codelineno-4-12" href="#__codelineno-4-12"></a>└── SPK2
  406. </span><span id="__span-4-13"><a id="__codelineno-4-13" name="__codelineno-4-13" href="#__codelineno-4-13"></a> ├── 38.79-40.85.lab
  407. </span><span id="__span-4-14"><a id="__codelineno-4-14" name="__codelineno-4-14" href="#__codelineno-4-14"></a> ├── 38.79-40.85.mp3
  408. </span><span id="__span-4-15"><a id="__codelineno-4-15" name="__codelineno-4-15" href="#__codelineno-4-15"></a> └── 38.79-40.85.npy
  409. </span></code></pre></div>
  410. <h3 id="3-pack-the-dataset-into-protobuf">3. Pack the dataset into protobuf</h3>
  411. <div class="language-bash highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>python<span class="w"> </span>tools/llama/build_dataset.py<span class="w"> </span><span class="se">\</span>
  412. </span><span id="__span-5-2"><a id="__codelineno-5-2" name="__codelineno-5-2" href="#__codelineno-5-2"></a><span class="w"> </span>--input<span class="w"> </span><span class="s2">&quot;data&quot;</span><span class="w"> </span><span class="se">\</span>
  413. </span><span id="__span-5-3"><a id="__codelineno-5-3" name="__codelineno-5-3" href="#__codelineno-5-3"></a><span class="w"> </span>--output<span class="w"> </span><span class="s2">&quot;data/protos&quot;</span><span class="w"> </span><span class="se">\</span>
  414. </span><span id="__span-5-4"><a id="__codelineno-5-4" name="__codelineno-5-4" href="#__codelineno-5-4"></a><span class="w"> </span>--text-extension<span class="w"> </span>.lab<span class="w"> </span><span class="se">\</span>
  415. </span><span id="__span-5-5"><a id="__codelineno-5-5" name="__codelineno-5-5" href="#__codelineno-5-5"></a><span class="w"> </span>--num-workers<span class="w"> </span><span class="m">16</span>
  416. </span></code></pre></div>
  417. <p>After the command finishes executing, you should see the <code>protos</code> file in the <code>data</code> directory.</p>
  418. <h3 id="4-finally-fine-tuning-with-lora">4. Finally, fine-tuning with LoRA</h3>
  419. <p>Similarly, make sure you have downloaded the <code>LLAMA</code> weights. If not, run the following command:</p>
  420. <div class="language-bash highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>huggingface-cli<span class="w"> </span>download<span class="w"> </span>fishaudio/openaudio-s1-mini<span class="w"> </span>--local-dir<span class="w"> </span>checkpoints/openaudio-s1-mini
  421. </span></code></pre></div>
  422. <p>Finally, you can start the fine-tuning by running the following command:</p>
  423. <div class="language-bash highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>python<span class="w"> </span>fish_speech/train.py<span class="w"> </span>--config-name<span class="w"> </span>text2semantic_finetune<span class="w"> </span><span class="se">\</span>
  424. </span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a><span class="w"> </span><span class="nv">project</span><span class="o">=</span><span class="nv">$project</span><span class="w"> </span><span class="se">\</span>
  425. </span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a><span class="w"> </span>+lora@model.model.lora_config<span class="o">=</span>r_8_alpha_16
  426. </span></code></pre></div>
  427. <div class="admonition note">
  428. <p class="admonition-title">Note</p>
  429. <p>You can modify the training parameters such as <code>batch_size</code>, <code>gradient_accumulation_steps</code>, etc. to fit your GPU memory by modifying <code>fish_speech/configs/text2semantic_finetune.yaml</code>.</p>
  430. </div>
  431. <div class="admonition note">
  432. <p class="admonition-title">Note</p>
  433. <p>For Windows users, you can use <code>trainer.strategy.process_group_backend=gloo</code> to avoid <code>nccl</code> issues.</p>
  434. </div>
  435. <p>After training is complete, you can refer to the <a href="../inference/">inference</a> section to test your model.</p>
  436. <div class="admonition info">
  437. <p class="admonition-title">Info</p>
  438. <p>By default, the model will only learn the speaker's speech patterns and not the timbre. You still need to use prompts to ensure timbre stability.
  439. If you want to learn the timbre, you can increase the number of training steps, but this may lead to overfitting.</p>
  440. </div>
  441. <p>After training, you need to convert the LoRA weights to regular weights before performing inference.</p>
  442. <div class="language-bash highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a>python<span class="w"> </span>tools/llama/merge_lora.py<span class="w"> </span><span class="se">\</span>
  443. </span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a><span class="w"> </span>--lora-config<span class="w"> </span>r_8_alpha_16<span class="w"> </span><span class="se">\</span>
  444. </span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a><span class="w"> </span>--base-weight<span class="w"> </span>checkpoints/openaudio-s1-mini<span class="w"> </span><span class="se">\</span>
  445. </span><span id="__span-8-4"><a id="__codelineno-8-4" name="__codelineno-8-4" href="#__codelineno-8-4"></a><span class="w"> </span>--lora-weight<span class="w"> </span>results/<span class="nv">$project</span>/checkpoints/step_000000010.ckpt<span class="w"> </span><span class="se">\</span>
  446. </span><span id="__span-8-5"><a id="__codelineno-8-5" name="__codelineno-8-5" href="#__codelineno-8-5"></a><span class="w"> </span>--output<span class="w"> </span>checkpoints/openaudio-s1-mini-yth-lora/
  447. </span></code></pre></div>
  448. <div class="admonition note">
  449. <p class="admonition-title">Note</p>
  450. <p>You may also try other checkpoints. We suggest using the earliest checkpoint that meets your requirements, as they often perform better on out-of-distribution (OOD) data.</p>
  451. </div>
  452. </article>
  453. </div>
  454. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  455. </div>
  456. </main>
  457. <footer class="md-footer">
  458. <nav class="md-footer__inner md-grid" aria-label="Footer" >
  459. <a href="../install/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Installation">
  460. <div class="md-footer__button md-icon">
  461. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
  462. </div>
  463. <div class="md-footer__title">
  464. <span class="md-footer__direction">
  465. Previous
  466. </span>
  467. <div class="md-ellipsis">
  468. Installation
  469. </div>
  470. </div>
  471. </a>
  472. <a href="../inference/" class="md-footer__link md-footer__link--next" aria-label="Next: Inference">
  473. <div class="md-footer__title">
  474. <span class="md-footer__direction">
  475. Next
  476. </span>
  477. <div class="md-ellipsis">
  478. Inference
  479. </div>
  480. </div>
  481. <div class="md-footer__button md-icon">
  482. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
  483. </div>
  484. </a>
  485. </nav>
  486. <div class="md-footer-meta md-typeset">
  487. <div class="md-footer-meta__inner md-grid">
  488. <div class="md-copyright">
  489. <div class="md-copyright__highlight">
  490. Copyright &copy; 2023-2025 by Fish Audio
  491. </div>
  492. Made with
  493. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  494. Material for MkDocs
  495. </a>
  496. </div>
  497. <div class="md-social">
  498. <a href="https://discord.gg/Es5qTB9BcN" target="_blank" rel="noopener" title="discord.gg" class="md-social__link">
  499. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg>
  500. </a>
  501. <a href="https://hub.docker.com/r/fishaudio/fish-speech" target="_blank" rel="noopener" title="hub.docker.com" class="md-social__link">
  502. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M349.9 236.3h-66.1v-59.4h66.1zm0-204.3h-66.1v60.7h66.1zm78.2 144.8H362v59.4h66.1zm-156.3-72.1h-66.1v60.1h66.1zm78.1 0h-66.1v60.1h66.1zm276.8 100c-14.4-9.7-47.6-13.2-73.1-8.4-3.3-24-16.7-44.9-41.1-63.7l-14-9.3-9.3 14c-18.4 27.8-23.4 73.6-3.7 103.8-8.7 4.7-25.8 11.1-48.4 10.7H2.4c-8.7 50.8 5.8 116.8 44 162.1 37.1 43.9 92.7 66.2 165.4 66.2 157.4 0 273.9-72.5 328.4-204.2 21.4.4 67.6.1 91.3-45.2 1.5-2.5 6.6-13.2 8.5-17.1zm-511.1-27.9h-66v59.4h66.1v-59.4zm78.1 0h-66.1v59.4h66.1zm78.1 0h-66.1v59.4h66.1zm-78.1-72.1h-66.1v60.1h66.1z"/></svg>
  503. </a>
  504. <a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=jCKlUP7QgSm9kh95UlBoYv6s1I-Apl1M&authKey=xI5ttVAp3do68IpEYEalwXSYZFdfxZSkah%2BctF5FIMyN2NqAa003vFtLqJyAVRfF&noverify=0&group_code=593946093" target="_blank" rel="noopener" title="qm.qq.com" class="md-social__link">
  505. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M434.1 420.4c-11.5 1.4-44.9-52.7-44.9-52.7 0 31.3-16.1 72.2-51 101.8 16.8 5.2 54.8 19.2 45.8 34.4-7.3 12.3-125.5 7.9-159.6 4-34.1 3.8-152.3 8.3-159.6-4-9-15.2 28.9-29.2 45.8-34.4-34.9-29.5-51.1-70.4-51.1-101.8 0 0-33.3 54.1-44.9 52.7-5.4-.6-12.4-29.6 9.3-99.7 10.3-33 22-60.5 40.1-105.8C60.9 98 109.2-.1 224.3-.1 338-.1 387.5 96 384.6 214.9c18.1 45.2 29.9 72.9 40.1 105.8 21.8 70.1 14.7 99.1 9.3 99.7z"/></svg>
  506. </a>
  507. </div>
  508. </div>
  509. </div>
  510. </footer>
  511. </div>
  512. <div class="md-dialog" data-md-component="dialog">
  513. <div class="md-dialog__inner md-typeset"></div>
  514. </div>
  515. <script id="__config" type="application/json">{"annotate": null, "base": "..", "features": ["content.action.edit", "content.action.view", "navigation.tracking", "navigation.footer", "search", "search.suggest", "search.highlight", "search.share", "content.code.copy"], "search": "../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
  516. <script src="../assets/javascripts/bundle.79ae519e.min.js"></script>
  517. </body>
  518. </html>