<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Hydra Blog</title>
        <link>https://hydra.cc/blog/</link>
        <description>Hydra Blog</description>
        <lastBuildDate>Wed, 18 May 2022 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Hydra 1.2]]></title>
            <link>https://hydra.cc/blog/2022/05/18/Hydra_1.2/</link>
            <guid>https://hydra.cc/blog/2022/05/18/Hydra_1.2/</guid>
            <pubDate>Wed, 18 May 2022 00:00:00 GMT</pubDate>
            <description><![CDATA[After many months and a lot of hard work by many people, Hydra 1.2 is released!]]></description>
            <content:encoded><![CDATA[<p align="center"><img src="https://hydra.cc/img/Hydra-Readme-logo2.svg" alt="logo" width="70%"></p>
<p>After many months and a lot of hard work by many people, Hydra 1.2 is released!
Hydra 1.2 comes with OmegaConf 2.2, which has its own share of improvements.</p>
<p>This blog post highlights some of the most prominent features, check the release notes for a complete list of changes:</p>
<ul>
<li class="">Hydra 1.2 <a href="https://github.com/facebookresearch/hydra/releases/tag/v1.2.0" target="_blank" rel="noopener noreferrer" class="">release notes</a></li>
<li class="">OmegaConf 2.2 <a href="https://github.com/omry/omegaconf/releases/tag/v2.2.1" target="_blank" rel="noopener noreferrer" class="">release notes</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="major-new-features-in-hydra-12">Major new features in Hydra 1.2<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#major-new-features-in-hydra-12" class="hash-link" aria-label="Direct link to Major new features in Hydra 1.2" title="Direct link to Major new features in Hydra 1.2" translate="no">​</a></h3>
<ul>
<li class="">Easier integration with existing systems<!-- -->
<ul>
<li class="">Support not changing working directory at runtime</li>
<li class="">Default to not implicitly adding directories to the config path</li>
</ul>
</li>
<li class="">Improved support for reproducible experiments<!-- -->
<ul>
<li class="">Support defining multirun mode and sweeping parameters through config</li>
<li class="">Improved callback support for logging / persisting job runs</li>
<li class="">A new <code>--experimental-rerun</code> option to reproduce persisted single runs</li>
</ul>
</li>
<li class="">Improved instantiate API functionality<!-- -->
<ul>
<li class="">Support for instances partially defined from config, via a <code>_partial_</code> keyword</li>
<li class="">Accept <code>ListConfig</code>/<code>list</code>-type config as top-level input</li>
</ul>
</li>
<li class="">Better alignment with ecosystem versions<!-- -->
<ul>
<li class="">Support for Python 3.10, and ANTLR 4.9</li>
</ul>
</li>
<li class="">OmegaConf 2.2:<!-- -->
<ul>
<li class="">More flexible type hints in structured configs</li>
<li class="">Native support for bytes and pathlib.Path</li>
</ul>
</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="object-instantiation-enhancements">Object instantiation enhancements<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#object-instantiation-enhancements" class="hash-link" aria-label="Direct link to Object instantiation enhancements" title="Direct link to Object instantiation enhancements" translate="no">​</a></h4>
<ul>
<li class="">Lists can now be passed directly to the instantiate API.
For example one can now do:</li>
</ul>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> hydra</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">utils </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> instantiate</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">lst </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">"_target_"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"pathlib.Path"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"_args_"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">"foo"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">"_target_"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"pathlib.Path"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"_args_"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">"bar"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">paths </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> instantiate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">lst</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">paths</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>Resulting in:</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python demo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">PosixPath</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'foo'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> PosixPath</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'bar'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></div></code></pre></div></div>
<ul>
<li class="">Instances can now be partially defined in config with the <code>_partial_</code> keyword.
Please see the <a class="" href="https://hydra.cc/docs/advanced/instantiate_objects/overview/#partial-instantiation">Instantiate API - Partial Instantiation</a> docs
for a detailed example.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="omegaconf-22-highlights">OmegaConf 2.2 highlights<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#omegaconf-22-highlights" class="hash-link" aria-label="Direct link to OmegaConf 2.2 highlights" title="Direct link to OmegaConf 2.2 highlights" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="more-flexible-type-hints-in-structured-configs">More flexible type hints in structured configs<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#more-flexible-type-hints-in-structured-configs" class="hash-link" aria-label="Direct link to More flexible type hints in structured configs" title="Direct link to More flexible type hints in structured configs" translate="no">​</a></h4>
<p>OmegaConf 2.2's structured configs support runtime type checking for an expanded set of type hints.
It is now possible to use nested container types (e.g. dict-of-dict or list-of-list),
unions of primitive types, and containers with optional element types.</p>
<p>Here is an example demonstrating these new capabilities:</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> dataclasses </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> dataclass</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> typing </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> Dict</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> List</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Optional</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Union</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> omegaconf </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> OmegaConf</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">@dataclass</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">DemoConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">int</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">bool</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    dict_of_union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Dict</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Union</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">int</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    list_of_dict</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> List</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">Dict</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">int</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">float</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    dict_of_optional</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> Dict</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Optional</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token builtin" style="color:rgb(130, 170, 255)">int</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">structured</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">"foo"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> DemoConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">foo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dict_of_union </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">"abc"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">123</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># ok</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">foo</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">dict_of_union </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">"abc"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">10.1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># raises ValidationError!</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Value '10.1' of type 'float' is incompatible with type hint 'Union[int, str]'</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="native-support-for-bytes-and-pathlibpath">Native support for bytes and pathlib.Path<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#native-support-for-bytes-and-pathlibpath" class="hash-link" aria-label="Direct link to Native support for bytes and pathlib.Path" title="Direct link to Native support for bytes and pathlib.Path" translate="no">​</a></h4>
<p>OmegaConf now supports binary data via Python's bytes type.</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">create</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token string" style="color:rgb(195, 232, 141)">b"binary_key"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">b"binary_value"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>In addition, OmegaConf now supports <code>pathlib.Path</code> instances as config values, easing workflows that involve the file system.</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">from</span><span class="token plain"> pathlib </span><span class="token keyword" style="font-style:italic">import</span><span class="token plain"> Path</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">my_homedir </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> Path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">home</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">assert</span><span class="token plain"> cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">my_homedir</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">is_dir</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<p>The <code>bytes</code> and <code>pathlib.Path</code> types can be used as type hints in structured config class definitions,
and configs containing binary and Path data can be round-tripped to/from yaml files via OmegaConf's save/load/to_yaml/create methods.</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">yaml_data </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">to_yaml</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg2 </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">create</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">yaml_data</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">assert</span><span class="token plain"> cfg2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token string" style="color:rgb(195, 232, 141)">b"binary_key"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">b"binary_value"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">assert</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">isinstance</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">my_homedir</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> Path</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="migrating-from-11">Migrating from 1.1<a href="https://hydra.cc/blog/2022/05/18/Hydra_1.2/#migrating-from-11" class="hash-link" aria-label="Direct link to Migrating from 1.1" title="Direct link to Migrating from 1.1" translate="no">​</a></h3>
<p>Hydra 1.2 is a major release. For most people, migrating from 1.1 to 1.2 will be smooth.
In addition, for this release we introduce support for more compatible upgrades
through the <a class="" href="https://hydra.cc/docs/upgrades/version_base/">version_base</a> mechanism.
New users are encouraged to use the latest defaults by setting <code>version_base=None</code> with <code>@hydra.main()</code> and <code>hydra.initialize()</code>,
while existing users have more control over what potentially incompatible changes are introduced when upgrading to Hydra 1.2.
Please see the "Behavior changes" section of the <a href="https://github.com/facebookresearch/hydra/releases/tag/v1.2.0" target="_blank" rel="noopener noreferrer" class="">Hydra 1.2 release notes</a> for details.
OmegaConf 2.2 also has some API changes and deprecations (not protected by version_base), detailed in its <a href="https://github.com/omry/omegaconf/releases/tag/v2.2.1" target="_blank" rel="noopener noreferrer" class="">release notes</a>.
Please feel free to reach out for <a class="" href="https://hydra.cc/docs/intro/#community">help</a> if you see a change in behavior that is not mentioned in the release notes.</p>
<p>That's it for now, take Hydra 1.2 for a spin!</p>]]></content:encoded>
            <category>Hydra</category>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[Hydra 1.1]]></title>
            <link>https://hydra.cc/blog/2021/06/13/Hydra_1.1/</link>
            <guid>https://hydra.cc/blog/2021/06/13/Hydra_1.1/</guid>
            <pubDate>Sun, 13 Jun 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[After many months and a lot of hard work by many people, Hydra 1.1 is finally out!]]></description>
            <content:encoded><![CDATA[<p align="center"><img src="https://hydra.cc/img/Hydra-Readme-logo2.svg" alt="logo" width="70%"></p>
<p>After many months and a lot of hard work by many people, Hydra 1.1 is finally out!<br>
<!-- -->Hydra 1.1 comes with OmegaConf 2.1, which has its own share of awesome new features.</p>
<p>This blog post highlights some of the most prominent features, check the release notes for a complete list of changes:</p>
<ul>
<li class="">Hydra 1.1 <a href="https://github.com/facebookresearch/hydra/releases/tag/v1.1.0" target="_blank" rel="noopener noreferrer" class="">release notes</a></li>
<li class="">OmegaConf 2.1 <a href="https://github.com/omry/omegaconf/releases/tag/v2.1.0" target="_blank" rel="noopener noreferrer" class="">release notes</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="major-new-features-in-hydra-11">Major new features in Hydra 1.1<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#major-new-features-in-hydra-11" class="hash-link" aria-label="Direct link to Major new features in Hydra 1.1" title="Direct link to Major new features in Hydra 1.1" translate="no">​</a></h3>
<ul>
<li class="">More powerful config composition<!-- -->
<ul>
<li class="">Every config can now have a Defaults List</li>
<li class="">Composition order of current config can be controlled via the <code>_self_</code> keyword in the Defaults List</li>
<li class="">Support for composing multiple configs from the same config group</li>
<li class="">Support for configuring the config search path from the primary config</li>
</ul>
</li>
<li class="">Recursive instantiation</li>
<li class="">Experimental callbacks support</li>
<li class="">OmegaConf 2.1:<!-- -->
<ul>
<li class="">Relative interpolations</li>
<li class="">New OmegaConf interpolation grammar supporting nested interpolations and much more</li>
<li class="">More powerful custom resolvers</li>
</ul>
</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="more-powerful-config-composition">More powerful config composition<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#more-powerful-config-composition" class="hash-link" aria-label="Direct link to More powerful config composition" title="Direct link to More powerful config composition" translate="no">​</a></h3>
<p>Config composition is the key area of improvement in Hydra 1.1.<br>
<!-- -->The biggest change is support for a Defaults List in any config, and not just the primary config.</p>
<p>This enables many new capabilities:</p>
<ul>
<li class="">Any config can now "extend" other configs. This enables config files to be associated with a Structured Config schema and to extend other config files</li>
<li class="">A top level "experiment config" can now override the Defaults List as well as config values</li>
<li class="">Complex frameworks can now have their own Defaults List, reducing boilerplate</li>
</ul>
<p>Other related changes include the ability to change the order a config is composed relative to config in its Defaults List by
adding <code>_self_</code> to the Defaults List and the ability to use multiple configs from the same config group.</p>
<p>Learn more:</p>
<ul>
<li class=""><a class="" href="https://hydra.cc/docs/advanced/defaults_list/">The Defaults List</a></li>
<li class=""><a class="" href="https://hydra.cc/docs/patterns/extending_configs/">Extending configs</a></li>
<li class=""><a class="" href="https://hydra.cc/docs/tutorials/structured_config/schema/">Structured Configs Schema</a></li>
<li class=""><a class="" href="https://hydra.cc/docs/patterns/configuring_experiments/">Configuring Experiments</a></li>
<li class=""><a class="" href="https://hydra.cc/docs/patterns/select_multiple_configs_from_config_group/">Select multiple configs from config group</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="object-instantiation-enhancements">Object instantiation enhancements<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#object-instantiation-enhancements" class="hash-link" aria-label="Direct link to Object instantiation enhancements" title="Direct link to Object instantiation enhancements" translate="no">​</a></h3>
<p><code>hydra.utils.instantiate()</code> now instantiates nested objects recursively.</p>
<p>Other enhancements include:</p>
<ul>
<li class="">Support for positional arguments via the <code>_args_</code> config key</li>
<li class="">Support for parameter conversion strategy was added via the <code>_convert_</code> config key</li>
</ul>
<p>Learn more <a class="" href="https://hydra.cc/docs/advanced/instantiate_objects/overview/">here</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="hydra-callbacks">Hydra callbacks<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#hydra-callbacks" class="hash-link" aria-label="Direct link to Hydra callbacks" title="Direct link to Hydra callbacks" translate="no">​</a></h3>
<p>A new experimental mechanism for user defined callbacks was added.
Callbacks enable user code to be executed automatically at various points in the lifecycle of your application.
There are many potential use cases for this, for example automatic registration with your
favorite experiment-tracking service.</p>
<p>Learn more <a class="" href="https://hydra.cc/docs/experimental/callbacks/">here</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="omegaconf-21-highlights">OmegaConf 2.1 highlights<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#omegaconf-21-highlights" class="hash-link" aria-label="Direct link to OmegaConf 2.1 highlights" title="Direct link to OmegaConf 2.1 highlights" translate="no">​</a></h3>
<p>OmegaConf 2.1 includes many enhancements, bug fixes, and performance improvements.</p>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="relative-interpolations">Relative interpolations<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#relative-interpolations" class="hash-link" aria-label="Direct link to Relative interpolations" title="Direct link to Relative interpolations" translate="no">​</a></h4>
<p>Relative interpolations enable accessing a config node relative to the node defining the interpolation:</p>
<div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token key atrule">x</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">y</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">20</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">x</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">    </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 10, absolute interpolation</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">.y</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 20, relative interpolation</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">c</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">..x</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 10, relative interpolation</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="nested-interpolations">Nested interpolations<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#nested-interpolations" class="hash-link" aria-label="Direct link to Nested interpolations" title="Direct link to Nested interpolations" translate="no">​</a></h4>
<p>OmegaConf 2.1 adds a new interpolation grammar supporting more sophisticated usage of interpolations.<br>
<!-- -->In the following example, the default value to use if the environment variable <code>DB_USER</code> does not exist is defined in the <code>default_user</code> config node:</p>
<div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token key atrule">default_user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> root</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db_user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> $</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">oc.env</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain">DB_USER</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">$</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">default_user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_AKxV" id="more-powerful-custom-resolvers">More powerful custom resolvers<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#more-powerful-custom-resolvers" class="hash-link" aria-label="Direct link to More powerful custom resolvers" title="Direct link to More powerful custom resolvers" translate="no">​</a></h4>
<p>OmegaConf custom resolvers can now access parent config node or the config root by defining
keyword parameters named <code>_parent_</code> and <code>_root_</code>.</p>
<p>In the example below, we use <code>_parent_</code> to implement a sum function that defaults to 0 if the node does not exist:</p>
<div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">sum</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">*</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> _parent_</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> _parent_</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">+</span><span class="token plain"> _parent_</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">register_new_resolver</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"sum"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">sum</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cfg </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> OmegaConf</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">create</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">"node"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token string" style="color:rgb(195, 232, 141)">"a"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token string" style="color:rgb(195, 232, 141)">"b"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token string" style="color:rgb(195, 232, 141)">"a_plus_b"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"${sum:a,b}"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token string" style="color:rgb(195, 232, 141)">"a_plus_z"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"${sum:a,z}"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">node</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">a_plus_b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 3</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">node</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">a_plus_z</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 1</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="other-notable-improvements">Other notable improvements<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#other-notable-improvements" class="hash-link" aria-label="Direct link to Other notable improvements" title="Direct link to Other notable improvements" translate="no">​</a></h3>
<ul>
<li class="">Config composition, especially for large configs - is significantly faster.</li>
<li class=""><code>OmegaConf.resolve(cfg)</code> can be used for in-place interpolation resolution on a config object</li>
<li class="">Improved compatibility of OmegaConf config objects with plain dict and list</li>
<li class="">Support for bracketed style (<code>foo.bar</code> is equivalent to <code>foo[bar]</code>), this covers interpolations and <code>OmegaConf.{update, select}</code> usage</li>
<li class="">PyDev.Debugger integration for easier debugging of config objects in PyCharm and VSCode</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="migrating-from-10">Migrating from 1.0<a href="https://hydra.cc/blog/2021/06/13/Hydra_1.1/#migrating-from-10" class="hash-link" aria-label="Direct link to Migrating from 1.0" title="Direct link to Migrating from 1.0" translate="no">​</a></h3>
<p>Hydra 1.1 is a major release. For most people, migrating from 1.0 to 1.1 will be smooth.
However, there are some breaking changes listed in the release notes of OmegaConf 2.1 and Hydra 1.1.
Most changes come with a deprecation warning pointing to a specific migration guide page.
Please feel free to reach out for <a class="" href="https://hydra.cc/docs/intro/#community">help</a> if you see a change in behavior that is not mentioned in the release notes.</p>
<p>That's it for now, take Hydra 1.1 for a spin!</p>]]></content:encoded>
            <category>Hydra</category>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[Hydra Ray Launcher]]></title>
            <link>https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/</link>
            <guid>https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/</guid>
            <pubDate>Tue, 22 Dec 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[We are happy to announce that we are adding a Ray Launcher to the Hydra Launchers family.]]></description>
            <content:encoded><![CDATA[<p>We are happy to announce that we are adding a <a href="https://hydra.cc/docs/plugins/ray_launcher" target="_blank" rel="noopener noreferrer" class="">Ray Launcher</a> to the Hydra Launchers family.
Hydra's Launcher plugins enable launching to different environments without changing your existing workflows or application code.
The Hydra Ray Launcher can be used to launch your application to a new or existing <a href="https://docs.ray.io/en/master/cluster/launcher.html" target="_blank" rel="noopener noreferrer" class="">Ray cluster</a>,
locally or on AWS. In this post we demonstrate the major functionalities of the Launcher.
For more details on installation and configuration, please check out the <a href="https://hydra.cc/docs/plugins/ray_launcher/" target="_blank" rel="noopener noreferrer" class="">Hydra Ray Launcher documentation</a>.
As always, please <a href="https://github.com/facebookresearch/hydra#community" target="_blank" rel="noopener noreferrer" class="">join our community</a> and give us feedback!</p>
<p><a href="https://github.com/ray-project/ray" target="_blank" rel="noopener noreferrer" class="">Ray</a> is a simple yet powerful Python library for parallel and distributed programming. Among the many features it provides, Ray comes with a
<a href="https://docs.ray.io/en/master/cluster/launcher.html#ref-automatic-cluster" target="_blank" rel="noopener noreferrer" class="">cluster launcher</a> that can be used to provision resources and start a Ray cluster on top of them.
Hydra Ray Launcher is built on top of the <a href="https://docs.ray.io/en/master/ray-overview/index.html#parallelizing-python-java-functions-with-ray-tasks" target="_blank" rel="noopener noreferrer" class="">Ray Tasks API</a> and the Ray cluster launcher.</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="launching-to-a-new-or-existing-aws-cluster">Launching to a new or existing AWS cluster<a href="https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/#launching-to-a-new-or-existing-aws-cluster" class="hash-link" aria-label="Direct link to Launching to a new or existing AWS cluster" title="Direct link to Launching to a new or existing AWS cluster" translate="no">​</a></h3>
<p>Hydra Ray Launcher simplifies your experience by allowing the Ray cluster setup to be
configured transparently by Hydra (eliminating the need for an external YAML file while maintaining
the flexibility). Hydra Ray Launcher comes with reasonable default configurations which can be found
<a href="https://hydra.cc/docs/plugins/ray_launcher/#ray_aws-launcher" target="_blank" rel="noopener noreferrer" class="">here</a> (under the heading, “Discover ray_aws launcher's config”). You can override them in your application
config or from the command line to fit your use case.
The following Ray Launcher example code (e.g., my_app.py) is runnable and can be found <a href="https://github.com/facebookresearch/hydra/tree/master/plugins/hydra_ray_launcher/examples/simple" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<p>Launch your Hydra application to AWS by simply overriding: <code>hydra/launcher=ray_aws</code>:</p>
<div class="language-commandline codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-commandline codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py hydra/launcher=ray_aws task=1,2 --multirun</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Ray Launcher is launching 2 jobs, </span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA]        #0 : task=1</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA]        #1 : task=2</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">...</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Running command: ['ray', 'up', '-y', '/var/folders/n_/9qzct77j68j6n9lh0lw3vjqcn96zxl/T/tmp20qvoy15.yaml']</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Output: INFO services.py:1090 -- View the Ray dashboard at http://127.0.0.1:8265</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">(pid=3823)[__main__][INFO] - Executing task 1</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">(pid=3822)[__main__][INFO] - Executing task 2</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Stopping cluster now. (stop_cluster=true)</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Deleted the cluster (provider.cache_stopped_nodes=false)</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Running command: ['ray', 'down', '-y', '/var/folders/n_/9qzct77j68j6n9lh0lw3vjqcn96zxl/T/tmpfm2ems9v.yaml']</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="launching-to-a-new-local-ray-cluster">Launching to a new local Ray Cluster<a href="https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/#launching-to-a-new-local-ray-cluster" class="hash-link" aria-label="Direct link to Launching to a new local Ray Cluster" title="Direct link to Launching to a new local Ray Cluster" translate="no">​</a></h3>
<p>If you want to do a quick local test,
you can spin up a local Ray cluster at application run time by specifying <code>hydra/launcher=ray</code>.
In this example, we create a new Ray cluster at application time.</p>
<div class="language-commandline codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-commandline codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py  --multirun hydra/launcher=ray </span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Ray Launcher is launching 1 jobs, sweep output dir: multirun/2020-12-17/16-11-28</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Initializing ray with config: {'address': None}</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">2020-12-17 16:11:29,340 INFO services.py:1090 -- View the Ray dashboard at http://127.0.0.1:8265</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA]        #0 : </span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">(pid=62642) [__main__][INFO] - Executing task 1</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="launching-to-an-existing-local-ray-cluster">Launching to an existing local Ray Cluster<a href="https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/#launching-to-an-existing-local-ray-cluster" class="hash-link" aria-label="Direct link to Launching to an existing local Ray Cluster" title="Direct link to Launching to an existing local Ray Cluster" translate="no">​</a></h3>
<p>You can launch the application on an existing local Ray cluster by configuring the cluster address
and overriding <code>hydra/launcher=ray</code>. In the following example we configure the Ray cluster address
to local ray cluster and Hydra Ray Launcher was able to connect to the existing Ray cluster and
execute the application code:</p>
<div class="language-commandline codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-commandline codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py  --multirun hydra/launcher=ray hydra.launcher.ray.init.address=localhost:6379</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Ray Launcher is launching 1 jobs, sweep output dir: multirun/2020-11-10/15-13-32</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA] Initializing ray with config: {'num_cpus': None, 'num_gpus': None, 'address': 'localhost:6379'}</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">INFO worker.py:633 -- Connecting to existing Ray cluster at address: 10.30.99.17:6379</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">[HYDRA]        #0 :</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">(pid=93358) [__main__][INFO] - Executing task 1</span><br></div></code></pre></div></div>
<p>Hydra Ray Launcher is built on top of Hydra 1.0 and you have access to all of the benefits Hydra brings:</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="parameter-sweeps-and-optimization">Parameter sweeps and optimization<a href="https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/#parameter-sweeps-and-optimization" class="hash-link" aria-label="Direct link to Parameter sweeps and optimization" title="Direct link to Parameter sweeps and optimization" translate="no">​</a></h3>
<p>Hyperparameter sweeps are common in machine learning research.
Hydra has built-in grid search and provides several Sweeper plugins for hyperparameter optimization.
Sweepers can be used together with Launchers for sweeping on different computing platforms.
Start from our documentation <a href="https://hydra.cc/docs/tutorials/basic/running_your_app/multi-run/" target="_blank" rel="noopener noreferrer" class="">here</a> to find more.</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="config-type-safety">Config type safety<a href="https://hydra.cc/blog/2020/12/22/Hydra_Ray_Launcher/#config-type-safety" class="hash-link" aria-label="Direct link to Config type safety" title="Direct link to Config type safety" translate="no">​</a></h3>
<p>Modern Hydra applications and Hydra Plugins leverage Structured Configs for config validation,
and Hydra Ray Launcher is no exception. In the following example, we try to override the Ray cluster’s
autoscaling mode with an illegal value:</p>
<div class="language-commandline codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-commandline codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py --multirun hydra.launcher.ray.cluster.autoscaling_mode=foo</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Error merging override hydra.launcher.ray.cluster.autoscaling_mode=foo</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Invalid value 'foo', expected one of [default, aggressive]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        full_key: hydra.launcher.ray.cluster.autoscaling_mode</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        reference_type=RayClusterConf</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        object_type=RayClusterConf</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Set the environment variable HYDRA_FULL_ERROR=1 for a complete stack trace.</span><br></div></code></pre></div></div>
<p>That’s it for now! Please try out the new Hydra Ray Launcher and let us know what you think.
We are always happy to connect with you via <a href="https://github.com/facebookresearch/hydra" target="_blank" rel="noopener noreferrer" class="">GitHub</a> or the <a href="https://hydra-framework.zulipchat.com/" target="_blank" rel="noopener noreferrer" class="">Hydra Chat</a>.</p>]]></content:encoded>
            <category>Hydra</category>
            <category>Ray</category>
            <category>Plugin</category>
        </item>
        <item>
            <title><![CDATA[Hydra 1.0]]></title>
            <link>https://hydra.cc/blog/2020/09/03/Hydra_1.0/</link>
            <guid>https://hydra.cc/blog/2020/09/03/Hydra_1.0/</guid>
            <pubDate>Thu, 03 Sep 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[After many months and a lot of hard work by many people, Hydra 1.0 is finally out!]]></description>
            <content:encoded><![CDATA[<p align="center"><img src="https://hydra.cc/img/Hydra-Readme-logo2.svg" alt="logo" width="70%"></p>
<p>After many months and a lot of hard work by many people, Hydra 1.0 is finally out!
Despite some very big changes, this is still the Hydra you love - only bigger, stronger and with more heads.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="major-new-features-in-hydra-10">Major new features in Hydra 1.0<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#major-new-features-in-hydra-10" class="hash-link" aria-label="Direct link to Major new features in Hydra 1.0" title="Direct link to Major new features in Hydra 1.0" translate="no">​</a></h2>
<ul>
<li class="">Config type safety via Structured Configs</li>
<li class="">More powerful command line</li>
<li class="">New plugins enabling remote launching and hyper parameter optimization</li>
<li class="">Improved error reporting</li>
<li class="">Reduce nesting levels with config packages</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="config-type-safety-via-structured-configs">Config type safety via Structured Configs<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#config-type-safety-via-structured-configs" class="hash-link" aria-label="Direct link to Config type safety via Structured Configs" title="Direct link to Config type safety via Structured Configs" translate="no">​</a></h2>
<p>Structured Configs is a powerful new feature that enables strongly typed configs that can be validated both statically and at runtime.
With Structured Configs, you use Python dataclasses to describe your configuration structure and types.
They can be used as an alternative to YAML files, or as a way to validate YAML files automatically.</p>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>Details</summary><div><div class="collapsibleContent_K4qm"><p></p><summary>See example (Click to expand)</summary>
This example is using a Structured Config as an alternative to a configuration file.<p></p><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">@dataclass</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">class</span><span class="token plain"> </span><span class="token class-name" style="color:rgb(255, 203, 107)">MySQLConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">str</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"localhost"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(130, 170, 255)">int</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">3306</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cs </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> ConfigStore</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">instance</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">cs</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">store</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"config"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> node</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">MySQLConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">@hydra</span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">main</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">config_name</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"config"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> MySQLConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">None</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">pork </span><span class="token operator" style="color:rgb(137, 221, 255)">==</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">80</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># pork should be port!</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        </span><span class="token keyword" style="font-style:italic">print</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">"Is this a webserver?!"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div><p>Duck-typing the config object as <code>MySQLConfig</code> enables static type checkers like <code>mypy</code> to catch
type errors before you run your code:</p><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockTitle_ms4N">$ mypy my_app.py</div><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">my_app.py:22: error: "MySQLConfig" has no attribute "pork"</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Found 1 error in 1 file (checked 1 source file)</span><br></div></code></pre></div></div><p>Hydra will catch typos, or type errors in the command line:</p><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py port=fail</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Error merging override port=fail</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Value 'fail' could not be converted to Integer</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        full_key: port</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        reference_type=Optional[MySQLConfig]</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">        object_type=MySQLConfig</span><br></div></code></pre></div></div></div></div></details>
<br>
<p>Learn more at the <a class="" href="https://hydra.cc/docs/tutorials/structured_config/intro/">Structured Configs tutorial</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="more-powerful-command-line">More powerful command line<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#more-powerful-command-line" class="hash-link" aria-label="Direct link to More powerful command line" title="Direct link to More powerful command line" translate="no">​</a></h2>
<p>Hydra 1.0 introduces a new command line with many new capabilities, such as:</p>
<ul>
<li class="">Override, Add or Delete config values or Default list choices</li>
<li class="">Cast values to coerce their type</li>
<li class="">Specify dictionaries and lists as values</li>
</ul>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See examples</summary><div><div class="collapsibleContent_K4qm"><div><div class="row"><div class="col col--6"><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Override as usual</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Prefix with + to add a new field to</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">the config</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Prefix with ~ to delete a field from</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">the config</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Cast values to coerce their type.</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Support for dictionaries and lists</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div></div><div class="col col--6"><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py db.user=root</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> root</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">pass</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> secret</span><br></div></code></pre></div></div><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py +db.timeout=10</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> omry</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">pass</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> secret</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">timeout</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">10</span><br></div></code></pre></div></div><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py '~db.pass'</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> omry</span><br></div></code></pre></div></div><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py 'db.pass=str(42)'</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> omry</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">pass</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'42'</span><br></div></code></pre></div></div><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app.py \</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  '+db.params=</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token number" style="color:rgb(247, 140, 108)">10</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token number" style="color:rgb(247, 140, 108)">20</span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">'</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">user</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> omry</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">pass</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> secret</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">params</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">a</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">10</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">b</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">20</span><br></div></code></pre></div></div></div></div></div></div></div></details>
<br>
<p>Learn more at the <a class="" href="https://hydra.cc/docs/advanced/override_grammar/basic/">Basic Override syntax page</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="sweeper-improvements">Sweeper improvements<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#sweeper-improvements" class="hash-link" aria-label="Direct link to Sweeper improvements" title="Direct link to Sweeper improvements" translate="no">​</a></h2>
<p>Advanced command line capabilities are making Hydra's Basic Sweeper more powerful.</p>
<ul>
<li class="">Specify numeric ranges via the command line</li>
<li class="">Use glob to select multiple config group options without specifying them explicitly</li>
<li class="">Control sweeping order with sort and shuffle</li>
</ul>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See examples</summary><div><div class="collapsibleContent_K4qm"><div class="row"><div class="col col--6"><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Use glob to easily select</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">multiple config group options</span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">Use range to specify a range of</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">numbers</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">You can sort sweep to run order</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div><div class="language-text codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-text codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">You can also shuffle sweeps to run</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">in random order</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div></div><div class="col col--6"><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token plain">m </span><span class="token string" style="color:rgb(195, 232, 141)">'db=glob(*)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Will sweep over all db options</span><br></div></code></pre></div></div><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token plain">multirun \</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'+number=range(1,4)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># number will take the values</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># 1,2 and 3</span><br></div></code></pre></div></div><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token plain">multirun \</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'+num=sort(3,1,2)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Sweep over num in order</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token plain">multirun \</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'+num=sort(3,1,2,reverse=true)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Sweep over num in reverse order</span><br></div></code></pre></div></div><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token plain">multirun \</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token string" style="color:rgb(195, 232, 141)">'+num=shuffle(3,1,2)'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Sweep over num in random order</span><br></div></code></pre></div></div></div></div></div></div></details>
<br>
<p>Learn more at the <a class="" href="https://hydra.cc/docs/advanced/override_grammar/extended/">Extended Override grammar</a> page.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="new-plugins">New plugins<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#new-plugins" class="hash-link" aria-label="Direct link to New plugins" title="Direct link to New plugins" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="launchers">Launchers<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#launchers" class="hash-link" aria-label="Direct link to Launchers" title="Direct link to Launchers" translate="no">​</a></h3>
<p>One of the early promises of Hydra was that it will enable you to easily launch your application to different clusters.
Hydra 1.0 adds a few Launchers plugins that starts to make good on that promise.</p>
<ul>
<li class="">The <a class="" href="https://hydra.cc/docs/plugins/submitit_launcher/">Submitit Launcher</a> can launch applications to <a href="https://slurm.schedmd.com/documentation.html" target="_blank" rel="noopener noreferrer" class="">SLURM</a> cluster using <a href="https://github.com/facebookincubator/submitit" target="_blank" rel="noopener noreferrer" class="">Submitit</a>.</li>
<li class="">The <a class="" href="https://hydra.cc/docs/plugins/rq_launcher/">Redis Queue launcher</a> can launch applications to Redis Queue server.</li>
<li class="">The <a class="" href="https://hydra.cc/docs/plugins/joblib_launcher/">Joblib Launcher</a> can launch your application with joblib, enabling parallel local execution.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="sweepers">Sweepers<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#sweepers" class="hash-link" aria-label="Direct link to Sweepers" title="Direct link to Sweepers" translate="no">​</a></h3>
<p>Two new Sweeper plugins enables you to automatically find optimal parameters without changing a line of code.</p>
<ul>
<li class="">The <a class="" href="https://hydra.cc/docs/plugins/ax_sweeper/">Ax Sweeper</a> brings the power of <a href="https://ax.dev/" target="_blank" rel="noopener noreferrer" class="">Ax</a> to your Hydra app</li>
<li class="">The <a class="" href="https://hydra.cc/docs/plugins/nevergrad_sweeper/">Nevergrad Sweeper</a> brings the power of <a href="https://facebookresearch.github.io/nevergrad/" target="_blank" rel="noopener noreferrer" class="">Nevergrad</a> to your Hydra app</li>
</ul>
<p>Note that both Sweepers are still in beta and some changes are expected soon. Your feedback can help shape them.</p>
<h3 class="anchor anchorTargetStickyNavbar_AKxV" id="tab-completion">Tab completion<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#tab-completion" class="hash-link" aria-label="Direct link to Tab completion" title="Direct link to Tab completion" translate="no">​</a></h3>
<p>In addition to Bash, Hydra now supports <a href="https://fishshell.com/" target="_blank" rel="noopener noreferrer" class="">Fish</a> shell Tab Completion.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="compose-api-improvements">Compose API improvements<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#compose-api-improvements" class="hash-link" aria-label="Direct link to Compose API improvements" title="Direct link to Compose API improvements" translate="no">​</a></h2>
<p>The experimental Compose API is maturing. It is now possible to initialize Hydra in one of 3 ways:</p>
<ul>
<li class=""><code>initialize()</code>: Initialize with a config path relative to the caller</li>
<li class=""><code>initialize_config_module()</code> : Initialize with config_module (absolute)</li>
<li class=""><code>initialize_config_dir()</code> : Initialize with a config_dir on the file system (absolute)</li>
</ul>
<p>All initialization methods can be used to initialize Hydra globally or in a context. Making the Compose API ideal for
Unit tests and Jupyter notebooks.</p>
<p>Learn more at the <a class="" href="https://hydra.cc/docs/1.0/experimental/compose_api/">Compose API</a> page.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="improved-error-reporting">Improved error reporting<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#improved-error-reporting" class="hash-link" aria-label="Direct link to Improved error reporting" title="Direct link to Improved error reporting" translate="no">​</a></h2>
<p>Reported errors will have un-interesting stack frames removed by default.
You can enable the complete stack trace with the environment variable <code>HYDRA_FULL_ERROR=1</code>.</p>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See example of an error</summary><div><div class="collapsibleContent_K4qm"><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">@hydra</span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token decorator annotation punctuation" style="color:rgb(199, 146, 234)">main</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> DictConfig</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">-</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token boolean" style="color:rgb(255, 88, 116)">None</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">/</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># hmmm, seems fishy</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">if</span><span class="token plain"> __name__ </span><span class="token operator" style="color:rgb(137, 221, 255)">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"__main__"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></div></code></pre></div></div><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Traceback </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">most recent call last</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"my_app.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">9</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> my_app</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">/</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ZeroDivisionError</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> division by zero</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Set the environment variable HYDRA_FULL_ERROR</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> a complete stack trace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><br></div></code></pre></div></div></div></div></details>
<br>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See example of a complete stack trace</summary><div><div class="collapsibleContent_K4qm"><div class="language-python codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-python codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token plain">$ HYDRA_FULL_ERROR</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> python my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">py</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">Traceback </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">most recent call last</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"my_app.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">13</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token plain">module</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    my_app</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/main.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">32</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> decorated_main</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    _run_hydra</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/_internal/utils.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">355</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> _run_hydra</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    run_and_report</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/_internal/utils.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">210</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> run_and_report</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">raise</span><span class="token plain"> ex</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/_internal/utils.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">207</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> run_and_report</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> func</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/_internal/utils.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">356</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token keyword" style="font-style:italic">lambda</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">lambda</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> hydra</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">run</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/_internal/hydra.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">107</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> run</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token keyword" style="font-style:italic">return</span><span class="token plain"> run_job</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"/home/omry/dev/hydra/hydra/core/utils.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">125</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> run_job</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    ret</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token plain">return_value </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> task_function</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">task_cfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  File </span><span class="token string" style="color:rgb(195, 232, 141)">"my_app.py"</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> line </span><span class="token number" style="color:rgb(247, 140, 108)">9</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> my_app</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">/</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">ZeroDivisionError</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> division by zero</span><br></div></code></pre></div></div></div></div></details>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="reduce-nesting-levels-with-config-packages">Reduce nesting levels with config packages<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#reduce-nesting-levels-with-config-packages" class="hash-link" aria-label="Direct link to Reduce nesting levels with config packages" title="Direct link to Reduce nesting levels with config packages" translate="no">​</a></h2>
<p>Hydra 1.0 introduces the ability to specify the root <code>config package</code> in the config file.
Specifying the root config package help reducing nesting levels in config files.
Config packages can be overridden via the Defaults List or the command line, allowing the reuse of the the same
config in multiple place in the resulting output without having to duplicate it.</p>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See example of reduced nesting</summary><div><div class="collapsibleContent_K4qm"><p>The following two <code>db/mysql.yaml</code> files are equivalent:</p><div class="row"><div class="col col--6"><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockTitle_ms4N">Hydra 0.11</div><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">3306</span><br></div></code></pre></div></div></div><div class="col col--6"><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockTitle_ms4N">Hydra 1.0</div><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># @package _group_</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token key atrule">port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">3306</span><br></div></code></pre></div></div></div></div></div></div></details>
<details class="details_R7vj alert alert--info details_DtkP" data-collapsed="true"><summary>See example of config reuse</summary><div><div class="collapsibleContent_K4qm"><p>Add the <code>mysql</code> config in the packages <code>db.src</code> and <code>db.dst</code>, reusing <code>db/mysql.yaml</code>.</p><div class="row"><div class="col col--6"><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockTitle_ms4N">config.yaml</div><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token key atrule">defaults</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">db@db.src</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> mysql</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token punctuation" style="color:rgb(199, 146, 234)">-</span><span class="token plain"> </span><span class="token key atrule">db@db.dst</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> mysql</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></div></code></pre></div></div></div><div class="col col--6"><div class="language-yaml codeBlockContainer_amAr theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockTitle_ms4N">Interpretation</div><div class="codeBlockContent_Ie75"><pre tabindex="0" class="prism-code language-yaml codeBlock_O12j thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_fJnv"><div class="token-line" style="color:#bfc7d5"><span class="token key atrule">db</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">src</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">3306</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">  </span><span class="token key atrule">dst</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">host</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> localhost</span><br></div><div class="token-line" style="color:#bfc7d5"><span class="token plain">    </span><span class="token key atrule">port</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">3306</span><br></div></code></pre></div></div></div></div></div></div></details>
<br>
<p>Learn more at the <a class="" href="https://hydra.cc/docs/advanced/overriding_packages/">Overriding packages</a> page.</p>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="misc-improvements">Misc improvements<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#misc-improvements" class="hash-link" aria-label="Direct link to Misc improvements" title="Direct link to Misc improvements" translate="no">​</a></h2>
<ul>
<li class="">The <code>params</code> field is eliminated from instantiated objects configs (<a class="" href="https://hydra.cc/docs/upgrades/0.11_to_1.0/object_instantiation_changes/">details</a>)</li>
<li class="">Support for setting environment variables via the config. (<code>hydra.job.env_set</code>) (<a class="" href="https://hydra.cc/docs/configure_hydra/job/#hydrajobenv_set">details</a>)</li>
<li class="">Hydra's config can now be accessed through interpolation using <code>${hydra:key}</code>, for example <code>${hydra:job.name}</code> (<a class="" href="https://hydra.cc/docs/configure_hydra/intro/#runtime-variables">details</a>)</li>
<li class="">Introduced <code>--info</code> flag for quick access to debug information (<a class="" href="https://hydra.cc/docs/tutorials/basic/running_your_app/debugging/#info">details</a>)</li>
<li class="">Add <code>--package</code> flag, can be used with <code>--cfg</code> to print a specific config package (<a class="" href="https://hydra.cc/docs/advanced/hydra-command-line-flags/#--package-p">details</a>)</li>
<li class="">Override the <code>config_path</code> and <code>config_name</code> from the command line with <code>--config-name</code> and <code>--config-path</code> (<a class="" href="https://hydra.cc/docs/advanced/hydra-command-line-flags/#--config-path-cp">details</a>)</li>
<li class="">Add an additional config directory to the search path with <code>--config-dir</code> (<a class="" href="https://hydra.cc/docs/advanced/hydra-command-line-flags/#--config-dir-cd">details</a>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_AKxV" id="migrating-from-011">Migrating from 0.11<a href="https://hydra.cc/blog/2020/09/03/Hydra_1.0/#migrating-from-011" class="hash-link" aria-label="Direct link to Migrating from 0.11" title="Direct link to Migrating from 0.11" translate="no">​</a></h2>
<p>For most people, migrating from 0.11 to 1.0 will be smooth.
However, you will have issues if you are relying on Python 2 support or have used internal APIs.</p>
<ul>
<li class="">Hydra 1.0 drops support for <a href="https://www.python.org/doc/sunset-python-2/" target="_blank" rel="noopener noreferrer" class="">Python 2</a>.</li>
<li class="">If you are relying on internal APIs, Hydra 1.0 will likely break your code. Maintaining backward compatibility for internal APIs is not a goal.</li>
<li class="">Hydra 0.11 Configs pickled and stored will not unpickle with Hydra 1.0 due to internal changes in OmegaConf.</li>
</ul>
<p>There are multiple new deprecation warnings, each with a link to mini migration guide.</p>
<p>That's it for now, take Hydra 1.0 for a spin!</p>]]></content:encoded>
            <category>Hydra</category>
            <category>Release</category>
        </item>
        <item>
            <title><![CDATA[New Hydra blog]]></title>
            <link>https://hydra.cc/blog/2020/05/04/New-blog/</link>
            <guid>https://hydra.cc/blog/2020/05/04/New-blog/</guid>
            <pubDate>Mon, 04 May 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome to the Hydra blog.]]></description>
            <content:encoded><![CDATA[<p>Welcome to the Hydra blog.</p>
<p>Catching up on some previous content:</p>
<h5 class="anchor anchorTargetStickyNavbar_AKxV" id="apr82020">Apr/8/2020<a href="https://hydra.cc/blog/2020/05/04/New-blog/#apr82020" class="hash-link" aria-label="Direct link to Apr/8/2020" title="Direct link to Apr/8/2020" translate="no">​</a></h5>
<p><a href="https://twit.tv/shows/floss-weekly/episodes/573" target="_blank" rel="noopener noreferrer" class="">FLOSS Weekly interview</a></p>
<h5 class="anchor anchorTargetStickyNavbar_AKxV" id="feb32020">Feb/3/2020<a href="https://hydra.cc/blog/2020/05/04/New-blog/#feb32020" class="hash-link" aria-label="Direct link to Feb/3/2020" title="Direct link to Feb/3/2020" translate="no">​</a></h5>
<p><a href="http://bit.ly/2Sdq2B3" target="_blank" rel="noopener noreferrer" class="">PyTorch Medium channel blog post</a></p>
<h5 class="anchor anchorTargetStickyNavbar_AKxV" id="oct32019">Oct/3/2019<a href="https://hydra.cc/blog/2020/05/04/New-blog/#oct32019" class="hash-link" aria-label="Direct link to Oct/3/2019" title="Direct link to Oct/3/2019" translate="no">​</a></h5>
<p><a href="https://engineering.fb.com/open-source/hydra/" target="_blank" rel="noopener noreferrer" class="">Facebook engineering blog release post</a></p>]]></content:encoded>
            <category>Hydra</category>
        </item>
    </channel>
</rss>