Interpret HN: A dinky and simple substitute to Git LFS or DVC

Build status
Go report card

Web arena
| Set up
| Getting Began
| Offer Code

Dud is a lightweight application for versioning recordsdata alongside supply code and building
recordsdata pipelines. In follow, Dud extends a lot of the advantages of supply
alter to gargantuan binary recordsdata.

With Dud, you would possibly well commit, checkout, secure, and push gargantuan files and
with a easy expose line interface. Dud stores recipes (a.okay.a.
stages) for retrieving your recordsdata in dinky YAML files. These stages would per chance be
kept in supply alter to hyperlink your recordsdata to your code. On high of that,
stages can shuffle the instructions to generate the tips, form of luxuriate in
Develop. Phases would per chance be chained together to
secure recordsdata pipelines. See the Getting
handbook for
a hands-on overview.

Dud is pronounced “duhd”, no longer “dood”. Dud is no longer an acronym.



Dud is heavily impressed by DVC. DVC addresses the need for
recordsdata versioning and reproducibility, but its implementation is no longer with out
issues. My criticisms of DVC boil appropriate down to two issues: ride and ease. By
ride, I point out throughput and responsiveness. By simplicity, I point out doing
less–both in venture scope and quantity of abstraction.

When it involves ride, Dud is every so often unheard of
than DVC. When it involves
simplicity, Dud has a smaller, extra focused
, and it is dispensed as
a single executable

To summarize with an analogy: Dud is to DVC what Flask is to Django.
Each Dud and DVC maintain their strengths. When you’ll want to maintain a “batteries included” suite
of instruments for managing machine learning projects, DVC would per chance well per chance properly be a honorable match for you.
If recordsdata management is your predominant position of need and you’ll want to maintain one thing lightweight
and hasty, Dud would per chance well per chance properly be a better match.

To catch appropriate down to brass tacks, read on.

Concrete variations with DVC

Dud doesn’t position up experiments and/or metrics.

Dud is solely eager on versioning and reproducing recordsdata alongside supply code.
DVC’s scope has grown to encompass a gargantuan portion of a used machine
learning workflow. While an integrated suite of instruments has its advantages, if UNIX
is any handbook, the composition of smaller, extra focused instruments every so often yield
extra productiveness than their monolithic counterparts. As an instance, there could be no
reason you would possibly well per chance no longer utilize MLflow or
Blueprint alongside Dud to music your experiments. Dud does
no longer prescribe any resolution for experiment monitoring, and it doesn’t strive and enter
the recent, yet already crowded, marketplace for such instruments.

Secondly, versioning recordsdata alongside supply code is an incredibly indispensable idea
in its possess upright. Domains past machine learning and recordsdata science (e.g. game
construction and digital impact) would per chance well per chance tremendously income from this diagram to recordsdata
management with out being confused by additional baggage carried by a recount domain.

Dud commits must consistently be explicitly invoked; they are by no manner aspect outcomes.

For both Dud and DVC, committing recordsdata to the cache is with out doubt one of the well-known costliest
operations that every application undertakes (by both shuffle-time and I/O).
Thanks to this, Dud places the person in absolute alter of when to commit recordsdata.
In Dud, commits handiest happen whenever you shuffle dud commit.

In difference, DVC usually commits robotically to your behalf as a aspect enact of
varied instructions (as an illustration, right by dvc add and dvc repro). While DVC is
attempting to be suited, these implicit commits are usually unintentional commits.
As an instance, whenever you happen to are with out be aware iterating on a pipeline, you are doubtless working
dvc repro or dvc shuffle many instances as you draw. On the opposite hand, DVC will
robotically commit the outcomes on every occasion you shuffle dvc repro or dvc shuffle–even whenever you happen to are factual debugging one thing or tweaking your code. Such
unintentional commits maintain a excessive mark; they turn “hasty construction” into
“construction”, and they bloat your cache. (That you just can disable DVC’s implicit
commits the utilize of the --no-commit flag, but or no longer it is main to be aware to sort it every
time, and DVC doesn’t enhance enabling this flag by default, e.g. by
configuration file.)

Dud tests out files as symbolic links by default.

When Dud tests out cached files into the workspace, it makes utilize of symbolic links
(a.okay.a. symlinks) by default. Symlinks maintain a quantity of advantages that make them
an ravishing substitute for checkouts. First, symlinks require very minute I/O to
secure, so dud checkout usually completes nearly instantaneously. Second,
symlinks transparently redirect to the cached files themselves, so recordsdata is no longer
duplicated between the workspace and the cache, and your storage position is worn
successfully. Closing but no longer least, symlinks make it trivial to take a look at if a file is
up-to-date (by checking the hyperlink purpose), so dud location would per chance be extremely

