From fbb2570592e521d59b7668b522401024ff5f87b6 Mon Sep 17 00:00:00 2001 From: Noah Luna <15202580+ngrayluna@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:44:51 -0700 Subject: [PATCH 1/7] Demo landing page --- content/en/guides/integrations/_index.md | 39 +++++++- static/img/Keras_logo.svg | 26 ++++++ static/img/OpenAI-black-monoblossom.svg | 15 +++ static/img/Pytorch-svgrepo-com.svg | 8 ++ static/img/SageMaker.svg | 18 ++++ static/img/Scikit_learn_logo_small.svg | 111 +++++++++++++++++++++++ static/img/SpaCy_logo.svg | 24 +++++ static/img/hf-logo.svg | 8 ++ 8 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 static/img/Keras_logo.svg create mode 100644 static/img/OpenAI-black-monoblossom.svg create mode 100644 static/img/Pytorch-svgrepo-com.svg create mode 100644 static/img/SageMaker.svg create mode 100644 static/img/Scikit_learn_logo_small.svg create mode 100644 static/img/SpaCy_logo.svg create mode 100644 static/img/hf-logo.svg diff --git a/content/en/guides/integrations/_index.md b/content/en/guides/integrations/_index.md index 2afb27ab7c..6176ec5ab7 100644 --- a/content/en/guides/integrations/_index.md +++ b/content/en/guides/integrations/_index.md @@ -7,14 +7,43 @@ weight: 9 url: guides/integrations cascade: - url: guides/integrations/:filename +no_list: true --- -W&B integrations make it fast and easy to set up experiment tracking and data versioning inside existing projects. Check out integrations for ML frameworks such as [PyTorch]({{< relref "pytorch.md" >}}), ML libraries such as [Hugging Face]({{< relref "huggingface.md" >}}), or cloud services such as [Amazon SageMaker]({{< relref "sagemaker.md" >}}). + W&B integrations make it fast and easy to set up experiment tracking and data versioning inside existing projects. Check out integrations for ML frameworks such as [PyTorch]({{< relref "pytorch.md" >}}), ML libraries such as [Hugging Face]({{< relref "huggingface.md" >}}), or cloud services such as [Amazon SageMaker]({{< relref "sagemaker.md" >}}). +{{% cardpane %}} +{{% card header="**Keras**" %}} +
+Keras logo
+{{% /card %}} +{{% card header="**PyTorch**" %}}
+PyTorch logo
+{{% /card %}} +{{% card header="**Hugging Face**" %}}
+Hugging Face logo
+{{% /card %}} +{{% card header="**Open AI**" %}}
+Open AI logo
+{{% /card %}} - +{{% /cardpane %}} -## Related resources -* [Examples](https://github.com/wandb/examples): Try the code with notebook and script examples for each integration. -* [Video Tutorials](https://www.youtube.com/playlist?list=PLD80i8An1OEGajeVo15ohAQYF1Ttle0lk): Learn to use W&B with YouTube video tutorials + + +{{% cardpane %}} +{{% card header="**Amazon SageMaker**" %}}
+SageMaker logo
+{{% /card %}} +{{% card header="**Scikit-Learn**" %}}
+Scikit Learn logo
+{{% /card %}} +{{% card header="**SpaCy**" %}}
+SpaCy logo
+{{% /card %}} +{{% card header="**Keras**" %}} +
+Keras logo
+{{% /card %}} +{{% /cardpane %}} diff --git a/static/img/Keras_logo.svg b/static/img/Keras_logo.svg new file mode 100644 index 0000000000..8a752a6e8c --- /dev/null +++ b/static/img/Keras_logo.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + diff --git a/static/img/OpenAI-black-monoblossom.svg b/static/img/OpenAI-black-monoblossom.svg new file mode 100644 index 0000000000..832fa6a5f9 --- /dev/null +++ b/static/img/OpenAI-black-monoblossom.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/static/img/Pytorch-svgrepo-com.svg b/static/img/Pytorch-svgrepo-com.svg new file mode 100644 index 0000000000..0af4dcdba4 --- /dev/null +++ b/static/img/Pytorch-svgrepo-com.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/static/img/SageMaker.svg b/static/img/SageMaker.svg new file mode 100644 index 0000000000..542ea19dd3 --- /dev/null +++ b/static/img/SageMaker.svg @@ -0,0 +1,18 @@ + + + + Icon-Architecture/64/Arch_AWS-SageMaker_64 + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/Scikit_learn_logo_small.svg b/static/img/Scikit_learn_logo_small.svg new file mode 100644 index 0000000000..5a32f79792 --- /dev/null +++ b/static/img/Scikit_learn_logo_small.svg @@ -0,0 +1,111 @@ + + + +image/svg+xml + + + + + + + + + + + + + + +scikit + + + + + + + \ No newline at end of file diff --git a/static/img/SpaCy_logo.svg b/static/img/SpaCy_logo.svg new file mode 100644 index 0000000000..6ecbf80cba --- /dev/null +++ b/static/img/SpaCy_logo.svg @@ -0,0 +1,24 @@ + + + + + + diff --git a/static/img/hf-logo.svg b/static/img/hf-logo.svg new file mode 100644 index 0000000000..ab959d165f --- /dev/null +++ b/static/img/hf-logo.svg @@ -0,0 +1,8 @@ + + + + + + + + From 7ec8f8939dd820263be8978c2f175c087e018eac Mon Sep 17 00:00:00 2001 From: Noah Luna <15202580+ngrayluna@users.noreply.github.com> Date: Fri, 5 Sep 2025 11:13:14 -0700 Subject: [PATCH 2/7] Vertically and horizontally aligned logos --- content/en/guides/integrations/_index.md | 38 ++++++++++++++---------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/content/en/guides/integrations/_index.md b/content/en/guides/integrations/_index.md index 6176ec5ab7..0e48383196 100644 --- a/content/en/guides/integrations/_index.md +++ b/content/en/guides/integrations/_index.md @@ -14,17 +14,20 @@ no_list: true {{% cardpane %}} {{% card header="**Keras**" %}} -
-Keras logo
+
+Keras logo
{{% /card %}} -{{% card header="**PyTorch**" %}}
-PyTorch logo
+{{% card header="**PyTorch**" %}} +
+PyTorch logo
{{% /card %}} -{{% card header="**Hugging Face**" %}}
-Hugging Face logo
+{{% card header="**Hugging Face**" %}} +
+Hugging Face logo
{{% /card %}} -{{% card header="**Open AI**" %}}
-Open AI logo
+{{% card header="**Open AI**" %}} +
+Open AI logo
{{% /card %}} {{% /cardpane %}} @@ -33,17 +36,20 @@ no_list: true {{% cardpane %}} -{{% card header="**Amazon SageMaker**" %}}
-SageMaker logo
+{{% card header="**Amazon SageMaker**" %}} +
+SageMaker logo
{{% /card %}} -{{% card header="**Scikit-Learn**" %}}
-Scikit Learn logo
+{{% card header="**Scikit-Learn**" %}} +
+Scikit Learn logo
{{% /card %}} -{{% card header="**SpaCy**" %}}
-SpaCy logo
+{{% card header="**SpaCy**" %}} +
+SpaCy logo
{{% /card %}} {{% card header="**Keras**" %}} -
-Keras logo
+
+Keras logo
{{% /card %}} {{% /cardpane %}} From 09d00daba789397f66dda88be1b2ab5fce3f337a Mon Sep 17 00:00:00 2001 From: Noah Luna <15202580+ngrayluna@users.noreply.github.com> Date: Fri, 5 Sep 2025 16:07:27 -0700 Subject: [PATCH 3/7] Added another row. --- content/en/guides/integrations/_index.md | 51 ++- static/img/Lightning_Logo_v2.png | Bin 0 -> 5287 bytes static/img/Ray_tune.png | Bin 0 -> 38867 bytes static/img/XGBoost_logo.svg | 457 +++++++++++++++++++++++ static/img/pyg_logo.png | Bin 0 -> 22196 bytes static/img/yolo_logo.png | Bin 0 -> 57100 bytes 6 files changed, 492 insertions(+), 16 deletions(-) create mode 100644 static/img/Lightning_Logo_v2.png create mode 100644 static/img/Ray_tune.png create mode 100644 static/img/XGBoost_logo.svg create mode 100644 static/img/pyg_logo.png create mode 100644 static/img/yolo_logo.png diff --git a/content/en/guides/integrations/_index.md b/content/en/guides/integrations/_index.md index 0e48383196..eaea4f1c3e 100644 --- a/content/en/guides/integrations/_index.md +++ b/content/en/guides/integrations/_index.md @@ -13,6 +13,14 @@ no_list: true W&B integrations make it fast and easy to set up experiment tracking and data versioning inside existing projects. Check out integrations for ML frameworks such as [PyTorch]({{< relref "pytorch.md" >}}), ML libraries such as [Hugging Face]({{< relref "huggingface.md" >}}), or cloud services such as [Amazon SageMaker]({{< relref "sagemaker.md" >}}). {{% cardpane %}} +{{% card header="**Open AI**" %}} +
+Open AI logo
+{{% /card %}} +{{% card header="**Hugging Face**" %}} +
+Hugging Face logo
+{{% /card %}} {{% card header="**Keras**" %}}
Keras logo
@@ -21,35 +29,46 @@ no_list: true
PyTorch logo
{{% /card %}} -{{% card header="**Hugging Face**" %}} -
-Hugging Face logo
-{{% /card %}} -{{% card header="**Open AI**" %}} -
-Open AI logo
-{{% /card %}} - {{% /cardpane %}} - {{% cardpane %}} +{{% card header="**PyG**" %}} +
+PyTorch Geometric logo
+{{% /card %}} +{{% card header="**PyTorch Lightning**" %}} +
+PyTorch Lightning logo
+{{% /card %}} {{% card header="**Amazon SageMaker**" %}} -
+
SageMaker logo
{{% /card %}} {{% card header="**Scikit-Learn**" %}} -
+
Scikit Learn logo
{{% /card %}} +{{% /cardpane %}} + + + +{{% cardpane %}} {{% card header="**SpaCy**" %}}
SpaCy logo
{{% /card %}} -{{% card header="**Keras**" %}} -
-Keras logo
+{{% card header="**Ray tune**" %}} +
+Ray Tune logo
{{% /card %}} -{{% /cardpane %}} +{{% card header="**XGBoost**" %}} +
+XGBoost logo
+{{% /card %}} +{{% card header="**YOLO**" %}} +
+YOLO logo
+{{% /card %}} +{{% /cardpane %}} \ No newline at end of file diff --git a/static/img/Lightning_Logo_v2.png b/static/img/Lightning_Logo_v2.png new file mode 100644 index 0000000000000000000000000000000000000000..bb63f4337adb104286187de0b25ac9b83c2727bd GIT binary patch literal 5287 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

RgXN372C2Ky)s@E)#I7v2DzFS%`6~;X!nLO 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 literal 0 HcmV?d00001 diff --git a/static/img/XGBoost_logo.svg b/static/img/XGBoost_logo.svg new file mode 100644 index 0000000000..0a34667701 --- /dev/null +++ b/static/img/XGBoost_logo.svg @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/pyg_logo.png b/static/img/pyg_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2add72aceccd976f8802ad0eac96d25de878d1bf GIT binary patch literal 22196 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⩔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 literal 0 HcmV?d00001 diff --git a/static/img/yolo_logo.png b/static/img/yolo_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e8bc73930004478d0cd57fd2f7303db3945c87ef GIT binary patch literal 57100 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 literal 0 HcmV?d00001 From 67cd6cb842ea2ce88311d415f968e75bbc64648a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 5 Sep 2025 23:08:13 +0000 Subject: [PATCH 4/7] Optimised images with calibre/image-actions --- static/img/Lightning_Logo_v2.png | Bin 5287 -> 1958 bytes static/img/Ray_tune.png | Bin 38867 -> 10469 bytes static/img/pyg_logo.png | Bin 22196 -> 10041 bytes static/img/yolo_logo.png | Bin 57100 -> 24960 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/Lightning_Logo_v2.png b/static/img/Lightning_Logo_v2.png index bb63f4337adb104286187de0b25ac9b83c2727bd..a566478c01b0c3a302404f5f9d7cca9ef8cde5bf 100644 GIT binary patch literal 1958 zcmb_dZBSEJ8jfFsf-W7qR>hjQjc$s{hg;e3VW1-9V}*-~+Y|{=J4Ixv#26(c5VC8l zR2>#E&?rryGhAie3Ymr|wB(~I1sX_@iyH_9Qk%he1_Dy95HE!6iK8>So&DFnGiT0w zp65Q#dEWcuy%+W&tW|*_fg}=X6^EU4fJ9n^``7X%5Sd>d(E_*C`%(@jr{oF?!$u|H zqlMd@k{3m6>cy3iU3U5al1@72485tcCPhME#YuLCh(ro{-MBz!IO`1Q}q`k19c^W0a0 z-|YFV*ONT!sJVZKB7fRbb6`e1DmY%;8EIlV$CO@Ap!;|C=L5@vx6TE)7wp?Kxw8*E zDs5hIXEn3P6WQ;1sO_t{#d9{9^JPI9eLMN~sQ3?4>lnpX^NRmsPx!HxQ9m9+$tW1h z?5sYfD-9NvrG>@0E3*4NZQ4vnqHSkcFy(QG?^JVBU;foRy|y(eC$+B-(gRUtGf$5; zPTkC|XJmZco>MhUyrI33tN*X7TkpT6{lD9PXwMCPuW>3PTU?q9f=-5L#%;~|D9dqw z(Aq-{F!4AwJ$gy+MDi$X6&##9i z6Taq#6KE;hck;^*XpB8X#}DaZjEWu}zEXU-W|PExF4!ehgC374U!9L~l?%_NdJ(A*(8=pZIGQl;`RT{KHwH0*A>;_vpu<1ceEbCE zepWKKW>XwEcimAiva6BzKB4A%KSKMfN+zEnYFvv=8nH|M&D8GRWcUX@2jeGSPbkcC zGNq}YoZoBbM1*=D&KfN;;+s5|w-u(#WUN#!c;vr70`0Xr}L;~c(&0h1&PuN@#gU2EsQo#zP z?%KruQGJs*BEn18cz zf^~@W3rNWi{}TBhFU#ZS9P~5t||LCTN1heT!dMG~+D}DTKut%(PbysK5_Uz?WCOifFh!l!N$i$>g3D4}X!&}u7k1ovH>)cK zP?^LB&?XY&!eG-Z;*^ymC%($+i2*%i5EM)Ees8*S>xl|?{T<(;RxBI@c@Vo+S`fz$ zR*bv{Gf#(GwvX-FD;*0MLH;HBQu2G*s;?($5&* zOnJ{nx()luHjhUeF_nA59L2Xc2y8p+vg}bK)y!5n$joHDF|>&1tYS1y*>utF^AbL+ zCsuD96_#;l^v^8SZ_o$*q?uf={#oC?t!RjNyqM<~XkH5ZwO=5Cf|gf;|0D&n^qCf@ z3AESwJzAPuBEqe+}}{NyV3yG?#SPBN0zn0VyuzX8h5-PHg9 literal 5287 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 literal 38867 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

