noamaanMulla-03/transformers-issues huggingface dataset:
Fix `KeyError` when initialize the model with `ignore_mismatched_sizes=True`
Author: tricktreat
Pull request: yes

# What does this PR do?

<!--
Congratulations! You've made it this far! You're not quite done yet though.

Once merged, your PR is going to appear in the release notes with the title you set, so make sure it's a great title that fully reflects the extent of your awesome contribution.

Then, please replace this with a description of the change and which issue is fixed (if applicable). Please also include relevant motivation and context. List any dependencies (if any) that are required for this change.

Once you're done, someone will review your PR shortly (see the section "Who can review?" below to tag some potential reviewers). They may suggest changes to make the code even better. If no one reviewed your PR after a week has passed, don't hesitate to post a new comment @-mentioning the same persons---sometimes notifications get lost.
-->

<!-- Remove if not applicable -->

`KeyError` is thrown when the model is initialized from pre-trained weights with `ignore_mismatched_sizes=True`. Reproduced as follows:

```python
>>> import transformers
>>> transformers.BertModel.from_pretrained("bert-base-cased", ignore_mismatched_sizes=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/shenyl/miniconda/envs/cuda111/lib/python3.8/site-packages/transformers/modeling_utils.py", line 1882, in from_pretrained
    model, missing_keys, unexpected_keys, mismatched_keys, error_msgs = cls._load_pretrained_model(
  File "/home/shenyl/miniconda/envs/cuda111/lib/python3.8/site-packages/transformers/modeling_utils.py", line 2003, in _load_pretrained_model
    and state_dict[checkpoint_key].shape != model_state_dict[model_key].shape
KeyError: 'bert.embeddings.LayerNorm.weight'
```


The cause is that the key modified by function `_fix_key` is not found in `state_dict`.

The solution is to use the original loaded keys when finding the mismatched keys.

Comments:
_The documentation is not available anymore as the PR was closed or merged._
How to train over VERY LARGE dataset?
Author: CaoYiqingT
Pull request: no
Labels: name: bug

### System Info

```shell
I am using transformer trainer while meeting the issue.
The trainer requests torch.utils.data.Dataset as input, which loads the whole dataset into the memory at once. Therefore, when the dataset is too large to load, there's nothing I can do except using IterDataset, which loads samples of data seperately, and results in low efficiency. 
I wonder if there are any tricks like Sharding in huggingface trainer.
Looking forward to your reply.
@sgugger
```


### Who can help?

_No response_

### Information

- [ ] The official example scripts
- [ ] My own modified scripts

### Tasks

- [ ] An officially supported task in the `examples` folder (such as GLUE/SQuAD, ...)
- [ ] My own task or dataset (give details below)

### Reproduction

None

### Expected behavior

```shell
some tricks like fairseq Sharding very large datasets https://fairseq.readthedocs.io/en/latest/getting_started.html
```


Comments:
Add semantic script, trainer
Author: NielsRogge
Pull request: yes

# What does this PR do?

This PR adds `run_semantic_segmentation.py`, which leverages the Trainer API for fine-tuning any model supported by `AutoModelForSemanticSegmentation`.

To do:

