Spaces:
Running
on
CPU Upgrade
title: Accelerate Examples
emoji: π
colorFrom: indigo
colorTo: purple
sdk: gradio
sdk_version: 3.14.0
app_file: src/app.py
pinned: false
Accelerate Integration Examples
This is an interactive utility to show users how to incorporate parts of π€ Accelerate into their code.
To use it select a feature to add and a github-like diff
will be rendered showing what code to remove
and add based on the initial template code.
These are more simplified versions of examples that exist in the accelerate and transformers repositories.
How each example is made
In the code_examples
folder are basic text-like files which contain a much-simplified version of some integration. For example:
##
<pre>
+from accelerate import Accelerator
+accelerator = Accelerator()
+dataloader, model, optimizer scheduler = accelerator.prepare(
+ dataloader, model, optimizer, scheduler
+)
for batch in dataloader:
optimizer.zero_grad()
inputs, targets = batch
- inputs = inputs.to(device)
- targets = targets.to(device)
outputs = model(inputs)
loss = loss_function(outputs, targets)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
scheduler.step()</pre>
##
Everything around `accelerate` ...
##
To learn more checkout the related documentation:
There are three overall "sections" separated by two "##" and a newline:
- The code diff that should be rendered with the new code
- An explanation of what the diff represents and what's new. Should be up to a paragraph as a TL;DR
- Link to the documentation users can go to quickly to learn more.
Creating a diff
To create a diff, a similar pre
tag should be wrapped around the code, and a single +
or -
(showing an addition or subtraction) should be added to the code with no extra spacing or formatting. The tool will automatically know how to render these properly.
For example:
<pre>
+from accelerate import Accelerator
+accelerator = Accelerator()
+dataloader, model, optimizer scheduler = accelerator.prepare(
+ dataloader, model, optimizer, scheduler
+)
for batch in dataloader:
optimizer.zero_grad()
inputs, targets = batch
- inputs = inputs.to(device)
- targets = targets.to(device)
outputs = model(inputs)
loss = loss_function(outputs, targets)
- loss.backward()
+ accelerator.backward(loss)
optimizer.step()
scheduler.step()</pre>
Also note that the initial pre
is on a newline, and the latter </pre>
is not.
Rendering the diff
After a diff and starter (if needed) has been made, if a new template was created add it to TEMPLATES
in src/template.py
. Otherwise in app.py
modify the change
function to properly point to the new integration example to show on a particular selection:
def change(inp):
if inp == "Basic":
return (templates["initial"], highlight(inp), "## Accelerate Code (Base Integration)")
elif inp == "Calculating Metrics":
return (templates["initial_with_metrics"], highlight(inp), f"## Accelerate Code ({inp})")
else:
return (templates["accelerate"], highlight(inp), f"## Accelerate Code ({inp})")