RgXN372C2Ky)s@E)#I7v2DzFS%`6~;X!nLO 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 diff --git a/static/img/pyg_logo.png b/static/img/pyg_logo.png index 2add72aceccd976f8802ad0eac96d25de878d1bf..b9235a94f3c57f72bbe49eef7305766ed9077071 100644 GIT binary patch literal 10041 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 ABCa2*rS{q&xO9TC?`oIm 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 literal 22196 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⩔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 diff --git a/static/img/yolo_logo.png b/static/img/yolo_logo.png index e8bc73930004478d0cd57fd2f7303db3945c87ef..9770c71417e743932c4b5d94add0c58163f243de 100644 GIT binary patch literal 24960 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 literal 57100 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 From e9fb0513a253aaacc79fd89c26a4344958bbb0be Mon Sep 17 00:00:00 2001 From: Noah Luna <15202580+ngrayluna@users.noreply.github.com> Date: Mon, 8 Sep 2025 08:54:16 -0700 Subject: [PATCH 5/7] Updated links --- content/en/guides/integrations/_index.md | 30 ++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/content/en/guides/integrations/_index.md b/content/en/guides/integrations/_index.md index eaea4f1c3e..793d2fd080 100644 --- a/content/en/guides/integrations/_index.md +++ b/content/en/guides/integrations/_index.md @@ -14,19 +14,19 @@ no_list: true {{% cardpane %}} {{% card header="**Open AI**" %}} -

