When a company is looking to enter the market of Machine Learning, their only real avenue of entry is to hire ML engineers. This creates large barriers of entry for small businesses which cannot afford to spend millions on previously solved problems.

With MLarketplace we gather metrics on project use, and provide a simplified deployment process. So creators can use their expertise to create optimized and efficient solutions to common ML problems, which clients can then apply immediately to their own system.

What it does

MLarketplace is a website built on a flask server and mongoDB database in order to provide easy access to Machine Learning Solutions. Developers can easily submit both pre-trained and un-trained projects to the database through a simple HTML form, and from there they have easy access to metrics on how their model is being used. On the other hand, clients are met with project summaries including project name, developer name, and a readme describing the project.

If a project matches a user's needs, they can access the model using our MLarkeplace client library. Which allows users to train models with their own proprietary data, use the pre-trained systems uploaded by developers, and most importantly, make predictions on their own system.

How we built it

MLarketplace is broken into three fundamental systems: the client side application where processing occurs, the server which stores our project information, and our library which works as the interface between the two.

Client Side: When a client requests a project from MLarketplace, that model is placed in a sandboxed process to protect both the client and developer's private information. Each time a client asks a model to predict an answer or score it's accuracy, these usage metrics are passed-through to server counters.

Library: Each function on the database is required to operate on jsons to allow for language portability. Clients can interface through each model's train, predict and score functions. Train allows users to tailor models to their own application, predict attempts to extrapolate on a given test vector, and score takes known test vectors and classifications to provide easy accuracy calculations.

Server: The server is built with flask and manages our mongoDB database. Each entry to the database stores developer information such as project and developer name, and stores pointers to the model's true definitions and readme files.

Challenges we ran into

One of the major challenges we ran into was how to transport developer code without providing A) providing access to the source file to clients, and B) without putting undue strain on our database. In order to resolve these problems we needed to both define external file systems and implement some basic sandboxing to prevent over-share of data.

Accomplishments that we're proud of

At the end of this hackathon we have created a solid proof of concept, which can interpret and distribute programs very efficiently and simply.

What we learned

This project involved a lot of web development, an area that none of us specialize in. We have all gained a lot of experience working with flask servers and mongo databases, using forms to take input, and defining libraries to effectively distribute solutions.

What's next for MLarketplace

There are a couple areas that MLarketplace can benefit from continued development. A more fully fleshed out user system would have to be created to allow for true enterprise solutions, as there is no account protection and verification currently implemented in the system.

Increasing our focus on security by finalizing the sandboxing of our client running systems. This includes defining hard limits to processing power allowed to potentially malicious "models" and screening developer projects to ensure they meet our specifications.

We have laid the foundation for making MLarketplace truly language agnostic, but there is still work to be done in order achieve that goal. In order to do this, we would have to transform out library into a server that allows for RestAPI requests.

Share this project: