Overview
Fungible GPU-Connect (FGC) provides the capability to dynamically compose GPUs and connect them to CPUs over a standard Ethernet network. Centralizing GPUs into a single pool that can be attached on demand eliminates the need for dedicated GPUs. This disaggregation removes the constraints of having GPUs and CPUs physically co-located within the same server and delivers GPU processing power independent of application’s CPU requirements. Expensive GPU resources are no longer left stranded. FGC allows any host server to receive physical GPU resources from a centralized GPU pool anywhere within the same data center.
I worked on the composability team at Fungible and was part of its architecture review board.
I made key decisions ranging from our web architecture to our
source control workflow. My day-to-day responsibilities included:
- Implementing features and managing the team responsible for the Composer Cloud
Console. The Console, consisting of 600 custom Angular components, allows users
to compose pools of GPUs, servers, storage arrays, and networking infrastructure
to run workloads. To manage complexity and maintain performance, I devised a micro-frontend
architecture with federated auth. I used a Node.js web server
to deliver content and enable lazily loading the micro apps.
- Defining a continuous integration pipeline to automate builds, enforce test
coverage and code style, and deploy new bundles to the web server. I leveraged
Docker images to ensure consistent builds on Jenkins and configured the
Helm templates of the various microservices the Console depends on.
- Designing the APIs of microservices. We leverage OpenAPI to unify the capabilities
of our microservices and statically generate TypeScript and Python types.
By working together with the API teams to define the OpenAPI spec, we implement
new features in parallel, accelerating the development lifecycle. I ensured
the OpenAPI schemas were composable and the endpoints used RESTful conventions.
- Crafting the data models of microservices. I ensured our data was efficiently
structured based on our highest-volume queries and the characteristics
of the entities we model. This included designing materialized views to
reduce latency and defining triggers to maintain consistency.
- Interfacing with the User Experience (UX) team to establish a design system.
To successfully introduce a micro-frontend architecture, we needed a strategy to
ensure the individual micro apps operated cohesively. I worked with
the UX team to produce a design system and component library. By implementing
the component library according to the tenants of our design system, each app
can pull in a versioned NPM package containing various UI building
blocks. Leveraging components from our prebuilt library gives the product a
consistent look and feel and reduces the development timeline, as the custom
components are already built and tested.