Ludwig is a toolbox built on top of TensorFlow that allows to train and test deep learning models without the need to write code.
All you need to provide is a CSV file containing your data, a list of columns to use as inputs, and a list of columns to use as outputs, Ludwig will do the rest. Simple commands can be used to train models both locally and in a distributed way, and to use them to predict on new data.
A programmatic API is also available in order to use Ludwig from your python code. A suite of visualization tools allows you to analyze models’ training and test performance and to compare them.
It can be used by practitioners to quickly train and test deep learning models as well as by researchers to obtain strong baselines to compare against and have an experimentation setting that ensures comparability by performing standard data preprocessing and visualization.
The following sections analyze Ludwig’s structure and architecture from various standpoints. First we examine the vision of the project itself and the stakeholders involved in the Ludwig project. Following this, we attempt to visualize Ludwig’s architecture in different perspectives, namely: the context view, the development view, and the deployment view. Next, we look to analyze the project’s technical debt and present a code-level view of the project. Finally, we present out conclusions and summarize our findings about the architecture of the Ludwig project.
Meet the team:
- Soovam Biswal
- Abhishek Vijay
- Kushal Prakash
- Yüksel Yönsel
Architecture is a representation of a system that most if not all of the system’s stakeholders can use as a basis for mutual understanding, consensus, and communication. When we talk about the architecture of a software, we refer to a plan that describes aspects of its functionality and the decisions that directly affect these aspects. In this sense, a software’s architecture can be viewed as a set of interconnected business and technical decisions.
Studying software architecture is a fantastic way to understand the planning behind a system and how it operates. In our previous posts, we illustrated key aspects of Ludwig’s architecture from various perspectives. Now, with this post, we move beyond the building of the system and on to its maintenance and upkeep.
Software variability is the ability of a software system to be personalized, customized, or configured to suit a user’s needs while still supporting desired properties required for mass production or widespread usage. In the current age of the Internet and Technology, software systems are all-pervasive. Thus, for any software to be effective in today’s market, portability, flexibility, and extensibility are more important than ever before. Therefore, software variability is a crucial aspect of any software system that must be addressed within its structure.