From 5bb7fe4b4197160b4e9e6a1fc1346961f85dff73 Mon Sep 17 00:00:00 2001 From: Ines Montani Date: Tue, 6 Jul 2021 19:30:59 +1000 Subject: [PATCH] Update with HF hub integration [ci skip] --- website/docs/api/cli.md | 47 +++++++++++++ website/docs/images/huggingface_hub.jpg | Bin 0 -> 112649 bytes website/docs/usage/projects.md | 66 +++++++++++++++++++ website/docs/usage/v3-1.md | 35 ++++++++++ website/src/components/code.js | 2 +- website/src/images/logos/huggingface_hub.svg | 66 +++++++++++++++++++ website/src/widgets/integration.js | 2 + 7 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 website/docs/images/huggingface_hub.jpg create mode 100644 website/src/images/logos/huggingface_hub.svg diff --git a/website/docs/api/cli.md b/website/docs/api/cli.md index 685f998ff..62e1b22e6 100644 --- a/website/docs/api/cli.md +++ b/website/docs/api/cli.md @@ -16,6 +16,7 @@ menu: - ['package', 'package'] - ['project', 'project'] - ['ray', 'ray'] + - ['huggingface-hub', 'huggingface-hub'] --- spaCy's CLI provides a range of helpful commands for downloading and training @@ -1273,3 +1274,49 @@ $ python -m spacy ray train [config_path] [--code] [--output] [--n-workers] [--a | `--verbose`, `-V` | Display more information for debugging purposes. ~~bool (flag)~~ | | `--help`, `-h` | Show help message and available arguments. ~~bool (flag)~~ | | overrides | Config parameters to override. Should be options starting with `--` that correspond to the config section and value to override, e.g. `--paths.train ./train.spacy`. ~~Any (option/flag)~~ | + +## huggingface-hub {#huggingface-hub new="3.1"} + +The `spacy huggingface-cli` CLI includes commands for uploading your trained +spaCy pipelines to the [Hugging Face Hub](https://huggingface.co/). + +> #### Installation +> +> ```cli +> $ pip install spacy-huggingface-hub +> $ huggingface-cli login +> ``` + + + +To use this command, you need the +[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub) +package installed. Installing the package will automatically add the +`huggingface-hub` command to the spaCy CLI. + + + +### huggingface-hub push {#huggingface-hub-push tag="command"} + +Push a spaCy pipeline to the Hugging Face Hub. Expects a `.whl` file packaged +with [`spacy package`](/api/cli#package) and `--build wheel`. For more details, +see the spaCy project [integration](/usage/projects#huggingface_hub). + +```cli +$ python -m spacy huggingface-hub push [whl_path] [--org] [--msg] [--local-repo] [--verbose] +``` + +> #### Example +> +> ```cli +> $ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl +> ``` + +| Name | Description | +| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| `whl_path` | The path to the `.whl` file packaged with [`spacy package`](https://spacy.io/api/cli#package). ~~Path(positional)~~ | +| `--org`, `-o` | Optional name of organization to which the pipeline should be uploaded. ~~str (option)~~ | +| `--msg`, `-m` | Commit message to use for update. Defaults to `"Update spaCy pipeline"`. ~~str (option)~~ | +| `--local-repo`, `-l` | Local path to the model repository (will be created if it doesn't exist). Defaults to `hub` in the current working directory. ~~Path (option)~~ | +| `--verbose`, `-V` | Output additional info for debugging, e.g. the full generated hub metadata. ~~bool (flag)~~  | +| **UPLOADS** | The pipeline to the hub. | diff --git a/website/docs/images/huggingface_hub.jpg b/website/docs/images/huggingface_hub.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5618df020a70d26fda0f744623ad71414f5e2a89 GIT binary patch literal 112649 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 z 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
diff --git a/website/src/images/logos/huggingface_hub.svg b/website/src/images/logos/huggingface_hub.svg
new file mode 100644
index 000000000..582e89e0d
--- /dev/null
+++ b/website/src/images/logos/huggingface_hub.svg
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/website/src/widgets/integration.js b/website/src/widgets/integration.js
index 0de078e0b..cf2320052 100644
--- a/website/src/widgets/integration.js
+++ b/website/src/widgets/integration.js
@@ -8,6 +8,7 @@ import StreamlitLogo from '-!svg-react-loader!../images/logos/streamlit.svg'
 import FastAPILogo from '-!svg-react-loader!../images/logos/fastapi.svg'
 import WandBLogo from '-!svg-react-loader!../images/logos/wandb.svg'
 import RayLogo from '-!svg-react-loader!../images/logos/ray.svg'
