Spaces:
Running
on
CPU Upgrade
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](https://github.com/huggingface/accelerate) and [transformers](https://github.com/huggingface/transforms) 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: | |
| 1. The code diff that should be rendered with the new code | |
| 2. An explanation of what the diff represents and what's new. Should be up to a paragraph as a TL;DR | |
| 3. 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})") | |
| ``` |