+
Open AI logo
{{% /card %}} {{% card header="**Hugging Face**" %}} -
+
Hugging Face logo
{{% /card %}} {{% card header="**Keras**" %}} -
+
Keras logo
{{% /card %}} {{% card header="**PyTorch**" %}} -
+
PyTorch logo
{{% /card %}} {{% /cardpane %}} @@ -35,19 +35,19 @@ no_list: true {{% cardpane %}} {{% card header="**PyG**" %}} -
+
PyTorch Geometric logo
{{% /card %}} {{% card header="**PyTorch Lightning**" %}} -
+
PyTorch Lightning logo
{{% /card %}} {{% card header="**Amazon SageMaker**" %}} -
+
SageMaker logo
{{% /card %}} {{% card header="**Scikit-Learn**" %}} -
+
Scikit Learn logo
{{% /card %}} {{% /cardpane %}} @@ -56,19 +56,25 @@ no_list: true {{% cardpane %}} {{% card header="**SpaCy**" %}} -
+
SpaCy logo
{{% /card %}} {{% card header="**Ray tune**" %}} -
+
Ray Tune logo
{{% /card %}} {{% card header="**XGBoost**" %}} -
+
XGBoost logo
{{% /card %}} {{% card header="**YOLO**" %}}
YOLO logo
{{% /card %}} -{{% /cardpane %}} \ No newline at end of file +{{% /cardpane %}} + + \ No newline at end of file From 79d773819e4f12c14cd945cdc3be6272f626e4bc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 8 Sep 2025 15:55:18 +0000 Subject: [PATCH 6/7] Optimised images with calibre/image-actions --- static/img/Ray_tune.png | Bin 10469 -> 9776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/img/Ray_tune.png b/static/img/Ray_tune.png index 92aeca17258236aa0c04e10e9d66534144cf084b..0afa2417673cbcfc0f5c80187ecefabaf6fed851 100644 GIT binary patch literal 9776 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 O{3VEcFJ?(#L(cQ-BaQ?c&u($n~C&eZBQsg-y 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 From cbf200ad501018ad7094b9ca448ca021178f8ca0 Mon Sep 17 00:00:00 2001 From: Noah Luna <15202580+ngrayluna@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:00:48 -0700 Subject: [PATCH 7/7] removed some --- content/en/guides/integrations/accelerate.md | 88 ----- content/en/guides/integrations/autotrain.md | 142 --------- .../integrations/azure-openai-fine-tuning.md | 49 --- content/en/guides/integrations/catalyst.md | 19 -- .../guides/integrations/cohere-fine-tuning.md | 63 ---- content/en/guides/integrations/composer.md | 101 ------ content/en/guides/integrations/databricks.md | 65 ---- content/en/guides/integrations/deepchecks.md | 59 ---- content/en/guides/integrations/deepchem.md | 126 -------- content/en/guides/integrations/diffusers.md | 300 ------------------ content/en/guides/integrations/docker.md | 29 -- .../guides/integrations/farama-gymnasium.md | 17 - .../en/guides/integrations/fastai/_index.md | 278 ---------------- content/en/guides/integrations/fastai/v1.md | 71 ----- content/en/guides/integrations/hydra.md | 101 ------ .../integrations/kubeflow-pipelines-kfp.md | 201 ------------ content/en/guides/integrations/metaflow.md | 218 ------------- content/en/guides/integrations/mmengine.md | 125 -------- content/en/guides/integrations/mmf.md | 55 ---- .../en/guides/integrations/paddledetection.md | 120 ------- content/en/guides/integrations/paddleocr.md | 113 ------- content/en/guides/integrations/prodigy.md | 41 --- content/en/guides/integrations/skorch.md | 60 ---- .../guides/integrations/stable-baselines-3.md | 90 ------ content/en/guides/integrations/ultralytics.md | 144 --------- .../guides/integrations/w-and-b-for-julia.md | 39 --- 26 files changed, 2714 deletions(-) delete mode 100644 content/en/guides/integrations/accelerate.md delete mode 100644 content/en/guides/integrations/autotrain.md delete mode 100644 content/en/guides/integrations/azure-openai-fine-tuning.md delete mode 100644 content/en/guides/integrations/catalyst.md delete mode 100644 content/en/guides/integrations/cohere-fine-tuning.md delete mode 100644 content/en/guides/integrations/composer.md delete mode 100644 content/en/guides/integrations/databricks.md delete mode 100644 content/en/guides/integrations/deepchecks.md delete mode 100644 content/en/guides/integrations/deepchem.md delete mode 100644 content/en/guides/integrations/diffusers.md delete mode 100644 content/en/guides/integrations/docker.md delete mode 100644 content/en/guides/integrations/farama-gymnasium.md delete mode 100644 content/en/guides/integrations/fastai/_index.md delete mode 100644 content/en/guides/integrations/fastai/v1.md delete mode 100644 content/en/guides/integrations/hydra.md delete mode 100644 content/en/guides/integrations/kubeflow-pipelines-kfp.md delete mode 100644 content/en/guides/integrations/metaflow.md delete mode 100644 content/en/guides/integrations/mmengine.md delete mode 100644 content/en/guides/integrations/mmf.md delete mode 100644 content/en/guides/integrations/paddledetection.md delete mode 100644 content/en/guides/integrations/paddleocr.md delete mode 100644 content/en/guides/integrations/prodigy.md delete mode 100644 content/en/guides/integrations/skorch.md delete mode 100644 content/en/guides/integrations/stable-baselines-3.md delete mode 100644 content/en/guides/integrations/ultralytics.md delete mode 100644 content/en/guides/integrations/w-and-b-for-julia.md diff --git a/content/en/guides/integrations/accelerate.md b/content/en/guides/integrations/accelerate.md deleted file mode 100644 index 37034dc9f9..0000000000 --- a/content/en/guides/integrations/accelerate.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -description: Training and inference at scale made simple, efficient and adaptable -menu: - default: - identifier: accelerate - parent: integrations -title: Hugging Face Accelerate -weight: 140 ---- - -Hugging Face Accelerate is a library that enables the same PyTorch code to run across any distributed configuration, to simplify model training and inference at scale. - -Accelerate includes a W&B Tracker which we show how to use below. You can also read more about [Accelerate Trackers in Hugging Face](https://huggingface.co/docs/accelerate/main/en/usage_guides/tracking). - -## Start logging with Accelerate - -To get started with Accelerate and W&B you can follow the pseudocode below: - -```python -from accelerate import Accelerator - -# Tell the Accelerator object to log with wandb -accelerator = Accelerator(log_with="wandb") - -# Initialise your wandb run, passing wandb parameters and any config information -accelerator.init_trackers( - project_name="my_project", - config={"dropout": 0.1, "learning_rate": 1e-2} - init_kwargs={"wandb": {"entity": "my-wandb-team"}} - ) - -... - -# Log to wandb by calling `accelerator.log`, `step` is optional -accelerator.log({"train_loss": 1.12, "valid_loss": 0.8}, step=global_step) - - -# Make sure that the wandb tracker finishes correctly -accelerator.end_training() -``` - -Explaining more, you need to: -1. Pass `log_with="wandb"` when initialising the Accelerator class -2. Call the [`init_trackers`](https://huggingface.co/docs/accelerate/main/en/package_reference/accelerator#accelerate.Accelerator.init_trackers) method and pass it: -- a project name via `project_name` -- any parameters you want to pass to [`wandb.init()`]({{< relref "/ref/python/sdk/functions/init.md" >}}) via a nested dict to `init_kwargs` -- any other experiment config information you want to log to your wandb run, via `config` -3. Use the `.log` method to log to Weigths & Biases; the `step` argument is optional -4. Call `.end_training` when finished training - -## Access the W&B tracker - -To access the W&B tracker, use the `Accelerator.get_tracker()` method. Pass in the string corresponding to a tracker’s `.name` attribute, which returns the tracker on the `main` process. - -```python -wandb_tracker = accelerator.get_tracker("wandb") - -``` -From there you can interact with wandb’s run object like normal: - -```python -wandb_tracker.log_artifact(some_artifact_to_log) -``` - -{{% alert color="secondary" %}} -Trackers built in Accelerate will automatically execute on the correct process, so if a tracker is only meant to be ran on the main process it will do so automatically. - -If you want to truly remove Accelerate’s wrapping entirely, you can achieve the same outcome with: - -```python -wandb_tracker = accelerator.get_tracker("wandb", unwrap=True) -with accelerator.on_main_process: - wandb_tracker.log_artifact(some_artifact_to_log) -``` -{{% /alert %}} - -## Accelerate Articles -Below is an Accelerate article you may enjoy - -
- -HuggingFace Accelerate Super Charged With W&B - -* In this article, we'll look at what HuggingFace Accelerate has to offer and how simple it is to perform distributed training and evaluation, while logging results to W&B. - -Read the [Hugging Face Accelerate Super Charged with W&B report](https://wandb.ai/gladiator/HF%20Accelerate%20+%20W&B/reports/Hugging-Face-Accelerate-Super-Charged-with-Weights-Biases--VmlldzoyNzk3MDUx?utm_source=docs&utm_medium=docs&utm_campaign=accelerate-docs). -
-

\ No newline at end of file diff --git a/content/en/guides/integrations/autotrain.md b/content/en/guides/integrations/autotrain.md deleted file mode 100644 index 15580da8a7..0000000000 --- a/content/en/guides/integrations/autotrain.md +++ /dev/null @@ -1,142 +0,0 @@ ---- -menu: - default: - identifier: autotrain - parent: integrations -title: Hugging Face AutoTrain -weight: 130 ---- -[Hugging Face AutoTrain](https://huggingface.co/docs/autotrain/index) is a no-code tool for training state-of-the-art models for Natural Language Processing (NLP) tasks, for Computer Vision (CV) tasks, and for Speech tasks and even for Tabular tasks. - -[W&B](https://wandb.com/) is directly integrated into Hugging Face AutoTrain, providing experiment tracking and config management. It's as easy as using a single parameter in the CLI command for your experiments. - -{{< img src="/images/integrations/hf-autotrain-1.png" alt="Experiment metrics logging" >}} - -## Install prerequisites - -Install `autotrain-advanced` and `wandb`. - -{{< tabpane text=true >}} - -{{% tab header="Command Line" value="script" %}} - -```shell -pip install --upgrade autotrain-advanced wandb -``` - -{{% /tab %}} - -{{% tab header="Notebook" value="notebook" %}} - -```notebook -!pip install --upgrade autotrain-advanced wandb -``` - -{{% /tab %}} - -{{< /tabpane >}} - -To demonstrate these changes, this page fine-tines an LLM on a math dataset to achieve SoTA result in `pass@1` on the [GSM8k Benchmarks](https://github.com/openai/grade-school-math). - -## Prepare the dataset - -Hugging Face AutoTrain expects your CSV custom dataset to have a specific format to work properly. - -- Your training file must contain a `text` column, which the training uses. For best results, the `text` column's data must conform to the `### Human: Question?### Assistant: Answer.` format. Review a great example in [`timdettmers/openassistant-guanaco`](https://huggingface.co/datasets/timdettmers/openassistant-guanaco). - - However, the [MetaMathQA dataset](https://huggingface.co/datasets/meta-math/MetaMathQA) includes the columns `query`, `response`, and `type`. First, pre-process this dataset. Remove the `type` column and combine the content of the `query` and `response` columns into a new `text` column in the `### Human: Query?### Assistant: Response.` format. Training uses the resulting dataset, [`rishiraj/guanaco-style-metamath`](https://huggingface.co/datasets/rishiraj/guanaco-style-metamath). - -## Train using `autotrain` - -You can start training using the `autotrain` advanced from the command line or a notebook. Use the `--log` argument, or use `--log wandb` to log your results to a [W&B Run]({{< relref "/guides/models/track/runs/" >}}). - -{{< tabpane text=true >}} - -{{% tab header="Command Line" value="script" %}} - -```shell -autotrain llm \ - --train \ - --model HuggingFaceH4/zephyr-7b-alpha \ - --project-name zephyr-math \ - --log wandb \ - --data-path data/ \ - --text-column text \ - --lr 2e-5 \ - --batch-size 4 \ - --epochs 3 \ - --block-size 1024 \ - --warmup-ratio 0.03 \ - --lora-r 16 \ - --lora-alpha 32 \ - --lora-dropout 0.05 \ - --weight-decay 0.0 \ - --gradient-accumulation 4 \ - --logging_steps 10 \ - --fp16 \ - --use-peft \ - --use-int4 \ - --merge-adapter \ - --push-to-hub \ - --token \ - --repo-id -``` - -{{% /tab %}} - -{{% tab header="Notebook" value="notebook" %}} - -```notebook -# Set hyperparameters -learning_rate = 2e-5 -num_epochs = 3 -batch_size = 4 -block_size = 1024 -trainer = "sft" -warmup_ratio = 0.03 -weight_decay = 0. -gradient_accumulation = 4 -lora_r = 16 -lora_alpha = 32 -lora_dropout = 0.05 -logging_steps = 10 - -# Run training -!autotrain llm \ - --train \ - --model "HuggingFaceH4/zephyr-7b-alpha" \ - --project-name "zephyr-math" \ - --log "wandb" \ - --data-path data/ \ - --text-column text \ - --lr str(learning_rate) \ - --batch-size str(batch_size) \ - --epochs str(num_epochs) \ - --block-size str(block_size) \ - --warmup-ratio str(warmup_ratio) \ - --lora-r str(lora_r) \ - --lora-alpha str(lora_alpha) \ - --lora-dropout str(lora_dropout) \ - --weight-decay str(weight_decay) \ - --gradient-accumulation str(gradient_accumulation) \ - --logging-steps str(logging_steps) \ - --fp16 \ - --use-peft \ - --use-int4 \ - --merge-adapter \ - --push-to-hub \ - --token str(hf_token) \ - --repo-id "rishiraj/zephyr-math" -``` - -{{% /tab %}} - -{{< /tabpane >}} - - -{{< img src="/images/integrations/hf-autotrain-2.gif" alt="Experiment config saving" >}} - -## More Resources - -* [AutoTrain Advanced now supports Experiment Tracking](https://huggingface.co/blog/rishiraj/log-autotrain) by [Rishiraj Acharya](https://huggingface.co/rishiraj). -* [Hugging Face AutoTrain Docs](https://huggingface.co/docs/autotrain/index) \ No newline at end of file diff --git a/content/en/guides/integrations/azure-openai-fine-tuning.md b/content/en/guides/integrations/azure-openai-fine-tuning.md deleted file mode 100644 index fcb6a5b8dc..0000000000 --- a/content/en/guides/integrations/azure-openai-fine-tuning.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -description: How to Fine-Tune Azure OpenAI models using W&B. -menu: - default: - identifier: azure-openai-fine-tuning - parent: integrations -title: Azure OpenAI Fine-Tuning -weight: 20 ---- - -## Introduction -Fine-tuning GPT-3.5 or GPT-4 models on Microsoft Azure using W&B tracks, analyzes, and improves model performance by automatically capturing metrics and facilitating systematic evaluation through W&B's experiment tracking and evaluation tools. - -{{< img src="/images/integrations/aoai_ft_plot.png" alt="Azure OpenAI fine-tuning metrics" >}} - -## Prerequisites -- Set up Azure OpenAI service according to [official Azure documentation](https://wandb.me/aoai-wb-int). -- Configure a W&B account with an API key. - -## Workflow overview - -### 1. Fine-tuning setup -- Prepare training data according to Azure OpenAI requirements. -- Configure the fine-tuning job in Azure OpenAI. -- W&B automatically tracks the fine-tuning process, logging metrics and hyperparameters. - -### 2. Experiment tracking -During fine-tuning, W&B captures: -- Training and validation metrics -- Model hyperparameters -- Resource utilization -- Training artifacts - -### 3. Model evaluation -After fine-tuning, use [W&B Weave](https://weave-docs.wandb.ai) to: -- Evaluate model outputs against reference datasets -- Compare performance across different fine-tuning runs -- Analyze model behavior on specific test cases -- Make data-driven decisions for model selection - -## Real-world example -* Explore the [medical note generation demo](https://wandb.me/aoai-ft-colab) to see how this integration facilitates: - - Systematic tracking of fine-tuning experiments - - Model evaluation using domain-specific metrics -* Go through an [interactive demo of fine-tuning a notebook](https://colab.research.google.com/github/wandb/examples/blob/master/colabs/azure/azure_gpt_medical_notes.ipynb) - -## Additional resources -- [Azure OpenAI W&B Integration Guide](https://wandb.me/aoai-wb-int) -- [Azure OpenAI Fine-tuning Documentation](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-python) \ No newline at end of file diff --git a/content/en/guides/integrations/catalyst.md b/content/en/guides/integrations/catalyst.md deleted file mode 100644 index 838b7284ff..0000000000 --- a/content/en/guides/integrations/catalyst.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -description: How to integrate W&B for Catalyst, a Pytorch framework. -menu: - default: - identifier: catalyst - parent: integrations -title: Catalyst -weight: 30 ---- - -[Catalyst](https://github.com/catalyst-team/catalyst) is a PyTorch framework for deep learning R&D that focuses on reproducibility, rapid experimentation, and codebase reuse so you can create something new. - -Catalyst includes a W&B integration for logging parameters, metrics, images, and other artifacts. - -Check out their [documentation of the integration](https://catalyst-team.github.io/catalyst/api/loggers.html#catalyst.loggers.wandb.WandbLogger), which includes examples using Python and Hydra. - -## Interactive Example - -Run an [example colab](https://colab.research.google.com/drive/1PD0LnXiADCtt4mu7bzv7VfQkFXVrPxJq?usp=sharing) to see Catalyst and W&B integration in action. \ No newline at end of file diff --git a/content/en/guides/integrations/cohere-fine-tuning.md b/content/en/guides/integrations/cohere-fine-tuning.md deleted file mode 100644 index f39e8ac1a6..0000000000 --- a/content/en/guides/integrations/cohere-fine-tuning.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -description: How to Fine-Tune Cohere models using W&B. -menu: - default: - identifier: cohere-fine-tuning - parent: integrations -title: Cohere fine-tuning -weight: 40 ---- -With W&B you can log your Cohere model's fine-tuning metrics and configuration to analyze and understand the performance of your models and share the results with your colleagues. - -This [guide from Cohere](https://docs.cohere.com/page/convfinqa-finetuning-wandb) has a full example of how to kick off a fine-tuning run and you can find the [Cohere API docs here](https://docs.cohere.com/reference/createfinetunedmodel#request.body.settings.wandb) - -## Log your Cohere fine-tuning results - -To add Cohere fine-tuning logging to your W&B workspace: - -1. Create a `WandbConfig` with your W&B API key, W&B `entity` and `project` name. You can find your W&B API key at https://wandb.ai/authorize - -2. Pass this config to the `FinetunedModel` object along with your model name, dataset and hyperparameters to kick off your fine-tuning run. - - - ```python - from cohere.finetuning import WandbConfig, FinetunedModel - - # create a config with your W&B details - wandb_ft_config = WandbConfig( - api_key="", - entity="my-entity", # must be a valid enitity associated with the provided API key - project="cohere-ft", - ) - - ... # set up your datasets and hyperparameters - - # start a fine-tuning run on cohere - cmd_r_finetune = co.finetuning.create_finetuned_model( - request=FinetunedModel( - name="command-r-ft", - settings=Settings( - base_model=... - dataset_id=... - hyperparameters=... - wandb=wandb_ft_config # pass your W&B config here - ), - ), - ) - ``` - -3. View your model's fine-tuning training and validation metrics and hyperparameters in the W&B project that you created. - - {{< img src="/images/integrations/cohere_ft.png" alt="Cohere fine-tuning dashboard" >}} - - -## Organize runs - -Your W&B runs are automatically organized and can be filtered/sorted based on any configuration parameter such as job type, base model, learning rate and any other hyper-parameter. - -In addition, you can rename your runs, add notes or create tags to group them. - - -## Resources - -* [Cohere Fine-tuning Example](https://github.com/cohere-ai/notebooks/blob/kkt_ft_cookbooks/notebooks/finetuning/convfinqa_finetuning_wandb.ipynb) \ No newline at end of file diff --git a/content/en/guides/integrations/composer.md b/content/en/guides/integrations/composer.md deleted file mode 100644 index 0f3a2992a2..0000000000 --- a/content/en/guides/integrations/composer.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -description: State of the art algorithms to train your neural networks -menu: - default: - identifier: composer - parent: integrations -title: MosaicML Composer -weight: 230 ---- -{{< cta-button colabLink="https://github.com/wandb/examples/blob/master/colabs/mosaicml/MosaicML_Composer_and_wandb.ipynb" >}} - -[Composer](https://github.com/mosaicml/composer) is a library for training neural networks better, faster, and cheaper. It contains many state-of-the-art methods for accelerating neural network training and improving generalization, along with an optional [Trainer](https://docs.mosaicml.com/projects/composer/en/stable/trainer/using_the_trainer.html) API that makes _composing_ many different enhancements easy. - -W&B provides a lightweight wrapper for logging your ML experiments. But you don't need to combine the two yourself: W&B is incorporated directly into the Composer library via the [WandBLogger](https://docs.mosaicml.com/projects/composer/en/stable/trainer/file_uploading.html#weights-biases-artifacts). - -## Start logging to W&B - -```python -from composer import Trainer -from composer.loggers import WandBLogger - -trainer = Trainer(..., logger=WandBLogger()) -``` - -{{< img src="/images/integrations/n6P7K4M.gif" alt="Interactive dashboards" >}} - -## Use Composer's `WandBLogger` - -The Composer library uses [WandBLogger](https://docs.mosaicml.com/projects/composer/en/stable/trainer/file_uploading.html#weights-biases-artifacts) class in the `Trainer` to log metrics to W&B. It is as simple as instantiating the logger and passing it to the `Trainer`. - -```python -wandb_logger = WandBLogger(project="gpt-5", log_artifacts=True) -trainer = Trainer(logger=wandb_logger) -``` - -## Logger arguments - -Below the parameters for `WandbLogger`, see the [Composer documentation](https://docs.mosaicml.com/projects/composer/en/stable/api_reference/generated/composer.loggers.WandBLogger.html) for a full list and description. - -| Parameter | Description | -| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `project` | W&B Project name (str, optional) -| `group` | W&B group name (str, optional) -| `name` | W&B Run name. If not specified, the State.run_name is used (str, optional) -| `entity` | W&B entity name, such as your username or W&B Team name (str, optional) -| `tags` | W&B tags (List[str], optional) -| `log_artifacts` | Whether to log checkpoints to wandb, default: `false` (bool, optional)| -| `rank_zero_only` | Whether to log only on the rank-zero process. When logging artifacts, it is highly recommended to log on all ranks. Artifacts from ranks ≥1 are not stored, which may discard pertinent information. For example, when using Deepspeed ZeRO, it would be impossible to restore from checkpoints without artifacts from all ranks, default: `True` (bool, optional) -| `init_kwargs` | Params to pass to `wandb.init()` such as your wandb `config` etc. See the [`wandb.init()` parameters]({{< relref "/ref/python/sdk/functions/init.md" >}}) for parameters that `wandb.init()` accepts. - -A typical usage would be: - -``` -init_kwargs = {"notes":"Testing higher learning rate in this experiment", - "config":{"arch":"Llama", - "use_mixed_precision":True - } - } - -wandb_logger = WandBLogger(log_artifacts=True, init_kwargs=init_kwargs) -``` - -## Log prediction samples - -You can use [Composer's Callbacks](https://docs.mosaicml.com/projects/composer/en/stable/trainer/callbacks.html) system to control when you log to W&B via the `WandBLogger`, in this example a sample of the validation images and predictions is logged: - -```python -import wandb -from composer import Callback, State, Logger - -class LogPredictions(Callback): - def __init__(self, num_samples=100, seed=1234): - super().__init__() - self.num_samples = num_samples - self.data = [] - - def eval_batch_end(self, state: State, logger: Logger): - """Compute predictions per batch and stores them on self.data""" - - if state.timer.epoch == state.max_duration: #on last val epoch - if len(self.data) < self.num_samples: - n = self.num_samples - x, y = state.batch_pair - outputs = state.outputs.argmax(-1) - data = [[wandb.Image(x_i), y_i, y_pred] for x_i, y_i, y_pred in list(zip(x[:n], y[:n], outputs[:n]))] - self.data += data - - def eval_end(self, state: State, logger: Logger): - with wandb.init() as run: - "Create a wandb.Table and logs it" - columns = ['image', 'ground truth', 'prediction'] - table = wandb.Table(columns=columns, data=self.data[:self.num_samples]) - run.log({'sample_table':table}, step=int(state.timer.batch)) -... - -trainer = Trainer( - ... - loggers=[WandBLogger()], - callbacks=[LogPredictions()] -) -``` \ No newline at end of file diff --git a/content/en/guides/integrations/databricks.md b/content/en/guides/integrations/databricks.md deleted file mode 100644 index 6ff51d751e..0000000000 --- a/content/en/guides/integrations/databricks.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -description: How to integrate W&B with Databricks. -menu: - default: - identifier: databricks - parent: integrations -title: Databricks -weight: 50 ---- - -W&B integrates with [Databricks](https://www.databricks.com/) by customizing the W&B Jupyter notebook experience in the Databricks environment. - -## Configure Databricks - -1. Install wandb in the cluster - - Navigate to your cluster configuration, choose your cluster, click **Libraries**. Click **Install New**, choose **PyPI**, and add the package `wandb`. - -2. Set up authentication - - To authenticate your W&B account you can add a Databricks secret which your notebooks can query. - - ```bash - # install databricks cli - pip install databricks-cli - - # Generate a token from databricks UI - databricks configure --token - - # Create a scope with one of the two commands (depending if you have security features enabled on databricks): - # with security add-on - databricks secrets create-scope --scope wandb - # without security add-on - databricks secrets create-scope --scope wandb --initial-manage-principal users - - # Add your api_key from: https://app.wandb.ai/authorize - databricks secrets put --scope wandb --key api_key - ``` - -## Examples - -### Simple example - -```python -import os -import wandb - -api_key = dbutils.secrets.get("wandb", "api_key") -wandb.login(key=api_key) - -with wandb.init() as run: - run.log({"foo": 1}) -``` - -### Sweeps - -Setup required (temporary) for notebooks attempting to use wandb.sweep() or wandb.agent(): - -```python -import os - -# These will not be necessary in the future -os.environ["WANDB_ENTITY"] = "my-entity" -os.environ["WANDB_PROJECT"] = "my-project-that-exists" -``` \ No newline at end of file diff --git a/content/en/guides/integrations/deepchecks.md b/content/en/guides/integrations/deepchecks.md deleted file mode 100644 index fac9bcc7bd..0000000000 --- a/content/en/guides/integrations/deepchecks.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -description: How to integrate W&B with DeepChecks. -menu: - default: - identifier: deepchecks - parent: integrations -title: DeepChecks -weight: 60 ---- -{{< cta-button colabLink="https://colab.research.google.com/github/deepchecks/deepchecks/blob/0.5.0-1-g5380093/docs/source/examples/guides/export_outputs_to_wandb.ipynb" >}} - -DeepChecks helps you validate your machine learning models and data, such as verifying your data’s integrity, inspecting its distributions, validating data splits, evaluating your model and comparing between different models, all with minimal effort. - -[Read more about DeepChecks and the wandb integration ->](https://docs.deepchecks.com/stable/general/usage/exporting_results/auto_examples/plot_exports_output_to_wandb.html) - -## Getting Started - -To use DeepChecks with W&B you will first need to sign up for a [W&B account](https://wandb.ai/site). With the W&B integration in DeepChecks you can quickly get started like so: - -```python -import wandb - -wandb.login() - -# import your check from deepchecks -from deepchecks.checks import ModelErrorAnalysis - -# run your check -result = ModelErrorAnalysis() - -# push that result to wandb -result.to_wandb() -``` - -You can also log an entire DeepChecks test suite to W&B. - -```python -import wandb - -wandb.login() - -# import your full_suite tests from deepchecks -from deepchecks.suites import full_suite - -# create and run a DeepChecks test suite -suite_result = full_suite().run(...) - -# push thes results to wandb -# here you can pass any wandb.init configs and arguments you need -suite_result.to_wandb(project="my-suite-project", config={"suite-name": "full-suite"}) -``` - -## Example - -[This Report](https://wandb.ai/cayush/deepchecks/reports/Validate-your-Data-and-Models-with-Deepchecks-and-W-B--VmlldzoxNjY0ODc5) shows off the power of using DeepChecks and W&B. - -{{< img src="/images/integrations/deepchecks_example.png" alt="Deepchecks data validation results" >}} - -Any questions or issues about this W&B integration? Open an issue in the [DeepChecks github repository](https://github.com/deepchecks/deepchecks) and we'll catch it and get you an answer. \ No newline at end of file diff --git a/content/en/guides/integrations/deepchem.md b/content/en/guides/integrations/deepchem.md deleted file mode 100644 index 120cb3ee2d..0000000000 --- a/content/en/guides/integrations/deepchem.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -description: How to integrate W&B with DeepChem library. -menu: - default: - identifier: deepchem - parent: integrations -title: DeepChem -weight: 70 ---- -The [DeepChem library](https://github.com/deepchem/deepchem) provides open source tools that democratize the use of deep-learning in drug discovery, materials science, chemistry, and biology. This W&B integration adds simple and easy-to-use experiment tracking and model checkpointing while training models using DeepChem. - -## DeepChem logging in 3 lines of code - -```python -logger = WandbLogger(…) -model = TorchModel(…, wandb_logger=logger) -model.fit(…) -``` - -{{< img src="/images/integrations/cd.png" alt="DeepChem molecular analysis" >}} - -## Report and Google Colab - -Explore the Using [W&B with DeepChem: Molecular Graph Convolutional Networks](https://wandb.ai/kshen/deepchem_graphconv/reports/Using-W-B-with-DeepChem-Molecular-Graph-Convolutional-Networks--Vmlldzo4MzU5MDc?galleryTag=) article for an example charts generated using the W&B DeepChem integration. - -To dive straight into working code, check out this [Google Colab](https://colab.research.google.com/github/wandb/examples/blob/master/colabs/deepchem/W%26B_x_DeepChem.ipynb). - -## Track experiments - -Set up W&B for DeepChem models of type [KerasModel](https://deepchem.readthedocs.io/en/latest/api_reference/models.html#keras-models) or [TorchModel](https://deepchem.readthedocs.io/en/latest/api_reference/models.html#pytorch-models). - -### Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -### Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="python-notebook" %}} - -```notebook -!pip install wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{< /tabpane >}} - -### Log your training and evaluation data to W&B - -Training loss and evaluation metrics can be automatically logged to W&B. Optional evaluation can be enabled using the DeepChem [ValidationCallback](https://github.com/deepchem/deepchem/blob/master/deepchem/models/callbacks.py), the `WandbLogger` will detect ValidationCallback callback and log the metrics generated. - -{{< tabpane text=true >}} - -{{% tab header="TorchModel" value="torch" %}} - -```python -from deepchem.models import TorchModel, ValidationCallback - -vc = ValidationCallback(…) # optional -model = TorchModel(…, wandb_logger=logger) -model.fit(…, callbacks=[vc]) -logger.finish() -``` - -{{% /tab %}} - -{{% tab header="KerasModel" value="keras" %}} - -```python -from deepchem.models import KerasModel, ValidationCallback - -vc = ValidationCallback(…) # optional -model = KerasModel(…, wandb_logger=logger) -model.fit(…, callbacks=[vc]) -logger.finish() -``` - -{{% /tab %}} - -{{< /tabpane >}} diff --git a/content/en/guides/integrations/diffusers.md b/content/en/guides/integrations/diffusers.md deleted file mode 100644 index e787e8d28c..0000000000 --- a/content/en/guides/integrations/diffusers.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -menu: - default: - identifier: diffusers - parent: integrations -title: Hugging Face Diffusers -weight: 120 ---- -{{< cta-button colabLink="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/diffusers/lcm-diffusers.ipynb" >}} - -[Hugging Face Diffusers](https://huggingface.co/docs/diffusers) is the go-to library for state-of-the-art pre-trained diffusion models for generating images, audio, and even 3D structures of molecules. The W&B integration adds rich, flexible experiment tracking, media visualization, pipeline architecture, and configuration management to interactive centralized dashboards without compromising that ease of use. - -## Next-level logging in just two lines - -Log all the prompts, negative prompts, generated media, and configs associated with your experiment by simply including 2 lines of code. Here are the 2 lines of code to begin logging: - -```python -# import the autolog function -from wandb.integration.diffusers import autolog - -# call the autolog before calling the pipeline -autolog(init=dict(project="diffusers_logging")) -``` - -| {{< img src="/images/integrations/diffusers-autolog-4.gif" alt="Experiment results logging" >}} | -|:--:| -| **An example of how the results of your experiment are logged.** | - -## Get started - -1. Install `diffusers`, `transformers`, `accelerate`, and `wandb`. - - - Command line: - - ```shell - pip install --upgrade diffusers transformers accelerate wandb - ``` - - - Notebook: - - ```bash - !pip install --upgrade diffusers transformers accelerate wandb - ``` - - -2. Use `autolog` to initialize a W&B Run and automatically track the inputs and the outputs from [all supported pipeline calls](https://github.com/wandb/wandb/blob/main/wandb/integration/diffusers/autologger.py#L12-L72). - - You can call the `autolog()` function with the `init` parameter, which accepts a dictionary of parameters required by [`wandb.init()`]({{< relref "/ref/python/sdk/functions/init.md" >}}). - - When you call `autolog()`, it initializes a W&B Run and automatically tracks the inputs and the outputs from [all supported pipeline calls](https://github.com/wandb/wandb/blob/main/wandb/integration/diffusers/autologger.py#L12-L72). - - - Each pipeline call is tracked into its own [table]({{< relref "/guides/models/tables/" >}}) in the workspace, and the configs associated with the pipeline call is appended to the list of workflows in the configs for that run. - - The prompts, negative prompts, and the generated media are logged in a [`wandb.Table`]({{< relref "/guides/models/tables/" >}}). - - All other configs associated with the experiment including seed and the pipeline architecture are stored in the config section for the run. - - The generated media for each pipeline call are also logged in [media panels]({{< relref "/guides/models/track/log/media" >}}) in the run. - - {{% alert %}} - You can find a [list of supported pipeline calls](https://github.com/wandb/wandb/blob/main/wandb/integration/diffusers/autologger.py#L12-L72). In case, you want to request a new feature of this integration or report a bug associated with it, open an issue on the [W&B GitHub issues page](https://github.com/wandb/wandb/issues). - {{% /alert %}} - -## Examples - -### Autologging - -Here is a brief end-to-end example of the autolog in action: - -{{< tabpane text=true >}} -{{% tab header="Script" value="script" %}} -```python -import torch -from diffusers import DiffusionPipeline - -# import the autolog function -from wandb.integration.diffusers import autolog - -# call the autolog before calling the pipeline -autolog(init=dict(project="diffusers_logging")) - -# Initialize the diffusion pipeline -pipeline = DiffusionPipeline.from_pretrained( - "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16 -).to("cuda") - -# Define the prompts, negative prompts, and seed. -prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"] -negative_prompt = ["ugly, deformed", "ugly, deformed"] -generator = torch.Generator(device="cpu").manual_seed(10) - -# call the pipeline to generate the images -images = pipeline( - prompt, - negative_prompt=negative_prompt, - num_images_per_prompt=2, - generator=generator, -) -``` -{{% /tab %}} - -{{% tab header="Notebook" value="notebook"%}} -```python -import torch -from diffusers import DiffusionPipeline - -import wandb - -# import the autolog function -from wandb.integration.diffusers import autolog - -run = wandb.init() - -# call the autolog before calling the pipeline -autolog(init=dict(project="diffusers_logging")) - -# Initialize the diffusion pipeline -pipeline = DiffusionPipeline.from_pretrained( - "stabilityai/stable-diffusion-2-1", torch_dtype=torch.float16 -).to("cuda") - -# Define the prompts, negative prompts, and seed. -prompt = ["a photograph of an astronaut riding a horse", "a photograph of a dragon"] -negative_prompt = ["ugly, deformed", "ugly, deformed"] -generator = torch.Generator(device="cpu").manual_seed(10) - -# call the pipeline to generate the images -images = pipeline( - prompt, - negative_prompt=negative_prompt, - num_images_per_prompt=2, - generator=generator, -) - -# Finish the experiment -run.finish() -``` -{{% /tab %}} -{{< /tabpane >}} - - -- The results of a single experiment: - - {{< img src="/images/integrations/diffusers-autolog-2.gif" alt="Experiment results logging" >}} - -- The results of multiple experiments: - - {{< img src="/images/integrations/diffusers-autolog-1.gif" alt="Experiment results logging" >}} - -- The config of an experiment: - - {{< img src="/images/integrations/diffusers-autolog-3.gif" alt="Experiment config logging" >}} - -{{% alert %}} -You need to explicitly call [`wandb.Run.finish()`]({{< relref "/ref/python/sdk/functions/finish.md" >}}) when executing the code in IPython notebook environments after calling the pipeline. This is not necessary when executing python scripts. -{{% /alert %}} - -### Tracking multi-pipeline workflows - -This section demonstrates the autolog with a typical [Stable Diffusion XL + Refiner](https://huggingface.co/docs/diffusers/using-diffusers/sdxl#base-to-refiner-model) workflow, in which the latents generated by the [`StableDiffusionXLPipeline`](https://huggingface.co/docs/diffusers/api/pipelines/stable_diffusion/stable_diffusion_xl) is refined by the corresponding refiner. - -{{< cta-button colabLink="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/diffusers/sdxl-diffusers.ipynb" >}} - -{{< tabpane text=true >}} - -{{% tab header="Python Script" value="script" %}} - -```python -import torch -from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline -from wandb.integration.diffusers import autolog - -# initialize the SDXL base pipeline -base_pipeline = StableDiffusionXLPipeline.from_pretrained( - "stabilityai/stable-diffusion-xl-base-1.0", - torch_dtype=torch.float16, - variant="fp16", - use_safetensors=True, -) -base_pipeline.enable_model_cpu_offload() - -# initialize the SDXL refiner pipeline -refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained( - "stabilityai/stable-diffusion-xl-refiner-1.0", - text_encoder_2=base_pipeline.text_encoder_2, - vae=base_pipeline.vae, - torch_dtype=torch.float16, - use_safetensors=True, - variant="fp16", -) -refiner_pipeline.enable_model_cpu_offload() - -prompt = "a photo of an astronaut riding a horse on mars" -negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing" - -# Make the experiment reproducible by controlling randomness. -# The seed would be automatically logged to WandB. -seed = 42 -generator_base = torch.Generator(device="cuda").manual_seed(seed) -generator_refiner = torch.Generator(device="cuda").manual_seed(seed) - -# Call WandB Autolog for Diffusers. This would automatically log -# the prompts, generated images, pipeline architecture and all -# associated experiment configs to W&B, thus making your -# image generation experiments easy to reproduce, share and analyze. -autolog(init=dict(project="sdxl")) - -# Call the base pipeline to generate the latents -image = base_pipeline( - prompt=prompt, - negative_prompt=negative_prompt, - output_type="latent", - generator=generator_base, -).images[0] - -# Call the refiner pipeline to generate the refined image -image = refiner_pipeline( - prompt=prompt, - negative_prompt=negative_prompt, - image=image[None, :], - generator=generator_refiner, -).images[0] -``` - -{{% /tab %}} - -{{% tab header="Notebook" value="notebook" %}} - -```python -import torch -from diffusers import StableDiffusionXLImg2ImgPipeline, StableDiffusionXLPipeline - -import wandb -from wandb.integration.diffusers import autolog - -run = wandb.init() - -# initialize the SDXL base pipeline -base_pipeline = StableDiffusionXLPipeline.from_pretrained( - "stabilityai/stable-diffusion-xl-base-1.0", - torch_dtype=torch.float16, - variant="fp16", - use_safetensors=True, -) -base_pipeline.enable_model_cpu_offload() - -# initialize the SDXL refiner pipeline -refiner_pipeline = StableDiffusionXLImg2ImgPipeline.from_pretrained( - "stabilityai/stable-diffusion-xl-refiner-1.0", - text_encoder_2=base_pipeline.text_encoder_2, - vae=base_pipeline.vae, - torch_dtype=torch.float16, - use_safetensors=True, - variant="fp16", -) -refiner_pipeline.enable_model_cpu_offload() - -prompt = "a photo of an astronaut riding a horse on mars" -negative_prompt = "static, frame, painting, illustration, sd character, low quality, low resolution, greyscale, monochrome, nose, cropped, lowres, jpeg artifacts, deformed iris, deformed pupils, bad eyes, semi-realistic worst quality, bad lips, deformed mouth, deformed face, deformed fingers, deformed toes standing still, posing" - -# Make the experiment reproducible by controlling randomness. -# The seed would be automatically logged to WandB. -seed = 42 -generator_base = torch.Generator(device="cuda").manual_seed(seed) -generator_refiner = torch.Generator(device="cuda").manual_seed(seed) - -# Call WandB Autolog for Diffusers. This would automatically log -# the prompts, generated images, pipeline architecture and all -# associated experiment configs to W&B, thus making your -# image generation experiments easy to reproduce, share and analyze. -autolog(init=dict(project="sdxl")) - -# Call the base pipeline to generate the latents -image = base_pipeline( - prompt=prompt, - negative_prompt=negative_prompt, - output_type="latent", - generator=generator_base, -).images[0] - -# Call the refiner pipeline to generate the refined image -image = refiner_pipeline( - prompt=prompt, - negative_prompt=negative_prompt, - image=image[None, :], - generator=generator_refiner, -).images[0] - -# Finish the experiment -run.finish() -``` - -{{% /tab %}} - -{{< /tabpane >}} - -- Example of a Stable Diffisuion XL + Refiner experiment: - {{< img src="/images/integrations/diffusers-autolog-6.gif" alt="Stable Diffusion XL experiment tracking" >}} - -## More resources - -* [A Guide to Prompt Engineering for Stable Diffusion](https://wandb.ai/geekyrakshit/diffusers-prompt-engineering/reports/A-Guide-to-Prompt-Engineering-for-Stable-Diffusion--Vmlldzo1NzY4NzQ3) -* [PIXART-α: A Diffusion Transformer Model for Text-to-Image Generation](https://wandb.ai/geekyrakshit/pixart-alpha/reports/PIXART-A-Diffusion-Transformer-Model-for-Text-to-Image-Generation--Vmlldzo2MTE1NzM3) diff --git a/content/en/guides/integrations/docker.md b/content/en/guides/integrations/docker.md deleted file mode 100644 index 2d662987f3..0000000000 --- a/content/en/guides/integrations/docker.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: How to integrate W&B with Docker. -menu: - default: - identifier: docker - parent: integrations -title: Docker -weight: 80 ---- - -## Docker Integration - -W&B can store a pointer to the Docker image that your code ran in, giving you the ability to restore a previous experiment to the exact environment it was run in. The wandb library looks for the **WANDB_DOCKER** environment variable to persist this state. We provide a few helpers that automatically set this state. - -### Local Development - -`wandb docker` is a command that starts a docker container, passes in wandb environment variables, mounts your code, and ensures wandb is installed. By default the command uses a docker image with TensorFlow, PyTorch, Keras, and Jupyter installed. You can use the same command to start your own docker image: `wandb docker my/image:latest`. The command mounts the current directory into the "/app" directory of the container, you can change this with the "--dir" flag. - -### Production - -The `wandb docker-run` command is provided for production workloads. It's meant to be a drop in replacement for `nvidia-docker`. It's a simple wrapper to the `docker run` command that adds your credentials and the **WANDB_DOCKER** environment variable to the call. If you do not pass the "--runtime" flag and `nvidia-docker` is available on the machine, this also ensures the runtime is set to nvidia. - -### Kubernetes - -If you run your training workloads in Kubernetes and the k8s API is exposed to your pod \(which is the case by default\). wandb will query the API for the digest of the docker image and automatically set the **WANDB_DOCKER** environment variable. - -## Restoring - -If a run was instrumented with the **WANDB_DOCKER** environment variable, calling `wandb restore username/project:run_id` will checkout a new branch restoring your code then launch the exact docker image used for training pre-populated with the original command. \ No newline at end of file diff --git a/content/en/guides/integrations/farama-gymnasium.md b/content/en/guides/integrations/farama-gymnasium.md deleted file mode 100644 index 4dde34c56d..0000000000 --- a/content/en/guides/integrations/farama-gymnasium.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -description: How to integrate W&B with Farama Gymnasium. -menu: - default: - identifier: farama-gymnasium - parent: integrations -title: Farama Gymnasium -weight: 90 ---- - -If you're using [Farama Gymnasium](https://gymnasium.farama.org/#) we will automatically log videos of your environment generated by `gymnasium.wrappers.Monitor`. Just set the `monitor_gym` keyword argument to [`wandb.init`]({{< relref "/ref/python/sdk/functions/init.md" >}}) to `True`. - -Our gymnasium integration is very light. We simply [look at the name of the video file](https://github.com/wandb/wandb/blob/c5fe3d56b155655980611d32ef09df35cd336872/wandb/integration/gym/__init__.py#LL69C67-L69C67) being logged from `gymnasium` and name it after that or fall back to `"videos"` if we don't find a match. If you want more control, you can always just manually [log a video]({{< relref "/guides/models/track/log/media.md" >}}). - -Check out this [report](https://wandb.ai/raph-test/cleanrltest/reports/Mario-Bros-but-with-AI-Gymnasium-and-CleanRL---Vmlldzo0NTcxNTcw) to learn more on how to use Gymnasium with the CleanRL library. - -{{< img src="/images/integrations/gymnasium.png" alt="Gymnasium RL environment" >}} \ No newline at end of file diff --git a/content/en/guides/integrations/fastai/_index.md b/content/en/guides/integrations/fastai/_index.md deleted file mode 100644 index f1b4adc8e8..0000000000 --- a/content/en/guides/integrations/fastai/_index.md +++ /dev/null @@ -1,278 +0,0 @@ ---- -menu: - default: - identifier: README - parent: integrations -title: fastai -cascade: -- url: guides/integrations/fastai/:filename -weight: 100 ---- -If you're using **fastai** to train your models, W&B has an easy integration using the `WandbCallback`. Explore the details in[ interactive docs with examples →](https://app.wandb.ai/borisd13/demo_config/reports/Visualize-track-compare-Fastai-models--Vmlldzo4MzAyNA) - -## Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -## Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="python-notebook" %}} - -```notebook -!pip install wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} -{{< /tabpane >}} - -## Add the `WandbCallback` to the `learner` or `fit` method - -```python -import wandb -from fastai.callback.wandb import * - -# start logging a wandb run -wandb.init(project="my_project") - -# To log only during one training phase -learn.fit(..., cbs=WandbCallback()) - -# To log continuously for all training phases -learn = learner(..., cbs=WandbCallback()) -``` - -{{% alert %}} -If you use version 1 of Fastai, refer to the [Fastai v1 docs]({{< relref "v1.md" >}}). -{{% /alert %}} - -## WandbCallback Arguments - -`WandbCallback` accepts the following arguments: - -| Args | Description | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| log | Whether to log the model's: `gradients` , `parameters`, `all` or `None` (default). Losses & metrics are always logged. | -| log_preds | whether we want to log prediction samples (default to `True`). | -| log_preds_every_epoch | whether to log predictions every epoch or at the end (default to `False`) | -| log_model | whether we want to log our model (default to False). This also requires `SaveModelCallback` | -| model_name | The name of the `file` to save, overrides `SaveModelCallback` | -| log_dataset |
  • False (default)
  • True will log folder referenced by learn.dls.path.
  • a path can be defined explicitly to reference which folder to log.

Note: subfolder "models" is always ignored.

| -| dataset_name | name of logged dataset (default to `folder name`). | -| valid_dl | `DataLoaders` containing items used for prediction samples (default to random items from `learn.dls.valid`. | -| n_preds | number of logged predictions (default to 36). | -| seed | used for defining random samples. | - -For custom workflows, you can manually log your datasets and models: - -* `log_dataset(path, name=None, metadata={})` -* `log_model(path, name=None, metadata={})` - -_Note: any subfolder "models" will be ignored._ - -## Distributed Training - -`fastai` supports distributed training by using the context manager `distrib_ctx`. W&B supports this automatically and enables you to track your Multi-GPU experiments out of the box. - -Review this minimal example: - -{{< tabpane text=true >}} -{{% tab header="Script" value="script" %}} - -```python -import wandb -from fastai.vision.all import * -from fastai.distributed import * -from fastai.callback.wandb import WandbCallback - -wandb.require(experiment="service") -path = rank0_first(lambda: untar_data(URLs.PETS) / "images") - -def train(): - dls = ImageDataLoaders.from_name_func( - path, - get_image_files(path), - valid_pct=0.2, - label_func=lambda x: x[0].isupper(), - item_tfms=Resize(224), - ) - wandb.init("fastai_ddp", entity="capecape") - cb = WandbCallback() - learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16() - with learn.distrib_ctx(sync_bn=False): - learn.fit(1) - -if __name__ == "__main__": - train() -``` - -Then, in your terminal you will execute: - -```shell -$ torchrun --nproc_per_node 2 train.py -``` - -in this case, the machine has 2 GPUs. - -{{% /tab %}} -{{% tab header="Python notebook" value="notebook" %}} - -You can now run distributed training directly inside a notebook. - -```python -import wandb -from fastai.vision.all import * - -from accelerate import notebook_launcher -from fastai.distributed import * -from fastai.callback.wandb import WandbCallback - -wandb.require(experiment="service") -path = untar_data(URLs.PETS) / "images" - -def train(): - dls = ImageDataLoaders.from_name_func( - path, - get_image_files(path), - valid_pct=0.2, - label_func=lambda x: x[0].isupper(), - item_tfms=Resize(224), - ) - wandb.init("fastai_ddp", entity="capecape") - cb = WandbCallback() - learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16() - with learn.distrib_ctx(in_notebook=True, sync_bn=False): - learn.fit(1) - -notebook_launcher(train, num_processes=2) -``` - -{{% /tab %}} -{{< /tabpane >}} - -### Log only on the main process - -In the examples above, `wandb` launches one run per process. At the end of the training, you will end up with two runs. This can sometimes be confusing, and you may want to log only on the main process. To do so, you will have to detect in which process you are manually and avoid creating runs (calling `wandb.init` in all other processes) - -{{< tabpane text=true >}} -{{% tab header="Script" value="script" %}} - -```python -import wandb -from fastai.vision.all import * -from fastai.distributed import * -from fastai.callback.wandb import WandbCallback - -wandb.require(experiment="service") -path = rank0_first(lambda: untar_data(URLs.PETS) / "images") - -def train(): - cb = [] - dls = ImageDataLoaders.from_name_func( - path, - get_image_files(path), - valid_pct=0.2, - label_func=lambda x: x[0].isupper(), - item_tfms=Resize(224), - ) - if rank_distrib() == 0: - run = wandb.init("fastai_ddp", entity="capecape") - cb = WandbCallback() - learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16() - with learn.distrib_ctx(sync_bn=False): - learn.fit(1) - -if __name__ == "__main__": - train() -``` -in your terminal call: - -``` -$ torchrun --nproc_per_node 2 train.py -``` - -{{% /tab %}} -{{% tab header="Python notebook" value="notebook" %}} - -```python -import wandb -from fastai.vision.all import * - -from accelerate import notebook_launcher -from fastai.distributed import * -from fastai.callback.wandb import WandbCallback - -wandb.require(experiment="service") -path = untar_data(URLs.PETS) / "images" - -def train(): - cb = [] - dls = ImageDataLoaders.from_name_func( - path, - get_image_files(path), - valid_pct=0.2, - label_func=lambda x: x[0].isupper(), - item_tfms=Resize(224), - ) - if rank_distrib() == 0: - run = wandb.init("fastai_ddp", entity="capecape") - cb = WandbCallback() - learn = vision_learner(dls, resnet34, metrics=error_rate, cbs=cb).to_fp16() - with learn.distrib_ctx(in_notebook=True, sync_bn=False): - learn.fit(1) - -notebook_launcher(train, num_processes=2) -``` - -{{% /tab %}} -{{< /tabpane >}} - -## Examples - -* [Visualize, track, and compare Fastai models](https://app.wandb.ai/borisd13/demo_config/reports/Visualize-track-compare-Fastai-models--Vmlldzo4MzAyNA): A thoroughly documented walkthrough. -* [Image Segmentation on CamVid](https://bit.ly/fastai-wandb): A sample use case of the integration. \ No newline at end of file diff --git a/content/en/guides/integrations/fastai/v1.md b/content/en/guides/integrations/fastai/v1.md deleted file mode 100644 index 540d41d47d..0000000000 --- a/content/en/guides/integrations/fastai/v1.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -menu: - default: - identifier: v1 - parent: fastai -title: fastai v1 ---- - -{{% alert %}} -This documentation is for fastai v1. -If you use the current version of fastai, you should refer to [fastai page]({{< relref "../" >}}). -{{% /alert %}} - -For scripts using fastai v1, we have a callback that can automatically log model topology, losses, metrics, weights, gradients, sample predictions and best trained model. - -```python -import wandb -from wandb.fastai import WandbCallback - -wandb.init() - -learn = cnn_learner(data, model, callback_fns=WandbCallback) -learn.fit(epochs) -``` - -Requested logged data is configurable through the callback constructor. - -```python -from functools import partial - -learn = cnn_learner( - data, model, callback_fns=partial(WandbCallback, input_type="images") -) -``` - -It is also possible to use WandbCallback only when starting training. In this case it must be instantiated. - -```python -learn.fit(epochs, callbacks=WandbCallback(learn)) -``` - -Custom parameters can also be given at that stage. - -```python -learn.fit(epochs, callbacks=WandbCallback(learn, input_type="images")) -``` - -## Example Code - -We've created a few examples for you to see how the integration works: - -**Fastai v1** - -* [Classify Simpsons characters](https://github.com/borisdayma/simpsons-fastai)[: ](https://app.wandb.ai/jxmorris12/huggingface-demo/reports/A-Step-by-Step-Guide-to-Tracking-Hugging-Face-Model-Performance--VmlldzoxMDE2MTU)A simple demo to track and compare Fastai models -* [Semantic Segmentation with Fastai](https://github.com/borisdayma/semantic-segmentation): Optimize neural networks on self-driving cars - -## Options - -`WandbCallback()` class supports a number of options: - -| Keyword argument | Default | Description | -| ---------------- | --------- | -------------------------------------------------------------------------------------------------------- | -| learn | N/A | the fast.ai learner to hook. | -| save_model | True | save the model if it's improved at each step. It will also load best model at the end of training. | -| mode | auto | `min`, `max`, or `auto`: How to compare the training metric specified in `monitor` between steps. | -| monitor | None | training metric used to measure performance for saving the best model. None defaults to validation loss. | -| log | gradients | `gradients`, `parameters`, `all`, or None. Losses & metrics are always logged. | -| input_type | None | `images` or `None`. Used to display sample predictions. | -| validation_data | None | data used for sample predictions if `input_type` is set. | -| predictions | 36 | number of predictions to make if `input_type` is set and `validation_data` is `None`. | -| seed | 12345 | initialize random generator for sample predictions if `input_type` is set and `validation_data` is `None`. | \ No newline at end of file diff --git a/content/en/guides/integrations/hydra.md b/content/en/guides/integrations/hydra.md deleted file mode 100644 index 4e15f445c4..0000000000 --- a/content/en/guides/integrations/hydra.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -description: How to integrate W&B with Hydra. -menu: - default: - identifier: hydra - parent: integrations -title: Hydra -weight: 150 ---- - -> [Hydra](https://hydra.cc) is an open-source Python framework that simplifies the development of research and other complex applications. The key feature is the ability to dynamically create a hierarchical configuration by composition and override it through config files and the command line. - -You can continue to use Hydra for configuration management while taking advantage of the power of W&B. - -## Track metrics - -Track your metrics as normal with `wandb.init()` and `wandb.Run.log()` . Here, `wandb.entity` and `wandb.project` are defined within a hydra configuration file. - -```python -import wandb - - -@hydra.main(config_path="configs/", config_name="defaults") -def run_experiment(cfg): - - with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run: - run.log({"loss": loss}) -``` - -## Track Hyperparameters - -Hydra uses [omegaconf](https://omegaconf.readthedocs.io/en/2.1_branch/) as the default way to interface with configuration dictionaries. `OmegaConf`'s dictionary are not a subclass of primitive dictionaries so directly passing Hydra's `Config` to `wandb.Run.config` leads to unexpected results on the dashboard. It's necessary to convert `omegaconf.DictConfig` to the primitive `dict` type before passing to `wandb.Run.config`. - -```python -@hydra.main(config_path="configs/", config_name="defaults") -def run_experiment(cfg): - with wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) as run: - run.config = omegaconf.OmegaConf.to_container( - cfg, resolve=True, throw_on_missing=True - ) - run = wandb.init(entity=cfg.wandb.entity, project=cfg.wandb.project) - run.log({"loss": loss}) - model = Model(**run.config.model.configs) -``` - -## Troubleshoot multiprocessing - -If your process hangs when started, this may be caused by [this known issue]({{< relref "/guides/models/track/log/distributed-training.md" >}}). To solve this, try to changing wandb's multiprocessing protocol either by adding an extra settings parameter to `wandb.init()` as: - -```python -wandb.init(settings=wandb.Settings(start_method="thread")) -``` - -or by setting a global environment variable from your shell: - -```bash -$ export WANDB_START_METHOD=thread -``` - -## Optimize Hyperparameters - -[W&B Sweeps]({{< relref "/guides/models/sweeps/" >}}) is a highly scalable hyperparameter search platform, which provides interesting insights and visualization about W&B experiments with minimal requirements code real-estate. Sweeps integrates seamlessly with Hydra projects with no-coding requirements. The only thing needed is a configuration file describing the various parameters to sweep over as normal. - -A simple example `sweep.yaml` file would be: - -```yaml -program: main.py -method: bayes -metric: - goal: maximize - name: test/accuracy -parameters: - dataset: - values: [mnist, cifar10] - -command: - - ${env} - - python - - ${program} - - ${args_no_hyphens} -``` - -Invoke the sweep: - -``` bash -wandb sweep sweep.yaml` \ -``` - -W&B automatically creates a sweep inside your project and returns a `wandb agent` command for you to run on each machine you want to run your sweep. - -### Pass parameters not present in Hydra defaults - - - -Hydra supports passing extra parameters through the command line which aren't present in the default configuration file, by using a `+` before command. For example, you can pass an extra parameter with some value by simply calling: - -```bash -$ python program.py +experiment=some_experiment -``` - -You cannot sweep over such `+` configurations similar to what one does while configuring [Hydra Experiments](https://hydra.cc/docs/patterns/configuring_experiments/). To work around this, you can initialize the experiment parameter with a default empty file and use W&B Sweep to override those empty configs on each call. For more information, read [this W&B Report](https://wandb.me/hydra). diff --git a/content/en/guides/integrations/kubeflow-pipelines-kfp.md b/content/en/guides/integrations/kubeflow-pipelines-kfp.md deleted file mode 100644 index e32f85d098..0000000000 --- a/content/en/guides/integrations/kubeflow-pipelines-kfp.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -description: How to integrate W&B with Kubeflow Pipelines. -menu: - default: - identifier: kubeflow-pipelines-kfp - parent: integrations -title: Kubeflow Pipelines (kfp) -weight: 170 ---- - - -[Kubeflow Pipelines (kfp) ](https://www.kubeflow.org/docs/components/pipelines/overview/)is a platform for building and deploying portable, scalable machine learning (ML) workflows based on Docker containers. - -This integration lets users apply decorators to kfp python functional components to automatically log parameters and artifacts to W&B. - -This feature was enabled in `wandb==0.12.11` and requires `kfp<2.0.0` - -## Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -## Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="notebook" %}} - -```notebook -!pip install wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} -{{< /tabpane >}} - - -## Decorate your components - -Add the `@wandb_log` decorator and create your components as usual. This will automatically log the input/outputs parameters and artifacts to W&B each time you run your pipeline. - -```python -from kfp import components -from wandb.integration.kfp import wandb_log - - -@wandb_log -def add(a: float, b: float) -> float: - return a + b - - -add = components.create_component_from_func(add) -``` - -## Pass environment variables to containers - -You may need to explicitly pass [environment variables]({{< relref "/guides/models/track/environment-variables.md" >}}) to your containers. For two-way linking, you should also set the environment variables `WANDB_KUBEFLOW_URL` to the base URL of your Kubeflow Pipelines instance. For example, `https://kubeflow.mysite.com`. - -```python -import os -from kubernetes.client.models import V1EnvVar - - -def add_wandb_env_variables(op): - env = { - "WANDB_API_KEY": os.getenv("WANDB_API_KEY"), - "WANDB_BASE_URL": os.getenv("WANDB_BASE_URL"), - } - - for name, value in env.items(): - op = op.add_env_variable(V1EnvVar(name, value)) - return op - - -@dsl.pipeline(name="example-pipeline") -def example_pipeline(param1: str, param2: int): - conf = dsl.get_pipeline_conf() - conf.add_op_transformer(add_wandb_env_variables) -``` - -## Access your data programmatically - -### Via the Kubeflow Pipelines UI - -Click on any Run in the Kubeflow Pipelines UI that has been logged with W&B. - -* Find details about inputs and outputs in the `Input/Output` and `ML Metadata` tabs. -* View the W&B web app from the `Visualizations` tab. - -{{< img src="/images/integrations/kubeflow_app_pipelines_ui.png" alt="W&B in Kubeflow UI" >}} - -### Via the web app UI - -The web app UI has the same content as the `Visualizations` tab in Kubeflow Pipelines, but with more space. Learn [more about the web app UI here]({{< relref "/guides/models/app" >}}). - -{{< img src="/images/integrations/kubeflow_pipelines.png" alt="Run details" >}} - -{{< img src="/images/integrations/kubeflow_via_app.png" alt="Pipeline DAG" >}} - -### Via the Public API (for programmatic access) - -* For programmatic access, [see our Public API]({{< relref "/ref/python/public-api/index.md" >}}). - -### Concept mapping from Kubeflow Pipelines to W&B - -Here's a mapping of Kubeflow Pipelines concepts to W&B - -| Kubeflow Pipelines | W&B | Location in W&B | -| ------------------ | --- | --------------- | -| Input Scalar | [`config`]({{< relref "/guides/models/track/config" >}}) | [Overview tab]({{< relref "/guides/models/track/runs/#overview-tab" >}}) | -| Output Scalar | [`summary`]({{< relref "/guides/models/track/log" >}}) | [Overview tab]({{< relref "/guides/models/track/runs/#overview-tab" >}}) | -| Input Artifact | Input Artifact | [Artifacts tab]({{< relref "/guides/models/track/runs/#artifacts-tab" >}}) | -| Output Artifact | Output Artifact | [Artifacts tab]({{< relref "/guides/models/track/runs/#artifacts-tab" >}}) | - -## Fine-grain logging - -If you want finer control of logging, you can sprinkle in `wandb.log` and `wandb.log_artifact` calls in the component. - -### With explicit `wandb.log_artifacts` calls - -In this example below, we are training a model. The `@wandb_log` decorator will automatically track the relevant inputs and outputs. If you want to log the training process, you can explicitly add that logging like so: - -```python -@wandb_log -def train_model( - train_dataloader_path: components.InputPath("dataloader"), - test_dataloader_path: components.InputPath("dataloader"), - model_path: components.OutputPath("pytorch_model"), -): - with wandb.init() as run: - ... - for epoch in epochs: - for batch_idx, (data, target) in enumerate(train_dataloader): - ... - if batch_idx % log_interval == 0: - run.log( - {"epoch": epoch, "step": batch_idx * len(data), "loss": loss.item()} - ) - ... - run.log_artifact(model_artifact) -``` - -### With implicit wandb integrations - -If you're using a [framework integration we support]({{< relref "/guides/integrations/" >}}), you can also pass in the callback directly: - -```python -@wandb_log -def train_model( - train_dataloader_path: components.InputPath("dataloader"), - test_dataloader_path: components.InputPath("dataloader"), - model_path: components.OutputPath("pytorch_model"), -): - from pytorch_lightning.loggers import WandbLogger - from pytorch_lightning import Trainer - - trainer = Trainer(logger=WandbLogger()) - ... # do training -``` \ No newline at end of file diff --git a/content/en/guides/integrations/metaflow.md b/content/en/guides/integrations/metaflow.md deleted file mode 100644 index b8b56042de..0000000000 --- a/content/en/guides/integrations/metaflow.md +++ /dev/null @@ -1,218 +0,0 @@ ---- -description: How to integrate W&B with Metaflow. -menu: - default: - identifier: metaflow - parent: integrations -title: Metaflow -weight: 200 ---- -## Overview - -[Metaflow](https://docs.metaflow.org) is a framework created by [Netflix](https://netflixtechblog.com) for creating and running ML workflows. - -This integration lets users apply decorators to Metaflow [steps and flows](https://docs.metaflow.org/metaflow/basics) to automatically log parameters and artifacts to W&B. - -* Decorating a step will turn logging off or on for certain types within that step. -* Decorating the flow will turn logging off or on for every step in the flow. - -## Quickstart - -### Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -### Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{% alert %}} -For `wandb` version 0.19.8 or below, install `fastcore` version 1.8.0 or below (`fastcore<1.8.0`) instead of `plum-dispatch`. -{{% /alert %}} - - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="notebook" %}} - -```notebook -!pip install -Uqqq metaflow "plum-dispatch<3.0.0" wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} -{{< /tabpane >}} - -### Decorate your flows and steps - -{{< tabpane text=true >}} -{{% tab header="Step" value="step" %}} - -Decorating a step turns logging off or on for certain types within that step. - -In this example, all datasets and models in `start` will be logged - -```python -from wandb.integration.metaflow import wandb_log - -class WandbExampleFlow(FlowSpec): - @wandb_log(datasets=True, models=True, settings=wandb.Settings(...)) - @step - def start(self): - self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset - self.model_file = torch.load(...) # nn.Module -> upload as model - self.next(self.transform) -``` -{{% /tab %}} - -{{% tab header="Flow" value="flow" %}} - -Decorating a flow is equivalent to decorating all the constituent steps with a default. - -In this case, all steps in `WandbExampleFlow` default to logging datasets and models by default, just like decorating each step with `@wandb_log(datasets=True, models=True)` - -```python -from wandb.integration.metaflow import wandb_log - -@wandb_log(datasets=True, models=True) # decorate all @step -class WandbExampleFlow(FlowSpec): - @step - def start(self): - self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset - self.model_file = torch.load(...) # nn.Module -> upload as model - self.next(self.transform) -``` -{{% /tab %}} - -{{% tab header="Flow and Steps" value="flow_and_steps" %}} - -Decorating the flow is equivalent to decorating all steps with a default. That means if you later decorate a Step with another `@wandb_log`, it overrides the flow-level decoration. - -In this example: - -* `start` and `mid` log both datasets and models. -* `end` logs neither datasets nor models. - -```python -from wandb.integration.metaflow import wandb_log - -@wandb_log(datasets=True, models=True) # same as decorating start and mid -class WandbExampleFlow(FlowSpec): - # this step will log datasets and models - @step - def start(self): - self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset - self.model_file = torch.load(...) # nn.Module -> upload as model - self.next(self.mid) - - # this step will also log datasets and models - @step - def mid(self): - self.raw_df = pd.read_csv(...). # pd.DataFrame -> upload as dataset - self.model_file = torch.load(...) # nn.Module -> upload as model - self.next(self.end) - - # this step is overwritten and will NOT log datasets OR models - @wandb_log(datasets=False, models=False) - @step - def end(self): - self.raw_df = pd.read_csv(...). - self.model_file = torch.load(...) -``` -{{% /tab %}} -{{< /tabpane >}} - -## Access your data programmatically - -You can access the information we've captured in three ways: inside the original Python process being logged using the [`wandb` client library]({{< relref "/ref/python/" >}}), with the [web app UI]({{< relref "/guides/models/track/workspaces.md" >}}), or programmatically using [our Public API]({{< relref "/ref/python/public-api/" >}}). `Parameter`s are saved to W&B's [`config`]({{< relref "/guides/models/track/config.md" >}}) and can be found in the [Overview tab]({{< relref "/guides/models/track/runs/#overview-tab" >}}). `datasets`, `models`, and `others` are saved to [W&B Artifacts]({{< relref "/guides/core/artifacts/" >}}) and can be found in the [Artifacts tab]({{< relref "/guides/models/track/runs/#artifacts-tab" >}}). Base python types are saved to W&B's [`summary`]({{< relref "/guides/models/track/log/" >}}) dict and can be found in the Overview tab. See our [guide to the Public API]({{< relref "/guides/models/track/public-api-guide.md" >}}) for details on using the API to get this information programmatically from outside . - -### Quick reference - -| Data | Client library | UI | -| ----------------------------------------------- | ----------------------------------------- | --------------------- | -| `Parameter(...)` | `wandb.Run.config` | Overview tab, Config | -| `datasets`, `models`, `others` | `wandb.Run.use_artifact("{var_name}:latest")` | Artifacts tab | -| Base Python types (`dict`, `list`, `str`, etc.) | `wandb.Run.summary` | Overview tab, Summary | - -### `wandb_log` kwargs - -| kwarg | Options | -| ---------- | ------------------------------------------------------------------------------- | -| `datasets` |
  • True: Log instance variables that are a dataset
  • False
| -| `models` |
  • True: Log instance variables that are a model
  • False
| -| `others` |
  • True: Log anything else that is serializable as a pickle
  • False
| -| `settings` |
  • wandb.Settings(...): Specify your own wandb settings for this step or flow
  • None: Equivalent to passing wandb.Settings()

By default, if:

  • settings.run_group is None, it will be set to \{flow_name\}/\{run_id\}
  • settings.run_job_type is None, it will be set to \{run_job_type\}/\{step_name\}
| - -## Frequently Asked Questions - -### What exactly do you log? Do you log all instance and local variables? - -`wandb_log` only logs instance variables. Local variables are NEVER logged. This is useful to avoid logging unnecessary data. - -### Which data types get logged? - -We currently support these types: - -| Logging Setting | Type | -| ------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| default (always on) |
  • dict, list, set, str, int, float, bool
| -| `datasets` |
  • pd.DataFrame
  • pathlib.Path
| -| `models` |
  • nn.Module
  • sklearn.base.BaseEstimator
| -| `others` |
| - -### How can I configure logging behavior? - -| Kind of Variable | behavior | Example | Data Type | -| ---------------- | ------------------------------ | --------------- | -------------- | -| Instance | Auto-logged | `self.accuracy` | `float` | -| Instance | Logged if `datasets=True` | `self.df` | `pd.DataFrame` | -| Instance | Not logged if `datasets=False` | `self.df` | `pd.DataFrame` | -| Local | Never logged | `accuracy` | `float` | -| Local | Never logged | `df` | `pd.DataFrame` | - -### Is artifact lineage tracked? - -Yes. If you have an artifact that is an output of step A and an input to step B, we automatically construct the lineage DAG for you. - -For an example of this behavior, please see this[ notebook](https://colab.research.google.com/drive/1wZG-jYzPelk8Rs2gIM3a71uEoG46u_nG#scrollTo=DQQVaKS0TmDU) and its corresponding [W&B Artifacts page](https://wandb.ai/megatruong/metaflow_integration/artifacts/dataset/raw_df/7d14e6578d3f1cfc72fe/graph) \ No newline at end of file diff --git a/content/en/guides/integrations/mmengine.md b/content/en/guides/integrations/mmengine.md deleted file mode 100644 index 643f5e9994..0000000000 --- a/content/en/guides/integrations/mmengine.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -menu: - default: - identifier: mmengine - parent: integrations -title: MMEngine -weight: 210 ---- -MMEngine by [OpenMMLab](https://github.com/open-mmlab) is a foundational library for training deep learning models based on PyTorch. MMEngine implements a next-generation training architecture for the OpenMMLab algorithm library, providing a unified execution foundation for over 30 algorithm libraries within OpenMMLab. Its core components include the training engine, evaluation engine, and module management. - -[W&B](https://wandb.ai/site) is directly integrated into MMEngine through a dedicated [`WandbVisBackend`](https://mmengine.readthedocs.io/en/latest/api/generated/mmengine.visualization.WandbVisBackend.html#mmengine.visualization.WandbVisBackend) that can be used to -- log training and evaluation metrics. -- log and manage experiment configs. -- log additional records such as graph, images, scalars, etc. - -## Get started - -Install `openmim` and `wandb`. - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="script" %}} - -``` bash -pip install -q -U openmim wandb -``` - -{{% /tab %}} - -{{% tab header="Notebook" value="notebook" %}} - -``` bash -!pip install -q -U openmim wandb -``` - -{{% /tab %}} -{{< /tabpane >}} - -Next, install `mmengine` and `mmcv` using `mim`. - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="script" %}} - -``` bash -mim install -q mmengine mmcv -``` - -{{% /tab %}} - -{{% tab header="Notebook" value="notebook" %}} - -``` bash -!mim install -q mmengine mmcv -``` - -{{% /tab %}} -{{< /tabpane >}} - -## Use the `WandbVisBackend` with MMEngine Runner - -This section demonstrates a typical workflow using `WandbVisBackend` using [`mmengine.runner.Runner`](https://mmengine.readthedocs.io/en/latest/api/generated/mmengine.runner.Runner.html#mmengine.runner.Runner). - -1. Define a `visualizer` from a visualization config. - - ```python - from mmengine.visualization import Visualizer - - # define the visualization configs - visualization_cfg = dict( - name="wandb_visualizer", - vis_backends=[ - dict( - type='WandbVisBackend', - init_kwargs=dict(project="mmengine"), - ) - ], - save_dir="runs/wandb" - ) - - # get the visualizer from the visualization configs - visualizer = Visualizer.get_instance(**visualization_cfg) - ``` - - {{% alert %}} - You pass a dictionary of arguments for [W&B run initialization]({{< relref "/ref/python/sdk/functions/init.md" >}}) input parameters to `init_kwargs`. - {{% /alert %}} - -2. Initialize a `runner` with the `visualizer`, and call `runner.train()`. - - ```python - from mmengine.runner import Runner - - # build the mmengine Runner which is a training helper for PyTorch - runner = Runner( - model, - work_dir='runs/gan/', - train_dataloader=train_dataloader, - train_cfg=train_cfg, - optim_wrapper=opt_wrapper_dict, - visualizer=visualizer, # pass the visualizer - ) - - # start training - runner.train() - ``` - -## Use the `WandbVisBackend` with OpenMMLab computer vision libraries - -The `WandbVisBackend` can also be used easily to track experiments with OpenMMLab computer vision libraries such as [MMDetection](https://mmdetection.readthedocs.io/). - -```python -# inherit base configs from the default runtime configs -_base_ = ["../_base_/default_runtime.py"] - -# Assign the `WandbVisBackend` config dictionary to the -# `vis_backends` of the `visualizer` from the base configs -_base_.visualizer.vis_backends = [ - dict( - type='WandbVisBackend', - init_kwargs={ - 'project': 'mmdet', - 'entity': 'geekyrakshit' - }, - ), -] -``` \ No newline at end of file diff --git a/content/en/guides/integrations/mmf.md b/content/en/guides/integrations/mmf.md deleted file mode 100644 index a397f25f3d..0000000000 --- a/content/en/guides/integrations/mmf.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -description: How to integrate W&B with Meta AI's MMF. -menu: - default: - identifier: mmf - parent: integrations -title: MMF -weight: 220 ---- - -The `WandbLogger` class in [Meta AI's MMF](https://github.com/facebookresearch/mmf) library will enable W&B to log the training/validation metrics, system (GPU and CPU) metrics, model checkpoints and configuration parameters. - -## Current features - -The following features are currently supported by the `WandbLogger` in MMF: - -* Training & Validation metrics -* Learning Rate over time -* Model Checkpoint saving to W&B Artifacts -* GPU and CPU system metrics -* Training configuration parameters - -## Config parameters - -The following options are available in MMF config to enable and customize the wandb logging: - -``` -training: - wandb: - enabled: true - - # An entity is a username or team name where you're sending runs. - # By default it will log the run to your user account. - entity: null - - # Project name to be used while logging the experiment with wandb - project: mmf - - # Experiment/ run name to be used while logging the experiment - # under the project with wandb. The default experiment name - # is: ${training.experiment_name} - name: ${training.experiment_name} - - # Turn on model checkpointing, saving checkpoints to W&B Artifacts - log_model_checkpoint: true - - # Additional argument values that you want to pass to wandb.init() such as: - # job_type: 'train' - # tags: ['tag1', 'tag2'] - -env: - # To change the path to the directory where wandb metadata would be - # stored (Default: env.log_dir): - wandb_logdir: ${env:MMF_WANDB_LOGDIR,} -``` \ No newline at end of file diff --git a/content/en/guides/integrations/paddledetection.md b/content/en/guides/integrations/paddledetection.md deleted file mode 100644 index 40e69ccde8..0000000000 --- a/content/en/guides/integrations/paddledetection.md +++ /dev/null @@ -1,120 +0,0 @@ ---- -description: How to integrate W&B with PaddleDetection. -menu: - default: - identifier: paddledetection - parent: integrations -title: PaddleDetection -weight: 270 ---- - -{{< cta-button colabLink="https://colab.research.google.com/drive/1ywdzcZKPmynih1GuGyCWB4Brf5Jj7xRY?usp=sharing" >}} - -[PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection) is an end-to-end object-detection development kit based on [PaddlePaddle](https://github.com/PaddlePaddle/Paddle). It detects various mainstream objects, segments instances, and tracks and detects keypoints using configurable modules such as network components, data augmentations, and losses. - -PaddleDetection now includes a built-in W&B integration which logs all your training and validation metrics, as well as your model checkpoints and their corresponding metadata. - -The PaddleDetection `WandbLogger` logs your training and evaluation metrics to W&B as well as your model checkpoints while training. - -[Read a W&B blog post](https://wandb.ai/manan-goel/PaddleDetectionYOLOX/reports/Object-Detection-with-PaddleDetection-and-W-B--VmlldzoyMDU4MjY0) which illustrates how to integrate a YOLOX model with PaddleDetection on a subset of the `COCO2017` dataset. - -## Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -## Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="python" %}} - -```notebook -!pip install wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} -{{< /tabpane >}} - -## Activate the `WandbLogger` in your training script - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} -To use wandb via arguments to `train.py` in [PaddleDetection](https://github.com/PaddlePaddle/PaddleDetection/): - -* Add the `--use_wandb` flag -* The first wandb arguments must be preceded by `-o` (you only need to pass this once) -* Each individual argument must contain the prefix `"wandb-"` . For example any argument to be passed to [`wandb.init()`]({{< relref "/ref/python/sdk/functions/init.md" >}}) would get the `wandb-` prefix - -```shell -python tools/train.py - -c config.yml \ - --use_wandb \ - -o \ - wandb-project=MyDetector \ - wandb-entity=MyTeam \ - wandb-save_dir=./logs -``` -{{% /tab %}} -{{% tab header="`config.yml`" value="config" %}} -Add the wandb arguments to the config.yml file under the `wandb` key: - -``` -wandb: - project: MyProject - entity: MyTeam - save_dir: ./logs -``` - -When you run your `train.py` file, it generates a link to your W&B Dashboard. - -{{< img src="/images/integrations/paddledetection_wb_dashboard.png" alt="A W&B Dashboard" >}} -{{% /tab %}} -{{< /tabpane >}} - -## Feedback or issues - -If you have any feedback or issues about the W&B integration, open an issue on the [PaddleDetection GitHub](https://github.com/PaddlePaddle/PaddleDetection) or email support@wandb.com. \ No newline at end of file diff --git a/content/en/guides/integrations/paddleocr.md b/content/en/guides/integrations/paddleocr.md deleted file mode 100644 index 623ea6e7f2..0000000000 --- a/content/en/guides/integrations/paddleocr.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -description: How to integrate W&B with PaddleOCR. -menu: - default: - identifier: paddleocr - parent: integrations -title: PaddleOCR -weight: 280 ---- -[PaddleOCR](https://github.com/PaddlePaddle/PaddleOCR) aims to create multilingual, awesome, leading, and practical OCR tools that help users train better models and apply them into practice implemented in PaddlePaddle. PaddleOCR support a variety of cutting-edge algorithms related to OCR, and developed industrial solution. PaddleOCR now comes with a W&B integration for logging training and evaluation metrics along with model checkpoints with corresponding metadata. - -## Example Blog & Colab - -[Read here](https://wandb.ai/manan-goel/text_detection/reports/Train-and-Debug-Your-OCR-Models-with-PaddleOCR-and-W-B--VmlldzoyMDUwMDIw) to see how to train a model with PaddleOCR on the ICDAR2015 dataset. This also comes with a [Google Colab](https://colab.research.google.com/drive/1id2VTIQ5-M1TElAkzjzobUCdGeJeW-nV?usp=sharing) and the corresponding live W&B dashboard is available [here](https://wandb.ai/manan-goel/text_detection). There is also a Chinese version of this blog here: [W&B对您的OCR模型进行训练和调试](https://wandb.ai/wandb_fc/chinese/reports/W-B-OCR---VmlldzoyMDk1NzE4) - -## Sign up and create an API key - -An API key authenticates your machine to W&B. You can generate an API key from your user profile. - -{{% alert %}} -For a more streamlined approach, you can generate an API key by going directly to the [W&B authorization page](https://wandb.ai/authorize). Copy the displayed API key and save it in a secure location such as a password manager. -{{% /alert %}} - -1. Click your user profile icon in the upper right corner. -1. Select **User Settings**, then scroll to the **API Keys** section. -1. Click **Reveal**. Copy the displayed API key. To hide the API key, reload the page. - -## Install the `wandb` library and log in - -To install the `wandb` library locally and log in: - -{{< tabpane text=true >}} -{{% tab header="Command Line" value="cli" %}} - -1. Set the `WANDB_API_KEY` [environment variable]({{< relref "/guides/models/track/environment-variables.md" >}}) to your API key. - - ```bash - export WANDB_API_KEY= - ``` - -1. Install the `wandb` library and log in. - - - - ```shell - pip install wandb - - wandb login - ``` - -{{% /tab %}} - -{{% tab header="Python" value="python" %}} - -```bash -pip install wandb -``` -```python -import wandb -wandb.login() -``` - -{{% /tab %}} - -{{% tab header="Python notebook" value="notebook" %}} - -```notebook -!pip install wandb - -import wandb -wandb.login() -``` - -{{% /tab %}} -{{< /tabpane >}} - -## Add wandb to your `config.yml` file - -PaddleOCR requires configuration variables to be provided using a yaml file. Adding the following snippet at the end of the configuration yaml file will automatically log all training and validation metrics to a W&B dashboard along with model checkpoints: - -```python -Global: - use_wandb: True -``` - -Any additional, optional arguments that you might like to pass to [`wandb.init()`]({{< relref "/ref/python/sdk/functions/init.md" >}}) can also be added under the `wandb` header in the yaml file: - -``` -wandb: - project: CoolOCR # (optional) this is the wandb project name - entity: my_team # (optional) if you're using a wandb team, you can pass the team name here - name: MyOCRModel # (optional) this is the name of the wandb run -``` - -## Pass the `config.yml` file to `train.py` - -The yaml file is then provided as an argument to the [training script](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/tools/train.py) available in the PaddleOCR repository. - -```bash -python tools/train.py -c config.yml -``` - -Once you run your `train.py` file with W&B turned on, a link will be generated to bring you to your W&B dashboard: - -{{< img src="/images/integrations/paddleocr_wb_dashboard1.png" alt="PaddleOCR training dashboard" >}} - -{{< img src="/images/integrations/paddleocr_wb_dashboard2.png" alt="PaddleOCR validation dashboard" >}} - -{{< img src="/images/integrations/paddleocr_wb_dashboard3.png" alt="Text Detection Model dashboard" >}} - -## Feedback or issues - -If you have any feedback or issues about the W&B integration, open an issue on the [PaddleOCR GitHub](https://github.com/PaddlePaddle/PaddleOCR) or email support@wandb.com. \ No newline at end of file diff --git a/content/en/guides/integrations/prodigy.md b/content/en/guides/integrations/prodigy.md deleted file mode 100644 index a31c9ded0b..0000000000 --- a/content/en/guides/integrations/prodigy.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -description: How to integrate W&B with Prodigy. -menu: - default: - identifier: prodigy - parent: integrations -title: Prodigy -weight: 290 ---- - -[Prodigy](https://prodi.gy/) is an annotation tool for creating training and evaluation data for machine learning models, error analysis, data inspection & cleaning. [W&B Tables]({{< relref "/guides/models/tables/tables-walkthrough.md" >}}) allow you to log, visualize, analyze, and share datasets (and more!) inside W&B. - -The [W&B integration with Prodigy](https://github.com/wandb/wandb/blob/master/wandb/integration/prodigy/prodigy.py) adds simple and easy-to-use functionality to upload your Prodigy-annotated dataset directly to W&B for use with Tables. - -Run a few lines of code, like these: - -```python -import wandb -from wandb.integration.prodigy import upload_dataset - -with wandb.init(project="prodigy"): - upload_dataset("news_headlines_ner") -``` - -and get visual, interactive, shareable tables like this one: - -{{< img src="/images/integrations/prodigy_interactive_visual.png" alt="Prodigy annotation table" >}} - -## Quickstart - -Use `wandb.integration.prodigy.upload_dataset` to upload your annotated prodigy dataset directly from the local Prodigy database to W&B in our [Table]({{< relref "/ref/python/sdk/data-types/table.md" >}}) format. For more information on Prodigy, including installation & setup, please refer to the [Prodigy documentation](https://prodi.gy/docs/). - -W&B will automatically try to convert images and named entity fields to [`wandb.Image`]({{< relref "/ref/python/sdk/data-types/image.md" >}}) and [`wandb.Html`]({{< relref "/ref/python/sdk/data-types/html.md" >}})respectively. Extra columns may be added to the resulting table to include these visualizations. - -## Read through a detailed example - -Explore the [Visualizing Prodigy Datasets Using W&B Tables](https://wandb.ai/kshen/prodigy/reports/Visualizing-Prodigy-Datasets-Using-W-B-Tables--Vmlldzo5NDE2MTc) for example visualizations generated with W&B Prodigy integration. - -## Also using spaCy? - -W&B also has an integration with spaCy, see the [docs here]({{< relref "/guides/integrations/spacy" >}}). \ No newline at end of file diff --git a/content/en/guides/integrations/skorch.md b/content/en/guides/integrations/skorch.md deleted file mode 100644 index fc6eac6c28..0000000000 --- a/content/en/guides/integrations/skorch.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -description: How to integrate W&B with Skorch. -menu: - default: - identifier: skorch - parent: integrations -title: Skorch -weight: 400 ---- - -You can use W&B with Skorch to automatically log the model with the best performance, along with all model performance metrics, the model topology and compute resources after each epoch. Every file saved in `wandb_run.dir` is automatically logged to W&B. - -See [example run](https://app.wandb.ai/borisd13/skorch/runs/s20or4ct?workspace=user-borisd13). - -## Parameters - -| Parameter | Type | Description | -| :--- | :--- | :--- | -| `wandb_run` | `wandb.wandb_run`. Run | wandb run used to log data. | -|`save_model` | bool (default=True)| Whether to save a checkpoint of the best model and upload it to your Run on W&B.| -|`keys_ignored`| str or list of str (default=None) | Key or list of keys that should not be logged to tensorboard. Note that in addition to the keys provided by the user, keys such as those starting with `event_` or ending on `_best` are ignored by default.| - -## Example Code - -We've created a few examples for you to see how the integration works: - -* [Colab](https://colab.research.google.com/drive/1Bo8SqN1wNPMKv5Bn9NjwGecBxzFlaNZn?usp=sharing): A simple demo to try the integration -* [A step by step guide](https://app.wandb.ai/cayush/uncategorized/reports/Automate-Kaggle-model-training-with-Skorch-and-W%26B--Vmlldzo4NTQ1NQ): to tracking your Skorch model performance - -```python -# Install wandb -... pip install wandb - -import wandb -from skorch.callbacks import WandbLogger - -# Create a wandb Run -wandb_run = wandb.init() -# Alternative: Create a wandb Run without a W&B account -wandb_run = wandb.init(anonymous="allow") - -# Log hyper-parameters (optional) -wandb_run.config.update({"learning rate": 1e-3, "batch size": 32}) - -net = NeuralNet(..., callbacks=[WandbLogger(wandb_run)]) -net.fit(X, y) -``` - -## Method reference - -| Method | Description | -| :--- | :--- | -| `initialize`\(\) | \(Re-\)Set the initial state of the callback. | -| `on_batch_begin`\(net\[, X, y, training\]\) | Called at the beginning of each batch. | -| `on_batch_end`\(net\[, X, y, training\]\) | Called at the end of each batch. | -| `on_epoch_begin`\(net\[, dataset_train, …\]\) | Called at the beginning of each epoch. | -| `on_epoch_end`\(net, \*\*kwargs\) | Log values from the last history step and save best model | -| `on_grad_computed`\(net, named_parameters\[, X, …\]\) | Called once per batch after gradients have been computed but before an update step was performed. | -| `on_train_begin`\(net, \*\*kwargs\) | Log model topology and add a hook for gradients | -| `on_train_end`\(net\[, X, y\]\) | Called at the end of training. | \ No newline at end of file diff --git a/content/en/guides/integrations/stable-baselines-3.md b/content/en/guides/integrations/stable-baselines-3.md deleted file mode 100644 index 4ed99a0841..0000000000 --- a/content/en/guides/integrations/stable-baselines-3.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -description: How to integrate W&B with Stable Baseline 3. -menu: - default: - identifier: stable-baselines-3 - parent: integrations -title: Stable Baselines 3 -weight: 420 ---- - -[Stable Baselines 3](https://github.com/DLR-RM/stable-baselines3) \(SB3\) is a set of reliable implementations of reinforcement learning algorithms in PyTorch. W&B's SB3 integration: - -* Records metrics such as losses and episodic returns. -* Uploads videos of agents playing the games. -* Saves the trained model. -* Logs the model's hyperparameters. -* Logs the model gradient histograms. - -Review an [example SB3 training run](https://wandb.ai/wandb/sb3/runs/1jyr6z10). - -## Log your SB3 experiments - -```python -from wandb.integration.sb3 import WandbCallback - -model.learn(..., callback=WandbCallback()) -``` - -{{< img src="/images/integrations/stable_baselines_demo.gif" alt="Stable Baselines 3 training with W&B" >}} - -## WandbCallback Arguments - -| Argument | Usage | -| :--- | :--- | -| `verbose` | The verbosity of sb3 output | -| `model_save_path` | Path to the folder where the model will be saved, The default value is \`None\` so the model is not logged | -| `model_save_freq` | Frequency to save the model | -| `gradient_save_freq` | Frequency to log gradient. The default value is 0 so the gradients are not logged | - -## Basic Example - -The W&B SB3 integration uses the logs output from TensorBoard to log your metrics - -```python -import gym -from stable_baselines3 import PPO -from stable_baselines3.common.monitor import Monitor -from stable_baselines3.common.vec_env import DummyVecEnv, VecVideoRecorder -import wandb -from wandb.integration.sb3 import WandbCallback - - -config = { - "policy_type": "MlpPolicy", - "total_timesteps": 25000, - "env_name": "CartPole-v1", -} -run = wandb.init( - project="sb3", - config=config, - sync_tensorboard=True, # auto-upload sb3's tensorboard metrics - monitor_gym=True, # auto-upload the videos of agents playing the game - save_code=True, # optional -) - - -def make_env(): - env = gym.make(config["env_name"]) - env = Monitor(env) # record stats such as returns - return env - - -env = DummyVecEnv([make_env]) -env = VecVideoRecorder( - env, - f"videos/{run.id}", - record_video_trigger=lambda x: x % 2000 == 0, - video_length=200, -) -model = PPO(config["policy_type"], env, verbose=1, tensorboard_log=f"runs/{run.id}") -model.learn( - total_timesteps=config["total_timesteps"], - callback=WandbCallback( - gradient_save_freq=100, - model_save_path=f"models/{run.id}", - verbose=2, - ), -) -run.finish() -``` \ No newline at end of file diff --git a/content/en/guides/integrations/ultralytics.md b/content/en/guides/integrations/ultralytics.md deleted file mode 100644 index f9c34f8232..0000000000 --- a/content/en/guides/integrations/ultralytics.md +++ /dev/null @@ -1,144 +0,0 @@ ---- -menu: - default: - identifier: ultralytics - parent: integrations -title: Ultralytics -weight: 480 ---- -{{< cta-button colabLink="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/ultralytics/01_train_val.ipynb" >}} - -[Ultralytics](https://github.com/ultralytics/ultralytics) is the home for cutting-edge, state-of-the-art computer vision models for tasks like image classification, object detection, image segmentation, and pose estimation. Not only it hosts [YOLOv8](https://docs.ultralytics.com/models/yolov8/), the latest iteration in the YOLO series of real-time object detection models, but other powerful computer vision models such as [SAM (Segment Anything Model)](https://docs.ultralytics.com/models/sam/#introduction-to-sam-the-segment-anything-model), [RT-DETR](https://docs.ultralytics.com/models/rtdetr/), [YOLO-NAS](https://docs.ultralytics.com/models/yolo-nas/), etc. Besides providing implementations of these models, Ultralytics also provides us with out-of-the-box workflows for training, fine-tuning, and applying these models using an easy-to-use API. - -## Get started - -1. Install `ultralytics` and `wandb`. - - {{< tabpane text=true >}} - {{% tab header="Command Line" value="script" %}} - - ```shell - pip install --upgrade ultralytics==8.0.238 wandb - - # or - # conda install ultralytics - ``` - - {{% /tab %}} - {{% tab header="Notebook" value="notebook" %}} - - ```bash - !pip install --upgrade ultralytics==8.0.238 wandb - ``` - - {{% /tab %}} - {{< /tabpane >}} - - The development team has tested the integration with `ultralyticsv8.0.238` and below. To report any issues with the integration, create a [GitHub issue](https://github.com/wandb/wandb/issues/new?template=sdk-bug.yml) with the tag `yolov8`. - -## Track experiments and visualize validation results - -{{< cta-button colabLink="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/ultralytics/01_train_val.ipynb" >}} - -This section demonstrates a typical workflow of using an [Ultralytics](https://docs.ultralytics.com/modes/predict/) model for training, fine-tuning, and validation and performing experiment tracking, model-checkpointing, and visualization of the model's performance using [W&B](https://wandb.ai/site). - -You can also check out about the integration in this report: [Supercharging Ultralytics with W&B](https://wandb.ai/geekyrakshit/ultralytics/reports/Supercharging-Ultralytics-with-Weights-Biases--Vmlldzo0OTMyMDI4) - -To use the W&B integration with Ultralytics, import the `wandb.integration.ultralytics.add_wandb_callback` function. - -```python -import wandb -from wandb.integration.ultralytics import add_wandb_callback - -from ultralytics import YOLO -``` - -Initialize the `YOLO` model of your choice, and invoke the `add_wandb_callback` function on it before performing inference with the model. This ensures that when you perform training, fine-tuning, validation, or inference, it automatically saves the experiment logs and the images, overlaid with both ground-truth and the respective prediction results using the [interactive overlays for computer vision tasks]({{< relref "/guides/models/track/log/media#image-overlays-in-tables" >}}) on W&B along with additional insights in a [`wandb.Table`]({{< relref "/guides/models/tables/" >}}). - -```python -with wandb.init(project="ultralytics", job_type="train") as run: - - # Initialize YOLO Model - model = YOLO("yolov8n.pt") - - # Add W&B callback for Ultralytics - add_wandb_callback(model, enable_model_checkpointing=True) - - # Train/fine-tune your model - # At the end of each epoch, predictions on validation batches are logged - # to a W&B table with insightful and interactive overlays for - # computer vision tasks - model.train(project="ultralytics", data="coco128.yaml", epochs=5, imgsz=640) -``` - -Here's how experiments tracked using W&B for an Ultralytics training or fine-tuning workflow looks like: - -
YOLO Fine-tuning Experiments
- -Here's how epoch-wise validation results are visualized using a [W&B Table]({{< relref "/guides/models/tables/" >}}): - -
WandB Validation Visualization Table
- -## Visualize prediction results - -{{< cta-button colabLink="https://colab.research.google.com/github/wandb/examples/blob/master/colabs/ultralytics/00_inference.ipynb" >}} - -This section demonstrates a typical workflow of using an [Ultralytics](https://docs.ultralytics.com/modes/predict/) model for inference and visualizing the results using [W&B](https://wandb.ai/site). - -You can try out the code in Google Colab: [Open in Colab](https://wandb.me/ultralytics-inference). - -You can also check out about the integration in this report: [Supercharging Ultralytics with W&B](https://wandb.ai/geekyrakshit/ultralytics/reports/Supercharging-Ultralytics-with-Weights-Biases--Vmlldzo0OTMyMDI4) - -In order to use the W&B integration with Ultralytics, we need to import the `wandb.integration.ultralytics.add_wandb_callback` function. - -```python -import wandb -from wandb.integration.ultralytics import add_wandb_callback - -from ultralytics.engine.model import YOLO -``` - -Download a few images to test the integration on. You can use still images, videos, or camera sources. For more information on inference sources, check out the [Ultralytics docs](https://docs.ultralytics.com/modes/predict/). - -```bash -!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img1.png -!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img2.png -!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img4.png -!wget https://raw.githubusercontent.com/wandb/examples/ultralytics/colabs/ultralytics/assets/img5.png -``` - -Initialize a W&B [run]({{< relref "/guides/models/track/runs/" >}}) using `wandb.init()`. Next, Initialize your desired `YOLO` model and invoke the `add_wandb_callback` function on it before you perform inference with the model. This ensures that when you perform inference, it automatically logs the images overlaid with your [interactive overlays for computer vision tasks]({{< relref "/guides/models/track/log/media#image-overlays-in-tables" >}}) along with additional insights in a [`wandb.Table`]({{< relref "/guides/models/tables/" >}}). - -```python -# Initialize W&B Run -with wandb.init(project="ultralytics", job_type="inference") as run: - # Initialize YOLO Model - model = YOLO("yolov8n.pt") - - # Add W&B callback for Ultralytics - add_wandb_callback(model, enable_model_checkpointing=True) - - # Perform prediction which automatically logs to a W&B Table - # with interactive overlays for bounding boxes, segmentation masks - model( - [ - "./assets/img1.jpeg", - "./assets/img3.png", - "./assets/img4.jpeg", - "./assets/img5.jpeg", - ] - ) -``` - -You do not need to explicitly initialize a run using `wandb.init()` in case of a training or fine-tuning workflow. However, if the code involves only prediction, you must explicitly create a run. - -Here's how the interactive bbox overlay looks: - -
WandB Image Overlay
- -For more details, see the [W&B image overlays guide]({{< relref "/guides/models/track/log/media.md#image-overlays" >}}). - -## More resources - -* [Supercharging Ultralytics with W&B](https://wandb.ai/geekyrakshit/ultralytics/reports/Supercharging-Ultralytics-with-Weights-Biases--Vmlldzo0OTMyMDI4) -* [Object Detection using YOLOv8: An End-to-End Workflow](https://wandb.ai/reviewco/object-detection-bdd/reports/Object-Detection-using-YOLOv8-An-End-to-End-Workflow--Vmlldzo1NTAyMDQ1) \ No newline at end of file diff --git a/content/en/guides/integrations/w-and-b-for-julia.md b/content/en/guides/integrations/w-and-b-for-julia.md deleted file mode 100644 index 73318ef33a..0000000000 --- a/content/en/guides/integrations/w-and-b-for-julia.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -description: How to integrate W&B with Julia. -menu: - default: - identifier: w-and-b-for-julia - parent: integrations -title: W&B for Julia -weight: 450 ---- - -For those running machine learning experiments in the Julia programming language, a community contributor has created an unofficial set of Julia bindings called [wandb.jl](https://github.com/avik-pal/Wandb.jl) that you can use. - -You can find examples [in the documentation](https://github.com/avik-pal/Wandb.jl/tree/main/docs/src/examples) on the wandb.jl repository. Their "Getting Started" example is here: - -```julia -using Wandb, Dates, Logging - -# Start a new run, tracking hyperparameters in config -lg = WandbLogger(project = "Wandb.jl", - name = "wandbjl-demo-$(now())", - config = Dict("learning_rate" => 0.01, - "dropout" => 0.2, - "architecture" => "CNN", - "dataset" => "CIFAR-100")) - -# Use LoggingExtras.jl to log to multiple loggers together -global_logger(lg) - -# Simulating the training or evaluation loop -for x ∈ 1:50 - acc = log(1 + x + rand() * get_config(lg, "learning_rate") + rand() + get_config(lg, "dropout")) - loss = 10 - log(1 + x + rand() + x * get_config(lg, "learning_rate") + rand() + get_config(lg, "dropout")) - # Log metrics from your script to W&B - @info "metrics" accuracy=acc loss=loss -end - -# Finish the run -close(lg) -``` \ No newline at end of file