Fall 2017

YiTuuX is creating AI-driven healthcare solutions. We created a queueing system on AWS that received jobs from users and split up processor load across multiple instances.



Introduction
YiTuuX develops and markets artificial intelligence and machine learning based tools to enable healthcare workers. The increased use of modern medical equipment, lab tests, etc. has created an information explosion. Physicians have to deal with huge amounts of new information, not only to stay current with the latest developments in medicine, but also to study the growing amounts of information for each one of his, or her patients. YiTuuX’s tools, developed based on the latest development in artificial intelligence and deep learning to assist physicians, and to improve their productivity in diagnosing diseases. With their tools, physicians’ productivity can be easily improved by over 50%, allowing them to focus on more difficult cases and provide more face to face interaction with patients.
Problem Statement
YiTuuX has been working on refining their healthtech tools, and were ready to begin deploying one of their core neural network models. However, AI/ML models are generally notoriously difficult to deploy correctly. YiTuuX wanted Codebase to assist in developing a prototype backend queuing system that was able to split up incoming jobs across multiple machines and a frontend from which users were able to submit jobs to the system. Another goal was to figure out how to handle jobs of incoming priorities so YiTuuX could offer users tiers of service and even corresponding SLAs in the future.
Implementation
We ended up using the incredibly robust services provided by AWS (SQS, EC2, ElasticBeanstalk, S3, etc.) and Django to build out the backend. Users were able to upload jobs to a Django webserver running on Elastic Beanstalk, from which data about the jobs would be sent to SQS and S3. Jobs would be sent to particular queues based on the user’s service plan, and each EC2 instance was running a custom worker script that watched the SQS queues for new jobs, processed them, and uploaded results back to the Django webserver and S3. Throughout this process, users were able to monitor the process of their jobs using a particular URL on the Django server.
Technical Challenges
One of the interesting technical challenges we ran into was trying to get SLAs to work reliably for different tiers of users. After looking extensively at YiTuuX’s particular case, we determined that this would be nearly impossible to do cost-effectively without autoscaling our EC2 instance clusters. Since designing and developing a robust autoscaling backend unfortunately required time that we did not have for the project, we decided to go with the next best thing - designing a custom job-choosing scheme that favored jobs with higher priority.
Key Takeaways
Overall this project was a successful learning experience - our developers were able to pick up new skills from each other and the clients were able to build a relationship with Codebase. As a team, we learned a lot about what kinds of things are important for a project to run smoothly - from team internals to client engagement and communication. Overall, the team was able to deliver a working, successful product, while also gaining a lot of insight into software development at startup companies and engineering consulting as a whole. YiTuuX will be able to build off of our ideas and prototype product when deploying their models for customers.