Basis Technology, the world leader in enterprise text analytics technology, is looking for a Performance Software Architect to join our fast-growing team. Basis deploys “AI That Works” to customers around the world, from government intelligence, to banking and insurance, to OEM usage by most major software companies. Help us grow by leading the performance architecture of software that makes sense of unstructured information across 55 different human languages. Work with Natural Language Processing algorithms, machine learning, deep learning, search algorithms, and data science software.
As a Performance Software Architect, you will analyze existing performance and lead improvement strategy, including architectural product changes, to increase speed and reduce memory usage of components of Basis’ Rosette platform. This role will require a strong theoretical background in computer science fundamentals, including data structures and algorithmic complexity (Big-O analysis). Equally, the candidate must be able to apply these theoretical principles for intensely practical tasks, where a few-percentage-point improvement in performance may translate to a big impact in a product’s reception in the market. The range of performance-critical factors is large so candidates should have the ability to research the performance literature to understand and analyze new domains.
- Analyze performance of software with profiling and data-flow tracing tools, through all stages of disk, memory, CPU caches, FPU, and GPU or TPU operations
- Identify bottlenecks at each of these stages and propose improvements, both as series of small increments, and through fundamental algorithmic and architectural advances
- Understand key performance structures and algorithms, such as hash and B-tree data structures, Bloom filters, and linear algebraic processing
- Investigate high-dimensional indexing approaches such as Locality Sensitive Hashing for Approximate Nearest Neighbor queries
- Investigate and apply object-size optimization to fit caches
- Apply linear algebra library optimizations including loop unrolling and quantization
- Analyze output from hardware-level analytic tools such as NVIDIA Nsight, determining optimizations to fully load FPU and GPU
- Analyze runtime data structures, thread dumps, flame graphs, and garbage creation/collection histories, to quantify and improve drivers of both initial and sustained throughput
- Create test harnesses for code performance analysis and automated regression testing
- Be responsible and accountable for performance specification and optimization across the software lifecycle, from R&D and initial design, through maintenance
- Be a mentor and role model for design reviews, code, and test cases
- Participate in agile sprint and release planning
- 5+ years experience in modern programming languages
- Broad familiarity with computer language theory as applied across Java, C++, Python, deep learning frameworks such as TensorFlow, PyTorch, and Deeplearning4j, and data/retrieval systems such as Lucene and MongoDB
- Be able to apply linear algebra, probability and statistics, and calculus to machine learning techniques as diverse as Hidden Markov Models and Convolutional Neural Networks
- Familiarity with deep learning frameworks such as TensorFlow, PyTorch, and Deeplearning4j is a plus
- Able to quickly adopt new languages, tools, and techniques by reading manuals and searching and reading scholarly literature
- Experience using profiling and other performance tools
- Experience working with a team to deliver software
- Master’s degree in Computer Science, or equivalent self-study and experience
- A passion to design, build, and improve software applications
We are an equal opportunity employer and value diversity at our company. We do not discriminate on the basis of race, religion, color, national origin, gender, sexual orientation, age, marital status, veteran status, or disability status.