+import HuggingFaceHubLogo from '-!svg-react-loader!../images/logos/huggingface_hub.svg'
 
 const LOGOS = {
     dvc: DVCLogo,
@@ -16,6 +17,7 @@ const LOGOS = {
     fastapi: FastAPILogo,
     wandb: WandBLogo,
     ray: RayLogo,
+    huggingface_hub: HuggingFaceHubLogo,
 }
 
 export const IntegrationLogo = ({ name, title, width, height, maxWidth, align, ...props }) => {

eub^b`Z1AX?P`?nybzE*oL(*oB%4OJSKZDI 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 literal 0 HcmV?d00001 diff --git a/website/docs/usage/projects.md b/website/docs/usage/projects.md index d30a50302..cb71f361b 100644 --- a/website/docs/usage/projects.md +++ b/website/docs/usage/projects.md @@ -49,6 +49,7 @@ production. Serve your models and host APIs Distributed and parallel training Track your experiments and results +Upload your pipelines to the Hugging Face Hub ### 1. Clone a project template {#clone} @@ -1013,3 +1014,68 @@ creating variants of the config for a simple hyperparameter grid search and logging the results. + +--- + +### Hugging Face Hub {#huggingface_hub} + +The [Hugging Face Hub](https://huggingface.co/) lets you upload models and share +them with others. It hosts models as Git-based repositories which are storage +spaces that can contain all your files. It support versioning, branches and +custom metadata out-of-the-box, and provides browser-based visualizers for +exploring your models interactively, as well as an API for production use. The +[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub) +package automatically adds the `huggingface-hub` command to your `spacy` CLI if +it's installed. + +> #### Installation +> +> ```cli +> $ pip install spacy-huggingface-hub +> # Check that the CLI is registered +> $ python -m spacy huggingface-hub --help +> ``` + +You can then upload any pipeline packaged with +[`spacy package`](/api/cli#package). Make sure to set `--build wheel` to output +a binary `.whl` file. The uploader will read all metadata from the pipeline +package, including the auto-generated pretty `README.md` and the model details +available in the `meta.json`. For examples, check out the +[spaCy pipelines](https://huggingface.co/spacy) we've uploaded. + +```cli +$ huggingface-cli login +$ python -m spacy package ./en_ner_fashion ./output --build wheel +$ cd ./output/en_ner_fashion-0.0.0/dist +$ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl +``` + +After uploading, you will see the live URL of your pipeline packages, as well as +the direct URL to the model wheel you can install via `pip install`. You'll also +be able to test your pipeline interactively from your browser: + +![Screenshot: interactive NER visualizer](../images/huggingface_hub.jpg) + +In your `project.yml`, you can add a command that uploads your trained and +packaged pipeline to the hub. You can either run this as a manual step, or +automatically as part of a workflow. Make sure to set `--build wheel` when +running `spacy package` to build a wheel file for your pipeline package. + + +```yaml +### project.yml +- name: "push_to_hub" + help: "Upload the trained model to the Hugging Face Hub" + script: + - "python -m spacy huggingface-hub push packages/en_${vars.name}-${vars.version}/dist/en_${vars.name}-${vars.version}-py3-none-any.whl" + deps: + - "packages/en_${vars.name}-${vars.version}/dist/en_${vars.name}-${vars.version}-py3-none-any.whl" +``` + + + +Get started with uploading your models to the Hugging Face hub using our project +template. It trains a simple pipeline, packages it and uploads it if the +packaged model has changed. This makes it easy to deploy your models end-to-end. + + diff --git a/website/docs/usage/v3-1.md b/website/docs/usage/v3-1.md index 5e3181b36..da6fa6070 100644 --- a/website/docs/usage/v3-1.md +++ b/website/docs/usage/v3-1.md @@ -199,6 +199,41 @@ sure you have the [`spacy-lookups-data`](https://github.com/explosion/spacy-lookups-data) package installed, which provides the relevant tables. +### Upload your pipelines to the Hugging Face Hub {#huggingface-hub} + +The [Hugging Face Hub](https://huggingface.co/) lets you upload models and share +them with others, and it now supports spaCy pipelines out-of-the-box. The new +[`spacy-huggingface-hub`](https://github.com/explosion/spacy-huggingface-hub) +package automatically adds the `huggingface-hub` command to your `spacy` CLI. It +lets you upload any pipelines packaged with [`spacy package`](/api/cli#package) +and `--build wheel` and takes care of auto-generating all required meta +information. + +After uploading, you'll get a live URL for your model page that includes all +details, files and interactive visualizers, as well as a direct URL to the wheel +file that you can install via `pip install`. For examples, check out the +[spaCy pipelines](https://huggingface.co/spacy) we've uploaded. + +```cli +$ pip install spacy-huggingface-hub +$ huggingface-cli login +$ python -m spacy package ./en_ner_fashion ./output --build wheel +$ cd ./output/en_ner_fashion-0.0.0/dist +$ python -m spacy huggingface-hub push en_ner_fashion-0.0.0-py3-none-any.whl +``` + +You can also integrate the upload command into your +[project template](/usage/projects#huggingface_hub) to automatically upload your +packaged pipelines after training. + + + +Get started with uploading your models to the Hugging Face hub using our project +template. It trains a simple pipeline, packages it and uploads it if the +packaged model has changed. This makes it easy to deploy your models end-to-end. + + + ## Notes about upgrading from v3.0 {#upgrading} ### Pipeline package version compatibility {#version-compat} diff --git a/website/src/components/code.js b/website/src/components/code.js index 4dd7a8eb8..6e9f0c22e 100644 --- a/website/src/components/code.js +++ b/website/src/components/code.js @@ -14,7 +14,7 @@ import GitHubCode from './github' import classes from '../styles/code.module.sass' const WRAP_THRESHOLD = 30 -const CLI_GROUPS = ['init', 'debug', 'project', 'ray'] +const CLI_GROUPS = ['init', 'debug', 'project', 'ray', 'huggingface-hub'] export default props => (