- [x] fix WandB logging, which doesn't seem to like the fact that metrics are turned into lists. Might need some help here from @sgugger.
- [x] also wondering why the [model card](https://huggingface.co/nielsr/segformer-finetuned-sidewalk-trainer) doesn't include the dataset name (even though it has a default value in the script):

<img width="535" alt="Screenshot 2022-04-19 at 16 19 22" src="https://user-images.githubusercontent.com/48327001/164025421-2c74a31e-26b9-4652-a99a-ddedbd54428b.png">

Comments:
_The documentation is not available anymore as the PR was closed or merged._
Fix `HubertRobustTest` PT/TF equivalence test on GPU
Author: ydshieh
Pull request: yes

# What does this PR do?

Fix `HubertRobustTest` PT/TF equivalence test on GPU.

Note that `HubertRobustModelTest` has

```python
    def setUp(self):
        self.model_tester = HubertModelTester(
            self, conv_stride=(3, 3, 3), feat_extract_norm="layer", do_stable_layer_norm=True
        )
```

but `get_config()` had no ` do_stable_layer_norm=self.do_stable_layer_norm`

## To investigate further

- Why no issue on CPU even without this PR
- Why using `conv_stride=(4, 4, 4)` (the default value) has no issue on GPU, even without this PR

(Does this suggest we have PT/TF Hubert behave differently with `do_stable_layer_norm=False` on GPU when `conv_stride=(3, 3, 3)` etc?)

@patrickvonplaten You might have some idea about these points ..?


Comments:
_The documentation is not available anymore as the PR was closed or merged._

Think it might be a great idea to add a check to avoid such situation occur in the future. Will do it in another PR.
Freezing layers does not work with torch.utils.checkpoint
Author: entslscheia
Pull request: no
Labels: name: Migration

Hi,

I am using BERT with `pytorch_transformers V1.1.0`. In this version, gradients checkpointing was not implemented, so I do it by myself simply by replacing `layer_outputs = layer_module(hidden_states, attention_mask, head_mask[i])` with `layer_outputs = checkpoint(layer_module, hidden_states, attention_mask, head_mask[i])`. This works fine when I try to fine-tune the entire BERT model. However, when I tried to freeze several layers of BERT with the code below:
```python
        if layers_to_freeze is not None:
            modules = [self.transformer_model.embeddings,
                       *self.transformer_model.encoder.layer[:layers_to_freeze]]
            for module in modules:
                for param in module.parameters():
                    param.requires_grad = False
```
The training procedures behave the same no matter what `layers_to_freeze` I set (i.e., the trace of loss is exactly the same for different `layers_to_freeze`), while after I disable gradient checkpointing, it works as expected. I think this suggest that using `torch.utils.checkpoint` might interfere with `param.requires_grad = False` for freezing layers.

I notice that in your official implementation for gradient checkpointing, you [define ` create_custom_forward` first](https://github.com/huggingface/transformers/blob/f466936476ed10410b07999fa7dd65b1dd0a961a/src/transformers/models/bert/modeling_bert.py#L570-L574) instead of directly call `layer_module`. I haven't tested whether doing this would avoid the issue I mentioned so far. Before I test it, I am curious about out of what concern you are implementing it in this way? Will directly calling `layer_module` lead to any serious issue?

Comments:
This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.
How can i train wav2vec2 with my dataset?
Author: ddoron9
Pull request: no

# 🚀 Feature request

i wonder how to preprocess it


<!-- A clear and concise description of the feature proposal.
     Please provide a link to the paper and code in case they exist. -->

## Motivation

<!-- Please outline the motivation for the proposal. Is your feature request
     related to a problem? e.g., I'm always frustrated when [...]. If this is related
     to another GitHub issue, please link here too. -->

## Your contribution

<!-- Is there any way that you could help, e.g. by submitting a PR?
     Make sure to read the CONTRIBUTING.MD readme:
     https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md -->


Comments:
Hi,

We do have several blog posts on that:

* Fine-Tune Wav2Vec2 for English ASR with 🤗 Transformers: https://huggingface.co/blog/fine-tune-wav2vec2-english
* Fine-tuning XLS-R for Multi-Lingual ASR with 🤗 Transformers: https://huggingface.co/blog/fine-tune-xlsr-wav2vec2

This issue has been automatically marked as stale because it has not had recent activity. If you think this still needs to be addressed please comment on this thread.

Please note that issues that do not follow the [contributing guidelines](https://github.com/huggingface/transformers/blob/main/CONTRIBUTING.md) are likely to be ignored.
Addition of MuRIL - BERT based model for 17 Indian Languages to the library
Author: ravi03071991
Pull request: yes

Hi,

This PR is regarding the addition of MuRIL, a BERT-based model trained specifically for 17 Indian Languages to the hugging face library.

MuRIL is released on tfhub. Link to the repo: [https://tfhub.dev/google/MuRIL/1](https://tfhub.dev/google/MuRIL/1)

I am interested to work on this contribution to the library. Please let me know if I can work on it.

Comments:
Hello! Yes, feel free to. However, you seem to have based yourself off of a `tf` branch that is very old?

@LysandreJik Yeah sorry. Should I raise a new issue so that it can be changed accordingly?

If you want to contribute this model, I invite you to base yourself off of the `master` branch and create a new branch from there. 

Once you your branch, you can leverage the [template scripts](https://github.com/huggingface/transformers/tree/master/templates/adding_a_new_model) which should help you by creating a new model and adding it everywhere it should be added; you'll only have to update the created files.

Reading the [contributing guide](https://github.com/huggingface/transformers/blob/master/CONTRIBUTING.md) will also be very helpful.

great effort and contribution @ravi03071991 

@LysandreJik Sure. Will follow the guidelines. Thank you.
GLUE Script for Tensorflow
Author: LysandreJik
Pull request: yes


Comments:
# [Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=h1) Report
> Merging [#1329](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=desc) into [tf2](https://codecov.io/gh/huggingface/pytorch-transformers/commit/e8e956dbb2a6df696d79e2f4dc154849a8e06611?src=pr&el=desc) will **decrease** coverage by `0.05%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##              tf2    #1329      +/-   ##
==========================================
- Coverage   86.01%   85.95%   -0.06%     
==========================================
  Files          79       79              
  Lines       12041    12028      -13     
==========================================
- Hits        10357    10339      -18     
- Misses       1684     1689       +5
```


| [Impacted Files](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [pytorch\_transformers/modeling\_utils.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvbW9kZWxpbmdfdXRpbHMucHk=) | `91.44% <0%> (-1.48%)` | :arrow_down: |
| [pytorch\_transformers/tests/modeling\_common\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfY29tbW9uX3Rlc3QucHk=) | `73.61% <0%> (-0.41%)` | :arrow_down: |
| [...orch\_transformers/tests/modeling\_tf\_common\_test.py](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329/diff?src=pr&el=tree#diff-cHl0b3JjaF90cmFuc2Zvcm1lcnMvdGVzdHMvbW9kZWxpbmdfdGZfY29tbW9uX3Rlc3QucHk=) | `94.73% <0%> (-0.27%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=footer). Last update [e8e956d...cc73950](https://codecov.io/gh/huggingface/pytorch-transformers/pull/1329?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
Distil update
Author: VictorSanh
Pull request: yes

Update Distil*
- update on distilbert weights
- add distilgpt2 weights
- link to the paper
- big update on code

Comments:
# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=h1) Report
> Merging [#1406](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/63ed224b7c550ead5f9599187e665ded57ce80d4?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/1406/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master    #1406   +/-   ##
=======================================
  Coverage   84.72%   84.72%           
=======================================
  Files          84       84           
  Lines       12591    12591           
=======================================
  Hits        10668    10668           
  Misses       1923     1923
```



------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=footer). Last update [63ed224...193bbda](https://codecov.io/gh/huggingface/transformers/pull/1406?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
clean up PT <=> TF conversion
Author: thomwolf
Pull request: yes

Cleaning up PT <=> TF conversion method.

cc @VictorSanh 

Comments:
Cool!

# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=h1) Report
> Merging [#2069](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/ee53de7aac8312140e87d452718e15e3d42e27dd?src=pr&el=desc) will **not change** coverage.
> The diff coverage is `100%`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/2069/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=tree)

```diff
@@           Coverage Diff           @@
##           master    #2069   +/-   ##
=======================================
  Coverage   83.16%   83.16%           
=======================================
  Files         109      109           
  Lines       15858    15858           
=======================================
  Hits        13188    13188           
  Misses       2670     2670
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [transformers/modeling\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/2069/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL21vZGVsaW5nX3V0aWxzLnB5) | `90.86% <100%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=footer). Last update [ee53de7...1d87b37](https://codecov.io/gh/huggingface/transformers/pull/2069?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


@thomwolf and @VictorSanh - could you please look into #2088 (PT to TF)? tagging you guys in this thread as it seems relevant, please let me know otherwise. 

Thanks

This thread is not relevant but I'll give a look at your issue soon.

thanks!
Fix Camembert and XLM-R `decode` method- Fix NER pipeline alignement
Author: thomwolf
Pull request: yes

Fix `decode` method for Camembert and XLM-R
Simplify alignement method for NER pipeline

Comments:
# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=h1) Report
> Merging [#2244](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/ceae85ad60da38cacb14eca49f752669a4fe31dc?src=pr&el=desc) will **decrease** coverage by `0.04%`.
> The diff coverage is `58.82%`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/2244/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #2244      +/-   ##
==========================================
- Coverage   79.92%   79.88%   -0.05%     
==========================================
  Files         131      131              
  Lines       19469    19480      +11     
==========================================
  Hits        15561    15561              
- Misses       3908     3919      +11
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [transformers/commands/run.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL2NvbW1hbmRzL3J1bi5weQ==) | `0% <0%> (ø)` | :arrow_up: |
| [transformers/file\_utils.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL2ZpbGVfdXRpbHMucHk=) | `67.1% <100%> (-1.76%)` | :arrow_down: |
| [transformers/tokenization\_camembert.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL3Rva2VuaXphdGlvbl9jYW1lbWJlcnQucHk=) | `36.61% <50%> (+0.79%)` | :arrow_up: |
| [transformers/tokenization\_xlm\_roberta.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL3Rva2VuaXphdGlvbl94bG1fcm9iZXJ0YS5weQ==) | `37.68% <50%> (+0.75%)` | :arrow_up: |
| [transformers/pipelines.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL3BpcGVsaW5lcy5weQ==) | `67.94% <71.42%> (+0.09%)` | :arrow_up: |
| [transformers/tests/pipelines\_test.py](https://codecov.io/gh/huggingface/transformers/pull/2244/diff?src=pr&el=tree#diff-dHJhbnNmb3JtZXJzL3Rlc3RzL3BpcGVsaW5lc190ZXN0LnB5) | `98.03% <0%> (-0.99%)` | :arrow_down: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=footer). Last update [ceae85a...655fd06](https://codecov.io/gh/huggingface/transformers/pull/2244?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
Serving improvements
Author: mfuntowicz
Pull request: yes

This PR brings some improvements over the CLI serving command.

Changes:
- Expose the possibility to change the number of underlying FastAPI workers.
- Make forward() async so it doesn't timeout in the middle a requests.
- Fixed USE_TF, USE_TORCH env vars fighting each other.

Comments:
> This PR brings some improvements over the CLI serving command.
> 
> Changes:
> 
> * Expose the possibility to change the number of underlying FastAPI workers.
> * Make forward() async so it doesn't timeout in the middle a requests.
> * Fixed USE_TF, USE_TORCH env vars fighting each other.

Hi @mfuntowicz 
I have tested multi workers on my PC with localhost, and I observe that getting more workers does not make Query request per sec any faster.  

I suppose the bottleneck somewhere, maybe the model file ?


Hi @zhoudoufu,

There is a high probability if all the workers are running on the same GPU there still no to get sequential access to the hardware.

One possible improvement would be to specify env variable / GPU ordinal for each worker instance. I may try to have a look in the near future.

Morgan

Hi @mfuntowicz 
For my test, I use only CPUs. And I do observe CPUs' usage goes up when having more workers. For CPU usage I think there might be other causes.
Improved testing
Author: LysandreJik
Pull request: yes

Adding some tests for some models that were not tested.

Comments:
# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=h1) Report
> Merging [#2723](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/6c1b23554f8bb5b5e1f6c80969acab764c755678?src=pr&el=desc) will **increase** coverage by `0.93%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/2723/graphs/tree.svg?width=650&token=9qOlN6Hb1c&height=150&src=pr)](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #2723      +/-   ##
==========================================
+ Coverage   74.09%   75.03%   +0.93%     
==========================================
  Files          93       93              
  Lines       15248    15248              
==========================================
+ Hits        11298    11441     +143     
+ Misses       3950     3807     -143
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/configuration\_flaubert.py](https://codecov.io/gh/huggingface/transformers/pull/2723/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9jb25maWd1cmF0aW9uX2ZsYXViZXJ0LnB5) | `100% <0%> (+25%)` | :arrow_up: |
| [src/transformers/modeling\_roberta.py](https://codecov.io/gh/huggingface/transformers/pull/2723/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19yb2JlcnRhLnB5) | `95.77% <0%> (+30.51%)` | :arrow_up: |
| [src/transformers/modeling\_flaubert.py](https://codecov.io/gh/huggingface/transformers/pull/2723/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19mbGF1YmVydC5weQ==) | `83.82% <0%> (+55.14%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=footer). Last update [6c1b235...74b1cb3](https://codecov.io/gh/huggingface/transformers/pull/2723?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).
Adding 🤗nlp in the examples
Author: thomwolf
Pull request: yes

This PR examines how to best make use of all the features of 🤗nlp in the examples.

First, example studied is GLUE. The main goal is to have a very explicit data processing (target: no data processing happening inside `transformers`) as well as add some efficiency features like dynamic batching. The second goal is to make this a lot more efficient, fast, and reproducible.

Comments:
Closing in favor of #5240