Buckets:

rtrm's picture
download
raw
8.57 kB
<meta charset="utf-8" /><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Memory Utilities&quot;,&quot;local&quot;:&quot;memory-utilities&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;find_executable_batch_size&quot;,&quot;local&quot;:&quot;findexecutablebatchsize&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}">
<link href="/docs/accelerate/main/en/_app/immutable/assets/0.e3b0c442.css" rel="modulepreload">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/entry/start.9292d64f.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/scheduler.00bde567.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/singletons.7ccea875.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/paths.33977732.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/entry/app.599b7725.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/index.752e2ff6.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/nodes/0.5413a06e.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/each.e59479a4.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/nodes/39.c1adfb50.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/CodeBlock.e62cd1dc.js">
<link rel="modulepreload" href="/docs/accelerate/main/en/_app/immutable/chunks/Heading.476d3364.js"><!-- HEAD_svelte-u9bgzb_START --><meta name="hf:doc:metadata" content="{&quot;title&quot;:&quot;Memory Utilities&quot;,&quot;local&quot;:&quot;memory-utilities&quot;,&quot;sections&quot;:[{&quot;title&quot;:&quot;find_executable_batch_size&quot;,&quot;local&quot;:&quot;findexecutablebatchsize&quot;,&quot;sections&quot;:[],&quot;depth&quot;:2}],&quot;depth&quot;:1}"><!-- HEAD_svelte-u9bgzb_END --> <p></p> <h1 class="relative group"><a id="memory-utilities" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#memory-utilities"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>Memory Utilities</span></h1> <p data-svelte-h="svelte-1a38a5f">One of the most frustrating errors when it comes to running training scripts is hitting “CUDA Out-of-Memory”,
as the entire script needs to be restarted, progress is lost, and typically a developer would want to simply
start their script and let it run.</p> <p data-svelte-h="svelte-1lre1t5"><code>Accelerate</code> provides a utility heavily based on <a href="https://github.com/BlackHC/toma" rel="nofollow">toma</a> to give this capability.</p> <h2 class="relative group"><a id="findexecutablebatchsize" class="header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full" href="#findexecutablebatchsize"><span><svg class="" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 256"><path d="M167.594 88.393a8.001 8.001 0 0 1 0 11.314l-67.882 67.882a8 8 0 1 1-11.314-11.315l67.882-67.881a8.003 8.003 0 0 1 11.314 0zm-28.287 84.86l-28.284 28.284a40 40 0 0 1-56.567-56.567l28.284-28.284a8 8 0 0 0-11.315-11.315l-28.284 28.284a56 56 0 0 0 79.196 79.197l28.285-28.285a8 8 0 1 0-11.315-11.314zM212.852 43.14a56.002 56.002 0 0 0-79.196 0l-28.284 28.284a8 8 0 1 0 11.314 11.314l28.284-28.284a40 40 0 0 1 56.568 56.567l-28.285 28.285a8 8 0 0 0 11.315 11.314l28.284-28.284a56.065 56.065 0 0 0 0-79.196z" fill="currentColor"></path></svg></span></a> <span>find_executable_batch_size</span></h2> <p data-svelte-h="svelte-h7jpn3">This algorithm operates with exponential decay, decreasing the batch size in half after each failed run on some
training script. To use it, restructure your training function to include an inner function that includes this wrapper,
and build your dataloaders inside it. At a minimum, this could look like 4 new lines of code.</p> <blockquote data-svelte-h="svelte-ek1s5f"><p>Note: The inner function <em>must</em> take in the batch size as the first parameter, but we do not pass one to it when called. The wrapper handles this for us</p></blockquote> <p data-svelte-h="svelte-12qvnq9">It should also be noted that anything which will consume CUDA memory and passed to the <code>accelerator</code> <strong>must</strong> be declared inside the inner function,
such as models and optimizers.</p> <div class="code-block relative"><div class="absolute top-2.5 right-4"><button class="inline-flex items-center relative text-sm focus:text-green-500 cursor-pointer focus:outline-none transition duration-200 ease-in-out opacity-0 mx-0.5 text-gray-600 " title="code excerpt" type="button"><svg class="" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor" focusable="false" role="img" width="1em" height="1em" preserveAspectRatio="xMidYMid meet" viewBox="0 0 32 32"><path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z" transform="translate(0)"></path><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z" transform="translate(0)"></path><rect fill="none" width="32" height="32"></rect></svg> <div class="absolute pointer-events-none transition-opacity bg-black text-white py-1 px-2 leading-tight rounded font-normal shadow left-1/2 top-full transform -translate-x-1/2 translate-y-2 opacity-0"><div class="absolute bottom-full left-1/2 transform -translate-x-1/2 w-0 h-0 border-black border-4 border-t-0" style="border-left-color: transparent; border-right-color: transparent; "></div> Copied</div></button></div> <pre class=""><!-- HTML_TAG_START -->def training_function(args):
accelerator = Accelerator()
<span class="hljs-addition">+ @find_executable_batch_size(starting_batch_size=args.batch_size)</span>
<span class="hljs-addition">+ def inner_training_loop(batch_size):</span>
<span class="hljs-addition">+ nonlocal accelerator # Ensure they can be used in our context</span>
<span class="hljs-addition">+ accelerator.free_memory() # Free all lingering references</span>
model = get_model()
model.to(accelerator.device)
optimizer = get_optimizer()
train_dataloader, eval_dataloader = get_dataloaders(accelerator, batch_size)
lr_scheduler = get_scheduler(
optimizer,
num_training_steps=len(train_dataloader)*num_epochs
)
model, optimizer, train_dataloader, eval_dataloader, lr_scheduler = accelerator.prepare(
model, optimizer, train_dataloader, eval_dataloader, lr_scheduler
)
train(model, optimizer, train_dataloader, lr_scheduler)
validate(model, eval_dataloader)
<span class="hljs-addition">+ inner_training_loop()</span><!-- HTML_TAG_END --></pre></div> <p data-svelte-h="svelte-8y5n2">To find out more, check the documentation <a href="../package_reference/utilities#accelerate.find_executable_batch_size">here</a>.</p> <p></p>
<script>
{
__sveltekit_12ratix = {
assets: "/docs/accelerate/main/en",
base: "/docs/accelerate/main/en",
env: {}
};
const element = document.currentScript.parentElement;
const data = [null,null];
Promise.all([
import("/docs/accelerate/main/en/_app/immutable/entry/start.9292d64f.js"),
import("/docs/accelerate/main/en/_app/immutable/entry/app.599b7725.js")
]).then(([kit, app]) => {
kit.start(app, element, {
node_ids: [0, 39],
data,
form: null,
error: null
});
});
}
</script>

Xet Storage Details

Size:
8.57 kB
·
Xet hash:
edb2023195eca5bcc6518ade9c2fb0e6edd8e9444d29cb297c16503269933a52

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.