By default, DVC tests out files as laborious copies. (Technically, DVC tries to utilize
reflinks earlier than copies, but only a couple of filesystems enhance reflinks, so
copies are some distance extra doubtless to be the default.) With laborious copies, efficiencies
listed above are no longer imaginable, so checkouts and placement tests are inefficient by
default. To its credit, DVC’s cache would per chance be configured to utilize symlinks, but
arguably DVC’s default cache configuration is no longer gleaming for projects of any
indispensable size.

Running a Dud pipeline by no manner implicitly alters a stage’s artifacts.

When you shuffle a pipeline in DVC, DVC will capture all pipeline outputs earlier than
working the pipeline’s expose(s). While this is able to well per chance befriend make certain reproducible
pipelines, it is one other implicit habits the person must defend in thoughts, and it
prevents the person from deciding when stage outputs can safely be reused.

When you construct no longer need DVC to robotically capture outputs for you, you maintain to
explicitly expose it every output you would possibly well luxuriate in to persist. On the opposite hand, by telling DVC to
persist an output, DVC would per chance well per chance manufacture a recent and varied computerized habits. If
you are the utilize of symbolic links (or laborious links) for checkouts (which is regularly
a honorable idea; search recordsdata from above), DVC will “unprotect” all output links by replacing them
with laborious copies from the cache. No longer handiest is this habits sexy, or no longer furthermore it is
very pricey in both runtime and storage.

The tip result of these two behaviors in DVC manner that, in a wise
configuration, stages merely can no longer reuse outputs successfully; the person has
minute substitute but to fair earn DVC’s limitations.

When you shuffle a pipeline Dud, Dud doesn’t construct any implicit modification of
existing files. Dud defers all modification of workspace files to the person. If
you’ll want to maintain a recount habits, you would possibly well per chance per chance quiet code it into your stage’s expose. For
example, whenever you happen to hope to maintain to certain all outputs of a stage sooner than it working, you
can delete any outputs on the starting of your expose’s script. When you’ll want to maintain
to reuse outputs, you would possibly well take a look at for preexisting outputs to your script and
purchase no longer to recreate them. Dud’s minimalist manner ends in a stage’s
expose completely proudly owning or no longer it is possess reproducibility; the responsibility is
no longer awkwardly shared between the stage and the application.

Dud delegates remote cache management to Rclone.

Rclone is a actually standard expose-line application which describes
itself as “The Swiss navy knife of cloud storage.” At the time of writing,
Rclone has extra than 28,000 stars on Github. Rclone supports factual about any
cloud storage provider you maintain got per chance heard of. (S3, GCS, Dropbox, Backblaze,
to establish a couple of.) Right here is all to whisper: Rclone is a high-tier substitute for transferring recordsdata
accurate by the secure.

Dud internally calls Rclone for all of its remote cache functionality, a lot like
dud secure and dud push. Nevertheless Dud doesn’t disguise the Rclone abstraction
completely. Dud exposes its Rclone configuration file, and or no longer it is expected and
encouraged that users will utilize Rclone on to configure remote storage or
have interaction with their remote recordsdata. By the utilize of Rclone, Dud’s remote cache interface
straight positive aspects the income of years of beginning-supply construction and a rich,
properly-documented CLI. Right here is an example of how Dud embraces the UNIX philosophy
and the composition of single-focus instruments, as acknowledged above.

In difference, DVC stiches together varied Python packages to make stronger a modest
assortment of cloud storage alternatives. At the time of writing, DVC 2.6 supports
eleven cloud storage providers, and Rclone 1.56 supports extra than fifty. Nevertheless
the amount of cloud storage alternatives is no longer the excessive jam of DVC’s
manner. (Each Dud and DVC enhance the greatest avid gamers, a lot like S3 and GCS.)
DVC’s excessive jam is that they must draw and defend most of their
remote recordsdata management stack themselves. If Rclone is any indication, cloud recordsdata
transfer is a actually laborious order, and DVC has their work lower out for them.

In abstract, Dud leverages the deep recordsdata and effort of the Rclone builders
to present a tough and familiar remote cache abilities. DVC plots their possess
course, and in doing so incurs a steep construction mark.

Dud doesn’t utilize analytics. (And it by no manner will.)

By default, DVC enables embedded
I strongly disagree with this follow, in particular in free and beginning-supply
application. I would possibly by no manner embed analytics in Dud.




BSD-3-Clause. See