From 9bca7fec48dc30f8ee882b5861cda322a11cc0f4 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 16 May 2021 12:53:01 -0500 Subject: [PATCH 01/19] cases&how: generalizing shared dev server case and and extract guided info to new how-to --- content/docs/sidebar.json | 5 +- content/docs/use-cases/sharing-resources.md | 54 +++++++++++++++ .../how-to/share-a-dvc-cache.md} | 65 +++++-------------- redirects-list.json | 1 + 4 files changed, 74 insertions(+), 51 deletions(-) create mode 100644 content/docs/use-cases/sharing-resources.md rename content/docs/{use-cases/shared-development-server.md => user-guide/how-to/share-a-dvc-cache.md} (57%) diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 254cc8c4b3..bc46dcfda9 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -87,7 +87,7 @@ "slug": "sharing-data-and-model-files" }, "data-registries", - "shared-development-server" + "sharing-resources" ] }, { @@ -131,7 +131,8 @@ "stop-tracking-data", "update-tracked-data", "add-deps-or-outs-to-a-stage", - "merge-conflicts" + "merge-conflicts", + "share-a-dvc-cache" ] }, { diff --git a/content/docs/use-cases/sharing-resources.md b/content/docs/use-cases/sharing-resources.md new file mode 100644 index 0000000000..a55668097b --- /dev/null +++ b/content/docs/use-cases/sharing-resources.md @@ -0,0 +1,54 @@ +# Sharing Resources + +DVC enables different ways to optimize resource utilization for scenarios where +there is a desire or constraint to do so. Whether you have a single shared +server with multiple users, a single computing environment to run experiments, +need to share GPU access with others, or want a centralized data storage, it's +possible to setup DVC accordingly. + +![](/img/shared-server.png) _Data store shared by DVC projects_ + +## Example: Shared Development Server + +With DVC, you can easily setup shared data store on a server with multiple users +or processes. This enables near-instantaneous workspace restoration +and switching speeds for everyone – a **checkout for data**. + +You and your colleagues can work in your own separate workspaces as +usual, and DVC will handle all your data in the most effective way possible. +Let's say you are cleaning up raw data for later stages: + +```dvc +$ dvc add raw +$ dvc run -n clean_data -d cleanup.py -d raw -o clean \ + ./cleanup.py raw clean +# The data is cached in the shared location. +$ git add raw.dvc dvc.yaml dvc.lock .gitignore +$ git commit -m "cleanup raw data" +$ git push +``` + +Your colleagues can [checkout](/doc/command-reference/checkout) the +project data (from the shared cache), and have both +`raw` and `clean` data files appear in their workspace without moving anything +manually. After this, they could decide to continue building this +[pipeline](/doc/command-reference/dag) and process the clean data: + +```dvc +$ git pull +$ dvc checkout +A raw # Data is linked from cache to workspace. +$ dvc run -n process_clean_data -d process.py -d clean -o processed + ./process.py clean processed +$ git add dvc.yaml dvc.lock +$ git commit -m "process clean data" +$ git push +``` + +And now you can just as easily make their work appear in your workspace with: + +```dvc +$ git pull +$ dvc checkout +A processed +``` diff --git a/content/docs/use-cases/shared-development-server.md b/content/docs/user-guide/how-to/share-a-dvc-cache.md similarity index 57% rename from content/docs/use-cases/shared-development-server.md rename to content/docs/user-guide/how-to/share-a-dvc-cache.md index bcc5c83103..97e1c9ba1f 100644 --- a/content/docs/use-cases/shared-development-server.md +++ b/content/docs/user-guide/how-to/share-a-dvc-cache.md @@ -1,13 +1,21 @@ -# Shared Development Server +--- +title: 'How to Share a Cache Among Projects' +description: >- + Setup a single cache for different projects or distributed copies of a same + project. +--- -Some teams may prefer using a single shared machine to run their experiments. -This allows better resource utilization, such as GPU access, centralized data -storage, etc. With DVC, you can easily setup shared data store on a server with -multiple users or processes. This enables near-instantaneous -workspace restoration and switching speeds for everyone – a -**checkout for data**. +# How to Share a DVC Cache -![](/img/shared-server.png) _Data store shared by DVC projects_ +There are 2 main reasons to setup a shared DVC cache: + +1. You have distributed copies of a DVC repository in a single shared server + with multiple users. A shared cache is necessary to avoid duplicating the + project's data on the single local storage available to all. +2. Your team works with multiple projects in environments with limited storage, + which share a large storage unit. Everyone needs to use the shared drive + anyway, and combining the cache locations will also prevent data duplication + (across projects). ## Preparation @@ -77,44 +85,3 @@ If you're using Git, commit the changes to your project's config file (usually $ git add .dvc/config $ git commit -m "config external/shared DVC cache" ``` - -## Examples - -You and your colleagues can work in your own separate workspaces as -usual, and DVC will handle all your data in the most effective way possible. -Let's say you are cleaning up raw data for later stages: - -```dvc -$ dvc add raw -$ dvc run -n clean_data -d cleanup.py -d raw -o clean \ - ./cleanup.py raw clean -# The data is cached in the shared location. -$ git add raw.dvc dvc.yaml dvc.lock .gitignore -$ git commit -m "cleanup raw data" -$ git push -``` - -Your colleagues can [checkout](/doc/command-reference/checkout) the -project data (from the shared cache), and have both -`raw` and `clean` data files appear in their workspace without moving anything -manually. After this, they could decide to continue building this -[pipeline](/doc/command-reference/dag) and process the clean data: - -```dvc -$ git pull -$ dvc checkout -A raw # Data is linked from cache to workspace. -$ dvc run -n process_clean_data -d process.py -d clean -o processed - ./process.py clean processed -$ git add dvc.yaml dvc.lock -$ git commit -m "process clean data" -$ git push -``` - -And now you can just as easily make their work appear in your workspace with: - -```dvc -$ git pull -$ dvc checkout -A processed -``` diff --git a/redirects-list.json b/redirects-list.json index bf5d054265..d319e621a3 100644 --- a/redirects-list.json +++ b/redirects-list.json @@ -31,6 +31,7 @@ "^/doc/tutorials(/.*)? /doc/start", "^/doc/use-cases/data-and-model-files-versioning/?$ /doc/use-cases/versioning-data-and-model-files", + "^/doc/doc/use-cases/shared-development-server$ /doc/use-cases/sharing-resources", "^/doc/user-guide/updating-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/how-to/update-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/merge-conflicts$ /doc/user-guide/how-to/merge-conflicts", From c776a7727d072c3cf48e6c436ec66df4f9cdeb5b Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 17 May 2021 13:08:59 -0500 Subject: [PATCH 02/19] cases: rewrite intro to Sharing Res and draft a first section on storage --- content/docs/sidebar.json | 2 +- .../sharing-resources-efficiently.md | 79 +++++++++++++++++++ content/docs/use-cases/sharing-resources.md | 54 ------------- redirects-list.json | 2 +- 4 files changed, 81 insertions(+), 56 deletions(-) create mode 100644 content/docs/use-cases/sharing-resources-efficiently.md delete mode 100644 content/docs/use-cases/sharing-resources.md diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index bc46dcfda9..022548e0d0 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -87,7 +87,7 @@ "slug": "sharing-data-and-model-files" }, "data-registries", - "sharing-resources" + "sharing-resources-efficiently" ] }, { diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md new file mode 100644 index 0000000000..aa975a826f --- /dev/null +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -0,0 +1,79 @@ +# Sharing Resources Efficiently + +Data science teams need to handle large files, rotate the use og special +processors, and minimize data transfers. This involves provisioning and managing +resources such as massive on-prem data stores and powerful servers, which can be +expensive and time consuming. + +![](/img/shared-server.png) _Data store shared by DVC projects_ + +DVC projects support different ways to optimize resource utilization in order to +minimize cost and complexity. This can make the difference, for example when: + +- Multiple users work on the same shared server, or there's a single computing + environment to run experiments. +- GPU time gets distributed among people or processes for training machine + learning models. +- There's a centralized data storage unit or cluster. + +## Shared Storage + +Individual DVC projects already use a local data cache to achieve +near-instantaneous workspace restoration when switching among +[versions of data](/doc/use-cases/versioning-data-and-model-files), results, +etc. (think **Git for data**). + +The cache directory is fully customizable (see `dvc config cache`), including +it's location, so nothing prevents you from having it in a +[location shared](/doc/user-guide/how-to/share-a-dvc-cache) by multiple local +copies of a project, or even by different projects altogether. This +enables DVC's automatic de-duplication of data files across all projects. + +Additionally, optional [remote storage](/doc/command-reference/remote) e.g. +Amazon S3 or Azure Blob Storage (managed separately) can be used by multiple +projects to synchronize their caches (see `dvc push` and `dvc pull`). + + diff --git a/content/docs/use-cases/sharing-resources.md b/content/docs/use-cases/sharing-resources.md deleted file mode 100644 index a55668097b..0000000000 --- a/content/docs/use-cases/sharing-resources.md +++ /dev/null @@ -1,54 +0,0 @@ -# Sharing Resources - -DVC enables different ways to optimize resource utilization for scenarios where -there is a desire or constraint to do so. Whether you have a single shared -server with multiple users, a single computing environment to run experiments, -need to share GPU access with others, or want a centralized data storage, it's -possible to setup DVC accordingly. - -![](/img/shared-server.png) _Data store shared by DVC projects_ - -## Example: Shared Development Server - -With DVC, you can easily setup shared data store on a server with multiple users -or processes. This enables near-instantaneous workspace restoration -and switching speeds for everyone – a **checkout for data**. - -You and your colleagues can work in your own separate workspaces as -usual, and DVC will handle all your data in the most effective way possible. -Let's say you are cleaning up raw data for later stages: - -```dvc -$ dvc add raw -$ dvc run -n clean_data -d cleanup.py -d raw -o clean \ - ./cleanup.py raw clean -# The data is cached in the shared location. -$ git add raw.dvc dvc.yaml dvc.lock .gitignore -$ git commit -m "cleanup raw data" -$ git push -``` - -Your colleagues can [checkout](/doc/command-reference/checkout) the -project data (from the shared cache), and have both -`raw` and `clean` data files appear in their workspace without moving anything -manually. After this, they could decide to continue building this -[pipeline](/doc/command-reference/dag) and process the clean data: - -```dvc -$ git pull -$ dvc checkout -A raw # Data is linked from cache to workspace. -$ dvc run -n process_clean_data -d process.py -d clean -o processed - ./process.py clean processed -$ git add dvc.yaml dvc.lock -$ git commit -m "process clean data" -$ git push -``` - -And now you can just as easily make their work appear in your workspace with: - -```dvc -$ git pull -$ dvc checkout -A processed -``` diff --git a/redirects-list.json b/redirects-list.json index d319e621a3..1e55fd4f70 100644 --- a/redirects-list.json +++ b/redirects-list.json @@ -31,7 +31,7 @@ "^/doc/tutorials(/.*)? /doc/start", "^/doc/use-cases/data-and-model-files-versioning/?$ /doc/use-cases/versioning-data-and-model-files", - "^/doc/doc/use-cases/shared-development-server$ /doc/use-cases/sharing-resources", + "^/doc/doc/use-cases/shared-development-server$ /doc/use-cases/sharing-resources-efficiently", "^/doc/user-guide/updating-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/how-to/update-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/merge-conflicts$ /doc/user-guide/how-to/merge-conflicts", From 204e994c3a20bfd1194f82f36b0150e9262a16ce Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 18 May 2021 09:16:15 -0500 Subject: [PATCH 03/19] cases: quick updates per #2482 feedback --- content/docs/use-cases/sharing-resources-efficiently.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index aa975a826f..bf9d920da7 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -1,6 +1,6 @@ # Sharing Resources Efficiently -Data science teams need to handle large files, rotate the use og special +Data science teams need to handle large files, rotate the use of special processors, and minimize data transfers. This involves provisioning and managing resources such as massive on-prem data stores and powerful servers, which can be expensive and time consuming. @@ -16,8 +16,6 @@ minimize cost and complexity. This can make the difference, for example when: learning models. - There's a centralized data storage unit or cluster. -## Shared Storage - Individual DVC projects already use a local data cache to achieve near-instantaneous workspace restoration when switching among [versions of data](/doc/use-cases/versioning-data-and-model-files), results, From 3524113b9b0c9c9ac18fbc3aead24aa74297989b Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sat, 22 May 2021 12:02:04 -0500 Subject: [PATCH 04/19] cases: connect cache/remote solutions to Sharing Res problem stmt per https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-662431546 --- .../sharing-resources-efficiently.md | 29 +++++++++++-------- .../user-guide/basic-concepts/dvc-cache.md | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index bf9d920da7..416c42108f 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -7,8 +7,8 @@ expensive and time consuming. ![](/img/shared-server.png) _Data store shared by DVC projects_ -DVC projects support different ways to optimize resource utilization in order to -minimize cost and complexity. This can make the difference, for example when: +Minimizing the cost and complexity of utilizing key resources can make the +difference, for example, when: - Multiple users work on the same shared server, or there's a single computing environment to run experiments. @@ -16,20 +16,25 @@ minimize cost and complexity. This can make the difference, for example when: learning models. - There's a centralized data storage unit or cluster. -Individual DVC projects already use a local data cache to achieve -near-instantaneous workspace restoration when switching among +In DVC, a built-in caching mechanism already provides individual +projects with basic +[dataset optimization](/doc/user-guide/large-dataset-optimization). It +de-duplicates file contents automatically -- so need to worry about depleting +disk space with copies. And by linking files from cache to +workspace, DVC achieves near-instantaneous switching between [versions of data](/doc/use-cases/versioning-data-and-model-files), results, etc. (think **Git for data**). -The cache directory is fully customizable (see `dvc config cache`), including -it's location, so nothing prevents you from having it in a -[location shared](/doc/user-guide/how-to/share-a-dvc-cache) by multiple local -copies of a project, or even by different projects altogether. This -enables DVC's automatic de-duplication of data files across all projects. +These benefits can extend to multiple DVC repository copies, or even to +different projects altogether. Just set up their caches to the same +[shared](/doc/user-guide/how-to/share-a-dvc-cache) directory. This way they all +use a central data location which optimizes local (or network) storage. -Additionally, optional [remote storage](/doc/command-reference/remote) e.g. -Amazon S3 or Azure Blob Storage (managed separately) can be used by multiple -projects to synchronize their caches (see `dvc push` and `dvc pull`). +Additionally/Alternatively, [remote storage](/doc/command-reference/remote) (on +Amazon S3, SSH, Google Drive, etc.) can also be shared by multiple projects to +back up and synchronize their data caches (see `dvc push` and `dvc pull`). This +can reduce service costs by consolidating an optimized data backup for many +projects. +> 💡 Another way to centralize some or all of the data requirements of your +> projects is to implement a [data registry](/doc/use-cases/data-registries) +> pattern. From 62b4fed4369bf11fa4d6a4ccb2de1746d06a7fdf Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 23 May 2021 03:10:29 -0500 Subject: [PATCH 06/19] ref: update destroy external cache example rel https://github.com/iterative/dvc.org/pull/2475#pullrequestreview-663875895 --- content/docs/command-reference/destroy.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/content/docs/command-reference/destroy.md b/content/docs/command-reference/destroy.md index d51e856a20..fc8715353c 100644 --- a/content/docs/command-reference/destroy.md +++ b/content/docs/command-reference/destroy.md @@ -57,27 +57,26 @@ $ ls -a .git code.py foo ``` -## Example: External cache directory (is preserved) +## Example: Preserve an external cache directory -By default, the cache location is `.dvc/cache`. Let's change the -cache location to `/mnt/cache` and then execute `dvc destroy` command: +By default, the cache location is `.dvc/cache`. Let's change its +location to `/mnt/cache` using `dvc cache dir`, add some data, and then try +`dvc destroy`: ```dvc -$ dvc init -$ echo foo > foo $ dvc cache dir /mnt/cache +$ echo foo > foo $ dvc add foo ``` -`dvc cache dir` changed the location of the cache directory to an external -location. Contents of the project: +Contents of the workspace: ```dvc $ ls -a .dvc .git code.py foo foo.dvc ``` -Contents of the external `/mnt/cache` directory: +Contents of the (external) cache dir, `/mnt/cache`: ```dvc $ tree /mnt/cache @@ -86,7 +85,7 @@ $ tree /mnt/cache └── 946ac92492d2347c6235b4d2611184 ``` -Let's execute `dvc destroy`: +OK, let's destroy the DVC project: ```dvc $ dvc destroy @@ -99,9 +98,9 @@ $ ls -a .git code.py foo ``` -`dvc destroy` removed `foo.dvc` and the internal `.dvc/` directory from -project. But the cache files that are present in `/mnt/cache` -persist: +`foo.dvc` and the internal `.dvc/` directory were removed (this would include +any cached data prior to changing the cache location). But the cache files in +`/mnt/cache` persist: ```dvc $ tree /mnt/cache From 6410f85881410692e3f0e16a612e51e094de2bcc Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 23 May 2021 03:28:24 -0500 Subject: [PATCH 07/19] cases: add figure to Shared Resources intro --- .../sharing-resources-efficiently.md | 27 +++++++++--------- static/img/resource-pool.png | Bin 0 -> 50477 bytes 2 files changed, 13 insertions(+), 14 deletions(-) create mode 100644 static/img/resource-pool.png diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 5efef21f09..3b5b55e1bc 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -5,39 +5,38 @@ processors, and minimize data transfers. This involves provisioning and managing resources such as massive on-prem data stores and powerful servers, which can be expensive and time consuming. -![]() _TODO: NEEDS NEW FIGURE HERE_ +![](/img/resource-pool.png) _Fragile and disjointed pool of data resources_ Minimizing the cost and complexity of utilizing key resources can make the difference, for example, when: - Multiple users work on the same shared server. -- There's a centralized data storage unit or cluster. -- There's a single computing environment to run experiments. -- GPU time gets distributed among people or processes for training machine - learning models. +- There's a centralized data storage unit or single-entry cluster. +- There's a single computing environment with access to the data needed to + reproduce full [experiments](/doc/user-guide/experiment-management). +- Distributing GPU time among people or processes for training machine learning + models In DVC, a built-in caching mechanism already provides individual projects with basic [dataset optimization](/doc/user-guide/large-dataset-optimization). It -de-duplicates file contents automatically -- so need to worry about depleting +de-duplicates file contents automatically -- no need to worry about depleting disk space with copies. And by linking files from cache to workspace, DVC achieves near-instantaneous switching between [versions of data](/doc/use-cases/versioning-data-and-model-files), results, etc. (think **Git for data**). -These benefits can extend to multiple DVC repository copies, or even to -different projects altogether. Set up -[the same external cache](/doc/user-guide/how-to/share-a-dvc-cache) directory -for all of them so that they share a central data location, optimizing local (or -network) storage. +These benefits can extend to multiple DVC repository clones, or even to +different projects altogether. Just set up +[the same external cache](/doc/user-guide/how-to/share-a-dvc-cache) directory so +they all share a central data location, optimizing local (or network) storage. ![](/img/shared-server.png) _One data store shared among people or projects_ Additionally/Alternatively, [remote storage](/doc/command-reference/remote) (on Amazon S3, SSH, Google Drive, etc.) can also be shared by multiple projects to -back up and synchronize their data caches (see `dvc push` and `dvc pull`). This -can reduce service costs by consolidating an optimized data backup for many -projects. +synchronize their data caches (see `dvc push` and `dvc pull`). This can reduce +service costs by consolidating data backups. > 💡 Another way to centralize some or all of the data requirements of your > projects is to implement a [data registry](/doc/use-cases/data-registries) diff --git a/static/img/resource-pool.png b/static/img/resource-pool.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec368af4f76778ec8e45ca32c6b25c7ce9dacce GIT binary patch literal 50477 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 g0NTeh4$e)^9ry(@SB2h5Kd#sB~S literal 0 HcmV?d00001 From 3a5f0570d24cfea5d631707498b9cea26064b857 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 23 May 2021 07:20:29 -0500 Subject: [PATCH 08/19] cases: wrap up Shared Resources story (1st version) --- .../sharing-resources-efficiently.md | 61 +++++++++++++++++-- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 3b5b55e1bc..8cda80f3fe 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -7,8 +7,7 @@ expensive and time consuming. ![](/img/resource-pool.png) _Fragile and disjointed pool of data resources_ -Minimizing the cost and complexity of utilizing key resources can make the -difference, for example, when: +Minimizing this cost and complexity can make the difference, for example, when: - Multiple users work on the same shared server. - There's a centralized data storage unit or single-entry cluster. @@ -20,9 +19,8 @@ difference, for example, when: In DVC, a built-in caching mechanism already provides individual projects with basic [dataset optimization](/doc/user-guide/large-dataset-optimization). It -de-duplicates file contents automatically -- no need to worry about depleting -disk space with copies. And by linking files from cache to -workspace, DVC achieves near-instantaneous switching between +de-duplicates file contents automatically. And by linking files from cache to +workspace, it achieves near-instantaneous switching between [versions of data](/doc/use-cases/versioning-data-and-model-files), results, etc. (think **Git for data**). @@ -41,3 +39,56 @@ service costs by consolidating data backups. > 💡 Another way to centralize some or all of the data requirements of your > projects is to implement a [data registry](/doc/use-cases/data-registries) > pattern. + +Something else that data-driven teams may need is a specialized execution +environment (such as a server with abundant memory and GPUs) to test experiments +on large data loads. This lets different members confirm whether promising +[data pipeline](/doc/start/data-pipelines) improvements they have developed +locally scale up. + +To this end, you can deploy the DVC repository on a shared server +(easy using Git). The familiar DVC [CLI](/doc/command-reference) can be used +there to checkout specific project versions (e.g. Git branches or tags), plug in +full datasets, and reproduce the experiments in question (see `dvc exp run`). + +![]() _TO-DO: Do we want a 3rd figure here?_ + +> 💡 Integrate this part of the team's workflow to a regular development process +> (on platforms like GitHub or GitLab) using [CML](https://cml.dev/). This can +> be part of your CI/CD setup, and include automatic performance reports. + +Finally, there's the question of managing residual data objects left behind by +different people and processes. This can be a challenging and risky task without +a clear mapping of who-uses-what in a collective work effort. DVC provides this +exact map through human-readable [metafiles](/doc/user-guide/project-structure) +that you can analyze and manipulate as needed. Garbage collection becomes as +simple as typing `dvc gc` with this approach. + + From 02e0f7e7e54beba64859a1b7fa8d62aa62afd04b Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Sun, 23 May 2021 07:50:29 -0500 Subject: [PATCH 09/19] cases: fix links to old case and copy edits on the new one --- content/docs/command-reference/config.md | 4 +- content/docs/command-reference/destroy.md | 14 ++--- content/docs/command-reference/gc.md | 8 +-- .../docs/start/data-and-model-versioning.md | 7 ++- .../sharing-resources-efficiently.md | 52 ++++++++++--------- .../versioning-data-and-model-files/index.md | 9 ++-- .../docs/user-guide/managing-external-data.md | 2 +- 7 files changed, 50 insertions(+), 46 deletions(-) diff --git a/content/docs/command-reference/config.md b/content/docs/command-reference/config.md index bd90a51887..d2f80dd6be 100644 --- a/content/docs/command-reference/config.md +++ b/content/docs/command-reference/config.md @@ -190,8 +190,8 @@ This section contains the following options, which affect the project's - `cache.shared` - permissions for newly created or downloaded cache files and directories. The only accepted value right now is `group`, which makes DVC use `664` (rw-rw-r--) for files and `775` (rwxrwxr-x) for directories. This is - useful when using a - [shared development server](/doc/use-cases/shared-development-server). The + useful when + [sharing data storage](/doc/use-cases/sharing-resources-efficiently). The default permissions for cache files is system dependent. In Linux and macOS for example, they're determined using [`os.umask`](https://docs.python.org/3/library/os.html#os.umask). diff --git a/content/docs/command-reference/destroy.md b/content/docs/command-reference/destroy.md index 3f1721120d..6c4d7eab2e 100644 --- a/content/docs/command-reference/destroy.md +++ b/content/docs/command-reference/destroy.md @@ -16,12 +16,14 @@ usage: dvc destroy [-h] [-q | -v] [-f] directory from the project. Note that the cache directory will be removed as well, unless it's -set to an -[external location](/doc/use-cases/shared-development-server#configure-the-external-shared-cache) -(by default a local cache is located in `.dvc/cache`). If you were using -[symlinks for linking](/doc/user-guide/large-dataset-optimization) data from the -cache, DVC will replace them with the latest versions of the actual files and -directories first, so that your data is intact after destruction. +set to an [external location][external-cache] (by default a local cache is +located in `.dvc/cache`). If you have setup +[symlinks](/doc/user-guide/large-dataset-optimization) (from cache to workspace) +in your project, DVC will replace them with the latest versions of the actual +files and directories first, so that your data is intact after destruction. + +[external-cache]: + /doc/user-guide/managing-external-data#setting-up-an-external-cache > Refer to [Project Structure](/doc/user-guide/project-structure) for more > details on the directories and files deleted by this command. diff --git a/content/docs/command-reference/gc.md b/content/docs/command-reference/gc.md index 7ecf669033..af5c719caf 100644 --- a/content/docs/command-reference/gc.md +++ b/content/docs/command-reference/gc.md @@ -81,10 +81,10 @@ The default remote is cleaned (see `dvc config core.remote`) unless the checkpoints). - `-p `, `--projects ` - if a single remote or a single cache is - shared among different projects (e.g. a configuration like the one described - [here](/doc/use-cases/shared-development-server)), this option can be used to - specify a list of them (each project is a path) to keep data that is currently - referenced from them. + shared among different projects (e.g. as described + [here](/doc/use-cases/sharing-resources-efficiently)), this option can be used + to specify a list of them (each project is a path) to keep data that is + currently referenced from them. - `-c`, `--cloud` - remove files in remote storage in addition to local cache. **This option is dangerous.** The default remote is used unless a specific one diff --git a/content/docs/start/data-and-model-versioning.md b/content/docs/start/data-and-model-versioning.md index ca0cf19129..341da087e7 100644 --- a/content/docs/start/data-and-model-versioning.md +++ b/content/docs/start/data-and-model-versioning.md @@ -250,10 +250,9 @@ In cases where you process very large datasets, you need an efficient mechanism versions. Do you use network attached storage (NAS)? Or a large external volume? You can learn more about advanced workflows using these links: -- A - [shared cache](/doc/use-cases/shared-development-server#configure-the-shared-cache) - can be set up to store, version and access a lot of data on a large shared - volume efficiently. +- A [shared cache](/doc/use-cases/sharing-resources-efficiently) can be set up + to store, version and access a lot of data on a large shared volume + efficiently. - A quite advanced scenario is to track and version data directly on the remote storage (e.g. S3). See [Managing External Data](https://dvc.org/doc/user-guide/managing-external-data) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 8cda80f3fe..303e3206f8 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -2,12 +2,13 @@ Data science teams need to handle large files, rotate the use of special processors, and minimize data transfers. This involves provisioning and managing -resources such as massive on-prem data stores and powerful servers, which can be -expensive and time consuming. +resources such as massive on-prem or cloud data stores and powerful servers, +which is expensive and time consuming. -![](/img/resource-pool.png) _Fragile and disjointed pool of data resources_ +![](/img/resource-pool.png) _Fragile and disjointed pool of limited resources_ -Minimizing this cost and complexity can make the difference, for example, when: +Minimizing operational cost and complexity can make the difference, for example, +when: - Multiple users work on the same shared server. - There's a centralized data storage unit or single-entry cluster. @@ -22,44 +23,45 @@ In DVC, a built-in caching mechanism already provides individual de-duplicates file contents automatically. And by linking files from cache to workspace, it achieves near-instantaneous switching between [versions of data](/doc/use-cases/versioning-data-and-model-files), results, -etc. (think **Git for data**). +etc. -These benefits can extend to multiple DVC repository clones, or even to -different projects altogether. Just set up -[the same external cache](/doc/user-guide/how-to/share-a-dvc-cache) directory so -they all share a central data location, optimizing local (or network) storage. +These benefits can extend to multiple DVC repository clones, or even different +projects altogether. Just set up +[the same cache](/doc/user-guide/how-to/share-a-dvc-cache) directory in all of +them so that they share a central data location, optimizing local (or network) +storage. ![](/img/shared-server.png) _One data store shared among people or projects_ -Additionally/Alternatively, [remote storage](/doc/command-reference/remote) (on -Amazon S3, SSH, Google Drive, etc.) can also be shared by multiple projects to -synchronize their data caches (see `dvc push` and `dvc pull`). This can reduce -service costs by consolidating data backups. +Additionally, [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, +Google Drive, etc.) can also be shared by multiple projects to synchronize their +data caches (see `dvc push` and `dvc pull`). This can reduce service costs by +consolidating the backups. > 💡 Another way to centralize some or all of the data requirements of your > projects is to implement a [data registry](/doc/use-cases/data-registries) -> pattern. +> pattern and leverage `dvc import`. -Something else that data-driven teams may need is a specialized execution -environment (such as a server with abundant memory and GPUs) to test experiments -on large data loads. This lets different members confirm whether promising -[data pipeline](/doc/start/data-pipelines) improvements they have developed -locally scale up. +Data-driven teams may also need a specialized execution environment (such as a +server with abundant memory and GPUs) to test experiments on large data loads. +This lets different members confirm whether promising +[data pipeline](/doc/start/data-pipelines) improvements developed locally scale +up. To this end, you can deploy the DVC repository on a shared server (easy using Git). The familiar DVC [CLI](/doc/command-reference) can be used -there to checkout specific project versions (e.g. Git branches or tags), plug in +there to checkout specific project versions (e.g. branches or tags), plug in full datasets, and reproduce the experiments in question (see `dvc exp run`). ![]() _TO-DO: Do we want a 3rd figure here?_ -> 💡 Integrate this part of the team's workflow to a regular development process -> (on platforms like GitHub or GitLab) using [CML](https://cml.dev/). This can -> be part of your CI/CD setup, and include automatic performance reports. +> 💡 Integrate this part of the workflow to a regular development process (on +> platforms like GitHub or GitLab) using [CML](https://cml.dev/). This can be +> part of your CI/CD setup, and include automatic performance reports. -Finally, there's the question of managing residual data objects left behind by +Finally, there's the question of handling residual data objects left behind by different people and processes. This can be a challenging and risky task without -a clear mapping of who-uses-what in a collective work effort. DVC provides this +a clear mapping of who-uses-what in a collaborative setting. DVC provides this exact map through human-readable [metafiles](/doc/user-guide/project-structure) that you can analyze and manipulate as needed. Garbage collection becomes as simple as typing `dvc gc` with this approach. diff --git a/content/docs/use-cases/versioning-data-and-model-files/index.md b/content/docs/use-cases/versioning-data-and-model-files/index.md index 099a4b9905..250e8d687b 100644 --- a/content/docs/use-cases/versioning-data-and-model-files/index.md +++ b/content/docs/use-cases/versioning-data-and-model-files/index.md @@ -62,10 +62,11 @@ Benefits of our approach include: DVC [optimizes](/doc/user-guide/large-dataset-optimization) storing and transferring large files. -- **Collaboration**: Easily distribute your project development and share its - data [internally](/doc/use-cases/shared-development-server) and - [remotely](/doc/use-cases/sharing-data-and-model-files), or - [reuse](/doc/start/data-and-model-access) it in other places. +- **Collaboration**: Easily distribute your project development and + [share limited resources](/doc/use-cases/sharing-resources-efficiently). + [Access results](/doc/use-cases/sharing-data-and-model-files) from anywhere, + or [reuse data and models](/doc/start/data-and-model-access) it in other + places. - **Data compliance**: Review data modification attempts as Git [pull requests](https://www.dummies.com/web-design-development/what-are-github-pull-requests/). diff --git a/content/docs/user-guide/managing-external-data.md b/content/docs/user-guide/managing-external-data.md index eb4dae8b50..80146473cb 100644 --- a/content/docs/user-guide/managing-external-data.md +++ b/content/docs/user-guide/managing-external-data.md @@ -65,7 +65,7 @@ location, e.g. `s3://mybucket/cache` or `ssh://user@example.com/cache` (see the examples below). > ⚠️ An external cache could be -> [shared](/doc/use-cases/shared-development-server) among copies of a DVC +> [shared](/doc/use-cases/sharing-resources-efficiently) among copies of a DVC > project. Please **do not** use external outputs in that scenario, as > `dvc checkout` in any project would overwrite the working data for all > projects. From 6daa0c23a74e0caf33e714bac06c2799254f0d0f Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 31 May 2021 03:36:17 -0500 Subject: [PATCH 10/19] cases: address minor feedback from https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-667398781 + --- .../sharing-resources-efficiently.md | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 303e3206f8..3414504abc 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -1,21 +1,20 @@ # Sharing Resources Efficiently -Data science teams need to handle large files, rotate the use of special -processors, and minimize data transfers. This involves provisioning and managing -resources such as massive on-prem or cloud data stores and powerful servers, -which is expensive and time consuming. +Data science teams need to handle large amounts of data, share limited +processing units (GPUs), avoid multiple data transfers, etc. It's not always +clear how to connect and utilize resources such as massive data stores or +powerful machines for an effective collaboration. An over-engineered setup may +require clustering servers, installing load balancing software, etc. ![](/img/resource-pool.png) _Fragile and disjointed pool of limited resources_ -Minimizing operational cost and complexity can make the difference, for example, -when: +Minimizing cost and complexity can make the difference, for example, when: - Multiple users work on the same shared server. -- There's a centralized data storage unit or single-entry cluster. -- There's a single computing environment with access to the data needed to - reproduce full [experiments](/doc/user-guide/experiment-management). -- Distributing GPU time among people or processes for training machine learning - models +- There's a centralized data storage unit or cluster. +- There's a single environment with access to the data needed to reproduce full + [pipelines](/doc/start/data-pipelines). +- Distributing GPU time among people for training machine learning models In DVC, a built-in caching mechanism already provides individual projects with basic @@ -26,27 +25,27 @@ de-duplicates file contents automatically. And by linking files from cache to etc. These benefits can extend to multiple DVC repository clones, or even different -projects altogether. Just set up +projects altogether. Configure [the same cache](/doc/user-guide/how-to/share-a-dvc-cache) directory in all of -them so that they share a central data location, optimizing local (or network) -storage. +them so that they share a central data location. The optimization of this local +(or network) storage will compound with each project that's added. ![](/img/shared-server.png) _One data store shared among people or projects_ -Additionally, [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, -Google Drive, etc.) can also be shared by multiple projects to synchronize their -data caches (see `dvc push` and `dvc pull`). This can reduce service costs by -consolidating the backups. +A central [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, +Google Drive, etc.) can also be used by many projects to synchronize cached data +(see `dvc push` and `dvc pull`). It these caches are not set up in a shared +location, then the DVC remote can represent primary storage instead. -> 💡 Another way to centralize some or all of the data requirements of your -> projects is to implement a [data registry](/doc/use-cases/data-registries) -> pattern and leverage `dvc import`. +> 💡 Another way to centralize the data requirements of your projects is to +> implement a [data registry](/doc/use-cases/data-registries) pattern and +> leverage `dvc import`. Data-driven teams may also need a specialized execution environment (such as a -server with abundant memory and GPUs) to test experiments on large data loads. -This lets different members confirm whether promising -[data pipeline](/doc/start/data-pipelines) improvements developed locally scale -up. +server with abundant memory and GPUs) to test +[experiments](/doc/start/experiments) on large data loads. This lets different +members confirm whether promising [data pipeline](/doc/start/data-pipelines) +improvements developed locally scale up. To this end, you can deploy the DVC repository on a shared server (easy using Git). The familiar DVC [CLI](/doc/command-reference) can be used From d2f2f936901dd7d89f3665d281489671a4ca6a61 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 31 May 2021 03:48:52 -0500 Subject: [PATCH 11/19] cases: generalize info about basic caching data optimization rel https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-667404970 --- .../docs/use-cases/sharing-resources-efficiently.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 3414504abc..3340959ab5 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -17,17 +17,16 @@ Minimizing cost and complexity can make the difference, for example, when: - Distributing GPU time among people for training machine learning models In DVC, a built-in caching mechanism already provides individual -projects with basic -[dataset optimization](/doc/user-guide/large-dataset-optimization). It -de-duplicates file contents automatically. And by linking files from cache to -workspace, it achieves near-instantaneous switching between +basic [dataset optimization](/doc/user-guide/large-dataset-optimization). It +de-duplicates file contents automatically. And by linking files from the cache +to your workspace, it achieves near-instantaneous switching between [versions of data](/doc/use-cases/versioning-data-and-model-files), results, etc. -These benefits can extend to multiple DVC repository clones, or even different -projects altogether. Configure +These benefits can extend to multiple copies of a DVC project, or +even different ones altogether. Just configure [the same cache](/doc/user-guide/how-to/share-a-dvc-cache) directory in all of -them so that they share a central data location. The optimization of this local +them so that they share a central data location! The optimization of this local (or network) storage will compound with each project that's added. ![](/img/shared-server.png) _One data store shared among people or projects_ From e5b8dbb575163ee6b806271ee9f6ab2fde1e9e7d Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 1 Jun 2021 00:01:22 -0500 Subject: [PATCH 12/19] cases: higher level solution intro per https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-667404970 --- .../use-cases/sharing-resources-efficiently.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 3340959ab5..46173e1304 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -3,8 +3,8 @@ Data science teams need to handle large amounts of data, share limited processing units (GPUs), avoid multiple data transfers, etc. It's not always clear how to connect and utilize resources such as massive data stores or -powerful machines for an effective collaboration. An over-engineered setup may -require clustering servers, installing load balancing software, etc. +powerful machines for an effective collaboration. An over-engineered solution +may involve clustering servers, load balancing software, etc. ![](/img/resource-pool.png) _Fragile and disjointed pool of limited resources_ @@ -16,12 +16,14 @@ Minimizing cost and complexity can make the difference, for example, when: [pipelines](/doc/start/data-pipelines). - Distributing GPU time among people for training machine learning models -In DVC, a built-in caching mechanism already provides individual -basic [dataset optimization](/doc/user-guide/large-dataset-optimization). It +DVC's approach keeps it simple: you work with a set of intuitive terminal +commands that interact directly with your files and directories (data, models, +metrics, code, etc.). A built-in caching mechanism provides basic +[dataset optimization](/doc/user-guide/large-dataset-optimization), which de-duplicates file contents automatically. And by linking files from the cache -to your workspace, it achieves near-instantaneous switching between -[versions of data](/doc/use-cases/versioning-data-and-model-files), results, -etc. +to your workspace, DVC achieves near-instantaneous switching +between [versions of data](/doc/use-cases/versioning-data-and-model-files), +results, etc. These benefits can extend to multiple copies of a DVC project, or even different ones altogether. Just configure From 87ea9d219392c711954d3a00b5d74412d4c1d3f3 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 1 Jun 2021 00:50:46 -0500 Subject: [PATCH 13/19] cases: remove md comment... oops --- .../sharing-resources-efficiently.md | 35 ++----------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 46173e1304..9583147919 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -36,14 +36,14 @@ them so that they share a central data location! The optimization of this local A central [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, Google Drive, etc.) can also be used by many projects to synchronize cached data (see `dvc push` and `dvc pull`). It these caches are not set up in a shared -location, then the DVC remote can represent primary storage instead. +location, then the DVC remote can be the primary storage instead. > 💡 Another way to centralize the data requirements of your projects is to > implement a [data registry](/doc/use-cases/data-registries) pattern and > leverage `dvc import`. -Data-driven teams may also need a specialized execution environment (such as a -server with abundant memory and GPUs) to test +Data science teams may also need a specialized execution environment (with +abundant memory and GPUs, for example) to test [experiments](/doc/start/experiments) on large data loads. This lets different members confirm whether promising [data pipeline](/doc/start/data-pipelines) improvements developed locally scale up. @@ -65,32 +65,3 @@ a clear mapping of who-uses-what in a collaborative setting. DVC provides this exact map through human-readable [metafiles](/doc/user-guide/project-structure) that you can analyze and manipulate as needed. Garbage collection becomes as simple as typing `dvc gc` with this approach. - - From 35c69d1be5a06a0fcffd8dfa73981d81f737f5da Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 1 Jun 2021 02:14:10 -0500 Subject: [PATCH 14/19] cases: rewrite part about efficient processing per https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-667407455 --- .../sharing-resources-efficiently.md | 32 ++++++++++-------- static/img/remote-execution.png | Bin 0 -> 41843 bytes 2 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 static/img/remote-execution.png diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md index 9583147919..9f81ce7cf5 100644 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ b/content/docs/use-cases/sharing-resources-efficiently.md @@ -29,9 +29,11 @@ These benefits can extend to multiple copies of a DVC project, or even different ones altogether. Just configure [the same cache](/doc/user-guide/how-to/share-a-dvc-cache) directory in all of them so that they share a central data location! The optimization of this local -(or network) storage will compound with each project that's added. +(or network) storage will compound with each project that's added. This is a +useful pattern when [sharing a development server](#example-shared-cache), for +example. -![](/img/shared-server.png) _One data store shared among people or projects_ +![](/img/shared-server.png) _One data store shared among several parties_ A central [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, Google Drive, etc.) can also be used by many projects to synchronize cached data @@ -42,22 +44,22 @@ location, then the DVC remote can be the primary storage instead. > implement a [data registry](/doc/use-cases/data-registries) pattern and > leverage `dvc import`. -Data science teams may also need a specialized execution environment (with -abundant memory and GPUs, for example) to test -[experiments](/doc/start/experiments) on large data loads. This lets different -members confirm whether promising [data pipeline](/doc/start/data-pipelines) -improvements developed locally scale up. +You can also optimize your data processing with DVC. This is made possible by +codifying your [data pipelines](/doc/start/data-pipelines). You can then deploy +the same project on one or more environments (using Git), and reproduce any +variation of the pipeline(s) with a few commands. This enables a range of +processing workflows, from distributing the execution of [experiment +queues][queueing-experiments], to rotating an ML model training environment +among team members (or batches of data). -To this end, you can deploy the DVC repository on a shared server -(easy using Git). The familiar DVC [CLI](/doc/command-reference) can be used -there to checkout specific project versions (e.g. branches or tags), plug in -full datasets, and reproduce the experiments in question (see `dvc exp run`). +[queueing-experiments]: + /doc/command-reference/exp/run#queueing-and-parallel-execution -![]() _TO-DO: Do we want a 3rd figure here?_ +![](/img/remote-execution.png) _Remote execution of ML pipelines_ -> 💡 Integrate this part of the workflow to a regular development process (on -> platforms like GitHub or GitLab) using [CML](https://cml.dev/). This can be -> part of your CI/CD setup, and include automatic performance reports. +> ♾️ You can use [CML](https://cml.dev/) to integrate your desired workflow on +> platforms like GitHub or GitLab. This can be part of your CI/CD (MLOps), along +> with automatic performance reports, among other benefits! Finally, there's the question of handling residual data objects left behind by different people and processes. This can be a challenging and risky task without diff --git a/static/img/remote-execution.png b/static/img/remote-execution.png new file mode 100644 index 0000000000000000000000000000000000000000..8183bd1fbc14678ac29d7074e03898e0019efd4f GIT binary patch literal 41843 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 literal 0 HcmV?d00001 From 36b06a0cfae92d6c3749be6afbcd7e250b83f3fe Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 28 Jun 2021 23:20:01 +0000 Subject: [PATCH 15/19] cases: roll back new use case --- content/docs/sidebar.json | 2 +- .../use-cases/shared-development-server.md | 120 ++++++++++++++++++ .../sharing-resources-efficiently.md | 69 ---------- .../user-guide/basic-concepts/dvc-cache.md | 2 +- redirects-list.json | 1 - 5 files changed, 122 insertions(+), 72 deletions(-) create mode 100644 content/docs/use-cases/shared-development-server.md delete mode 100644 content/docs/use-cases/sharing-resources-efficiently.md diff --git a/content/docs/sidebar.json b/content/docs/sidebar.json index 022548e0d0..0386120f4a 100644 --- a/content/docs/sidebar.json +++ b/content/docs/sidebar.json @@ -87,7 +87,7 @@ "slug": "sharing-data-and-model-files" }, "data-registries", - "sharing-resources-efficiently" + "shared-development-server" ] }, { diff --git a/content/docs/use-cases/shared-development-server.md b/content/docs/use-cases/shared-development-server.md new file mode 100644 index 0000000000..fcab0a3d53 --- /dev/null +++ b/content/docs/use-cases/shared-development-server.md @@ -0,0 +1,120 @@ +# Shared Development Server + +Some teams may prefer using a single shared machine to run their experiments. +This allows better resource utilization, such as GPU access, centralized data +storage, etc. With DVC, you can easily setup shared data store on a server with +multiple users or processes. This enables near-instantaneous +workspace restoration and switching speeds for everyone – a +**checkout for data**. + +![](/img/shared-server.png) _Data store shared by DVC projects_ + +## Preparation + +Create a directory external to your DVC projects to be used as a +shared cache location for everyone's projects: + +```dvc +$ mkdir -p /home/shared/dvc-cache +``` + +Make sure that the directory has proper permissions, so that all your colleagues +can write to it, and can read cached files written by others. The most +straightforward way to do this is to make all users members of the same group, +and have the shared cache directory owned by that group. + +## Transfer existing cache (optional) + +You can skip this part if you are setting up a new DVC project where the local +cache directory (`.dvc/cache` by default), hasn't been used. + +If you did work on the DVC projects previously and wish to transfer +its existing cache to the shared cache directory, you will simply need to move +its contents from the old location to the new one: + +```dvc +$ mv .dvc/cache/* /home/shared/dvc-cache +``` + +Now, ensure that the cached directories and files have appropriate permissions, +so that they can be accessed by your colleagues (assuming their users are +members of the same group): + +```dvc +$ sudo find /home/shared/dvc-cache -type d -exec chmod 0775 {} \; +$ sudo find /home/shared/dvc-cache -type f -exec chmod 0444 {} \; +$ sudo chown -R myuser:ourgroup /home/shared/dvc-cache/ +``` + +## Configure the shared cache + +A cache directory outside the workspace is called an +[external cache](/doc/user-guide/managing-external-data#setting-up-an-external-cache). +Set it to the directory we created earlier with `dvc cache dir` and configure it +with `dvc config cache`: + +```dvc +$ dvc cache dir /home/shared/dvc-cache + +$ dvc config cache.shared group +$ dvc config cache.type symlink +``` + +Above, we first tell DVC to set group permissions on new cache files. Then we +enable symlinks to avoid having copies from the external cache to the +workspace. + +> See `dvc config cache` and +> [File link types](/doc/user-guide/large-dataset-optimization) for more info. + +⚠️ Note that enabling soft/hard links causes DVC to protect the linked data, +because editing them in-place would corrupt the cache. See `dvc unprotect`. + +If you're using Git, commit the changes to your project's config file (usually +`.dvc/config`): + +```dvc +$ git add .dvc/config +$ git commit -m "config external/shared DVC cache" +``` + +## Examples + +You and your colleagues can work in your own separate workspaces as +usual, and DVC will handle all your data in the most effective way possible. +Let's say you are cleaning up raw data for later stages: + +```dvc +$ dvc add raw +$ dvc run -n clean_data -d cleanup.py -d raw -o clean \ + ./cleanup.py raw clean +# The data is cached in the shared location. +$ git add raw.dvc dvc.yaml dvc.lock .gitignore +$ git commit -m "cleanup raw data" +$ git push +``` + +Your colleagues can [checkout](/doc/command-reference/checkout) the +project data (from the shared cache), and have both +`raw` and `clean` data files appear in their workspace without moving anything +manually. After this, they could decide to continue building this +[pipeline](/doc/command-reference/dag) and process the clean data: + +```dvc +$ git pull +$ dvc checkout +A raw # Data is linked from cache to workspace. +$ dvc run -n process_clean_data -d process.py -d clean -o processed + ./process.py clean processed +$ git add dvc.yaml dvc.lock +$ git commit -m "process clean data" +$ git push +``` + +And now you can just as easily make their work appear in your workspace with: + +```dvc +$ git pull +$ dvc checkout +A processed +``` diff --git a/content/docs/use-cases/sharing-resources-efficiently.md b/content/docs/use-cases/sharing-resources-efficiently.md deleted file mode 100644 index 9f81ce7cf5..0000000000 --- a/content/docs/use-cases/sharing-resources-efficiently.md +++ /dev/null @@ -1,69 +0,0 @@ -# Sharing Resources Efficiently - -Data science teams need to handle large amounts of data, share limited -processing units (GPUs), avoid multiple data transfers, etc. It's not always -clear how to connect and utilize resources such as massive data stores or -powerful machines for an effective collaboration. An over-engineered solution -may involve clustering servers, load balancing software, etc. - -![](/img/resource-pool.png) _Fragile and disjointed pool of limited resources_ - -Minimizing cost and complexity can make the difference, for example, when: - -- Multiple users work on the same shared server. -- There's a centralized data storage unit or cluster. -- There's a single environment with access to the data needed to reproduce full - [pipelines](/doc/start/data-pipelines). -- Distributing GPU time among people for training machine learning models - -DVC's approach keeps it simple: you work with a set of intuitive terminal -commands that interact directly with your files and directories (data, models, -metrics, code, etc.). A built-in caching mechanism provides basic -[dataset optimization](/doc/user-guide/large-dataset-optimization), which -de-duplicates file contents automatically. And by linking files from the cache -to your workspace, DVC achieves near-instantaneous switching -between [versions of data](/doc/use-cases/versioning-data-and-model-files), -results, etc. - -These benefits can extend to multiple copies of a DVC project, or -even different ones altogether. Just configure -[the same cache](/doc/user-guide/how-to/share-a-dvc-cache) directory in all of -them so that they share a central data location! The optimization of this local -(or network) storage will compound with each project that's added. This is a -useful pattern when [sharing a development server](#example-shared-cache), for -example. - -![](/img/shared-server.png) _One data store shared among several parties_ - -A central [remote storage](/doc/command-reference/remote) (Amazon S3, SSH, -Google Drive, etc.) can also be used by many projects to synchronize cached data -(see `dvc push` and `dvc pull`). It these caches are not set up in a shared -location, then the DVC remote can be the primary storage instead. - -> 💡 Another way to centralize the data requirements of your projects is to -> implement a [data registry](/doc/use-cases/data-registries) pattern and -> leverage `dvc import`. - -You can also optimize your data processing with DVC. This is made possible by -codifying your [data pipelines](/doc/start/data-pipelines). You can then deploy -the same project on one or more environments (using Git), and reproduce any -variation of the pipeline(s) with a few commands. This enables a range of -processing workflows, from distributing the execution of [experiment -queues][queueing-experiments], to rotating an ML model training environment -among team members (or batches of data). - -[queueing-experiments]: - /doc/command-reference/exp/run#queueing-and-parallel-execution - -![](/img/remote-execution.png) _Remote execution of ML pipelines_ - -> ♾️ You can use [CML](https://cml.dev/) to integrate your desired workflow on -> platforms like GitHub or GitLab. This can be part of your CI/CD (MLOps), along -> with automatic performance reports, among other benefits! - -Finally, there's the question of handling residual data objects left behind by -different people and processes. This can be a challenging and risky task without -a clear mapping of who-uses-what in a collaborative setting. DVC provides this -exact map through human-readable [metafiles](/doc/user-guide/project-structure) -that you can analyze and manipulate as needed. Garbage collection becomes as -simple as typing `dvc gc` with this approach. diff --git a/content/docs/user-guide/basic-concepts/dvc-cache.md b/content/docs/user-guide/basic-concepts/dvc-cache.md index fb0cf2a1a3..c809b4c9fc 100644 --- a/content/docs/user-guide/basic-concepts/dvc-cache.md +++ b/content/docs/user-guide/basic-concepts/dvc-cache.md @@ -1,6 +1,6 @@ --- name: 'DVC Cache' -match: ['DVC cache', cache, caches, cached, 'cache directory', caching] +match: ['DVC cache', cache, caches, cached, 'cache directory'] tooltip: >- The DVC cache is a hidden storage (by default in `.dvc/cache`) for files and directories tracked by DVC, and their different versions. Learn more about its diff --git a/redirects-list.json b/redirects-list.json index 1e55fd4f70..bf5d054265 100644 --- a/redirects-list.json +++ b/redirects-list.json @@ -31,7 +31,6 @@ "^/doc/tutorials(/.*)? /doc/start", "^/doc/use-cases/data-and-model-files-versioning/?$ /doc/use-cases/versioning-data-and-model-files", - "^/doc/doc/use-cases/shared-development-server$ /doc/use-cases/sharing-resources-efficiently", "^/doc/user-guide/updating-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/how-to/update-tracked-files$ /doc/user-guide/how-to/update-tracked-data", "^/doc/user-guide/merge-conflicts$ /doc/user-guide/how-to/merge-conflicts", From 13e6fea2ca0002faa6529d2e35a7e83cbd299bae Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Mon, 28 Jun 2021 23:34:11 +0000 Subject: [PATCH 16/19] ref: remove an md ref link --- content/docs/command-reference/destroy.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/content/docs/command-reference/destroy.md b/content/docs/command-reference/destroy.md index 6c4d7eab2e..d819108834 100644 --- a/content/docs/command-reference/destroy.md +++ b/content/docs/command-reference/destroy.md @@ -16,15 +16,13 @@ usage: dvc destroy [-h] [-q | -v] [-f] directory from the project. Note that the cache directory will be removed as well, unless it's -set to an [external location][external-cache] (by default a local cache is -located in `.dvc/cache`). If you have setup +set to an [external +location][/doc/user-guide/managing-external-data#setting-up-an-external-cache] +(by default a local cache is located in `.dvc/cache`). If you have setup [symlinks](/doc/user-guide/large-dataset-optimization) (from cache to workspace) in your project, DVC will replace them with the latest versions of the actual files and directories first, so that your data is intact after destruction. -[external-cache]: - /doc/user-guide/managing-external-data#setting-up-an-external-cache - > Refer to [Project Structure](/doc/user-guide/project-structure) for more > details on the directories and files deleted by this command. From a350e4d9793e34246da9d90d7a7882928c33e653 Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 29 Jun 2021 03:39:30 +0000 Subject: [PATCH 17/19] guide: fix links that shouold go to now how-to --- content/docs/command-reference/config.md | 7 +++---- content/docs/command-reference/gc.md | 9 ++++----- content/docs/start/data-and-model-versioning.md | 5 ++--- .../use-cases/versioning-data-and-model-files/index.md | 9 ++++----- content/docs/user-guide/managing-external-data.md | 2 +- 5 files changed, 14 insertions(+), 18 deletions(-) diff --git a/content/docs/command-reference/config.md b/content/docs/command-reference/config.md index d2f80dd6be..fe779931a6 100644 --- a/content/docs/command-reference/config.md +++ b/content/docs/command-reference/config.md @@ -190,10 +190,9 @@ This section contains the following options, which affect the project's - `cache.shared` - permissions for newly created or downloaded cache files and directories. The only accepted value right now is `group`, which makes DVC use `664` (rw-rw-r--) for files and `775` (rwxrwxr-x) for directories. This is - useful when - [sharing data storage](/doc/use-cases/sharing-resources-efficiently). The - default permissions for cache files is system dependent. In Linux and macOS - for example, they're determined using + useful when [sharing a cache](/doc/user-guide/how-to/share-a-dvc-cache) among + projects. The default permissions for cache files is system dependent. In + Linux and macOS for example, they're determined using [`os.umask`](https://docs.python.org/3/library/os.html#os.umask). The following parameters allow setting an diff --git a/content/docs/command-reference/gc.md b/content/docs/command-reference/gc.md index af5c719caf..57f1076f73 100644 --- a/content/docs/command-reference/gc.md +++ b/content/docs/command-reference/gc.md @@ -80,11 +80,10 @@ The default remote is cleaned (see `dvc config core.remote`) unless the [experimental](/doc/user-guide/experiment-management) data (including checkpoints). -- `-p `, `--projects ` - if a single remote or a single cache is - shared among different projects (e.g. as described - [here](/doc/use-cases/sharing-resources-efficiently)), this option can be used - to specify a list of them (each project is a path) to keep data that is - currently referenced from them. +- `-p `, `--projects ` - if a single remote or a single + [cache is shared](/doc/user-guide/how-to/share-a-dvc-cache) among different + projects, this option can be used to specify a list of them (each project is a + path) to keep data that is currently referenced from them. - `-c`, `--cloud` - remove files in remote storage in addition to local cache. **This option is dangerous.** The default remote is used unless a specific one diff --git a/content/docs/start/data-and-model-versioning.md b/content/docs/start/data-and-model-versioning.md index 7cc4c196b7..4267bda714 100644 --- a/content/docs/start/data-and-model-versioning.md +++ b/content/docs/start/data-and-model-versioning.md @@ -250,9 +250,8 @@ In cases where you process very large datasets, you need an efficient mechanism versions. Do you use network attached storage (NAS)? Or a large external volume? You can learn more about advanced workflows using these links: -- A [shared cache](/doc/use-cases/sharing-resources-efficiently) can be set up - to store, version and access a lot of data on a large shared volume - efficiently. +- A [shared cache](/doc/user-guide/how-to/share-a-dvc-cache) can be set up to + store, version and access a lot of data on a large shared volume efficiently. - A quite advanced scenario is to track and version data directly on the remote storage (e.g. S3). See [Managing External Data](https://dvc.org/doc/user-guide/managing-external-data) diff --git a/content/docs/use-cases/versioning-data-and-model-files/index.md b/content/docs/use-cases/versioning-data-and-model-files/index.md index 250e8d687b..d18ae6e524 100644 --- a/content/docs/use-cases/versioning-data-and-model-files/index.md +++ b/content/docs/use-cases/versioning-data-and-model-files/index.md @@ -62,11 +62,10 @@ Benefits of our approach include: DVC [optimizes](/doc/user-guide/large-dataset-optimization) storing and transferring large files. -- **Collaboration**: Easily distribute your project development and - [share limited resources](/doc/use-cases/sharing-resources-efficiently). - [Access results](/doc/use-cases/sharing-data-and-model-files) from anywhere, - or [reuse data and models](/doc/start/data-and-model-access) it in other - places. +- **Collaboration**: Easily distribute your project development and share its + data [internally](/doc/user-guide/how-to/share-a-dvc-cache) and + [remotely](/doc/use-cases/sharing-data-and-model-files), or + [reuse](/doc/start/data-and-model-access) it in other places. - **Data compliance**: Review data modification attempts as Git [pull requests](https://www.dummies.com/web-design-development/what-are-github-pull-requests/). diff --git a/content/docs/user-guide/managing-external-data.md b/content/docs/user-guide/managing-external-data.md index 80146473cb..7971e60b32 100644 --- a/content/docs/user-guide/managing-external-data.md +++ b/content/docs/user-guide/managing-external-data.md @@ -65,7 +65,7 @@ location, e.g. `s3://mybucket/cache` or `ssh://user@example.com/cache` (see the examples below). > ⚠️ An external cache could be -> [shared](/doc/use-cases/sharing-resources-efficiently) among copies of a DVC +> [shared](/doc/user-guide/how-to/share-a-dvc-cache) among copies of a DVC > project. Please **do not** use external outputs in that scenario, as > `dvc checkout` in any project would overwrite the working data for all > projects. From 23bca98f4903f08141cf2e6936533ee627ebf60d Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 29 Jun 2021 04:28:06 +0000 Subject: [PATCH 18/19] guide: better intro for shared cache how-to per https://github.com/iterative/dvc.org/pull/2482#pullrequestreview-694549497 --- .../user-guide/how-to/share-a-dvc-cache.md | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/content/docs/user-guide/how-to/share-a-dvc-cache.md b/content/docs/user-guide/how-to/share-a-dvc-cache.md index 39e856ca35..75e1dbb928 100644 --- a/content/docs/user-guide/how-to/share-a-dvc-cache.md +++ b/content/docs/user-guide/how-to/share-a-dvc-cache.md @@ -7,15 +7,17 @@ description: >- # How to Share a DVC Cache -There are 2 main reasons to setup a shared DVC cache: - -1. You have distributed copies of a DVC repository in a single shared server - with multiple users. A shared cache is necessary to avoid duplicating the - project's data on the single local storage available to all. -2. Your team works with multiple projects in environments with limited storage, - which share a large storage unit. Everyone needs to use the shared drive - anyway, and combining the cache locations will also prevent data duplication - (across projects). +[Configuring](/doc/command-reference/config#cache) the project's +cache in a location shared by other projects helps avoid file +duplication and can reduce data transfers between different data locations. Some +scenarios: + +- Multiple users have copies of the same project on a single machine. +- Different projects use the same data, so it makes sense to centralize its + local storage. +- There's a shared NAS drive or storage server mounted over the network. +- You need to seamlessly share data between your working machine and a shared + GPU server (for training ML models). ## Preparation From 94c6cbd9ab0dd49b79315477dbe8456c74ec9a6f Mon Sep 17 00:00:00 2001 From: Jorge Orpinel Date: Tue, 29 Jun 2021 05:46:27 +0000 Subject: [PATCH 19/19] cases: remove unnecessary images per static/img/resource-pool.png --- static/img/remote-execution.png | Bin 41843 -> 0 bytes static/img/resource-pool.png | Bin 50477 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 static/img/remote-execution.png delete mode 100644 static/img/resource-pool.png diff --git a/static/img/remote-execution.png b/static/img/remote-execution.png deleted file mode 100644 index 8183bd1fbc14678ac29d7074e03898e0019efd4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41843 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 diff --git a/static/img/resource-pool.png b/static/img/resource-pool.png deleted file mode 100644 index 9ec368af4f76778ec8e45ca32c6b25c7ce9dacce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50477 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 g0NTeh4$e)^9ry(@SB2h5Kd#sB~S