Compiling OmniSciDB: CentOS 7 (GPU-Enabled)

DZone 's Guide to

Compiling OmniSciDB: CentOS 7 (GPU-Enabled)

Let's see how to compile the open source OmniSciDB on CentOS 7 with GPU-support.

· Open Source Zone ·
Free Resource
Road types in Reston, VA from Open Street Map (rendered by OmniSci Immerse)

In my role as Senior Director of Developer Advocacy at OmniSci, one of my many responsibilities is to monitor our various ‘Help’ areas like GitHub issues and the Community message board. While speaking at conferences and contributing to open-source projects is valuable, answering user questions provides a rich understanding of what our product currently does, what our users would like OmniSci to do, and where our documentation could be better.

In this post, I’ll demonstrate how to compile OmniSciDB (open-source) on CentOS 7 with GPU-support, and in future posts, I will demonstrate how to compile OmniSci on various other platforms for both CPU-only and GPU-enabled.

This post is focused on those who want to contribute to OmniSciDB (and thus need an actual build environment); if you just want to try OmniSciDB, we provide Docker images, as well as tarball downloads and even OmniSci Cloud (paid, 14-day free trial).

Building OmniSciDB Using Docker

Rather than repeat the rationale behind building OmniSciDB using Docker, please see my other post ‘Compiling OmniSciDB: Ubuntu 16.04 LTS (CPU)’ which goes into the full detail of installing the required OmniSci build dependencies.

Here is the full build script to compile OmniSciDB on CentOS 7:

# run image interactively
docker run -it --runtime=nvidia --rm nvidia/cuda:10.0-devel-centos7 bash

# update image
yum update -y && yum install git sudo -y

# clone project and download/install dependencies
git clone https://github.com/omnisci/omniscidb.git
bash /omniscidb/scripts/mapd-deps-prebuilt.sh

# load dependencies
source /etc/profile.d/modules.sh
module load cuda mapd-deps

# build project
mkdir -p /omniscidb/build && cd /omniscidb/build/
make -j 4

The biggest difference between the commands used for my Ubuntu posts (linked at the bottom of this post) and the CentOS 7 CPU commands is line 9: bash /omniscidb/scripts/mapd-deps-prebuilt.sh. In the Ubuntu posts, I showed the script that uses the apt package manager to install all of the dependencies; the mapd-deps-prebuilt.sh script, as the name indicates, installs pre-built dependencies. Neither is “right” or “wrong”, just two different methods we provide.

Running Sanity Tests

After the build has successfully completed, you can validate that OmniSciDB compiled correctly using make sanity_tests:

# run tests
make sanity_tests

Upon successfully passing the tests, you’ll get the following message:

24: [       OK ] UDFCompilerTest.UdfQuery (1658 ms)
24: [----------] 3 tests from UDFCompilerTest (2012 ms total)
24: [----------] Global test environment tear-down
24: [==========] 3 tests from 1 test case ran. (3412 ms total)
24: [  PASSED  ] 3 tests.
18/18 Test #24: UdfTest ..........................   Passed    3.56 sec

100% tests passed, 0 tests failed out of 18

Label Time Summary:
sanity    = 367.36 sec*proc (18 tests)

Total Test time (real) = 367.45 sec
[100%] Built target sanity_tests

What Will You Contribute?

With an OmniSciDB CPU-only build environment in-place, the only thing left is to contribute! OmniSciDB is an Apache 2.0 licensed project and we welcome contributions of all kinds, from documentation improvements to the lowest-level code updates.

To contribute to the OmniSciDB codebase, stop by our GitHub repo and submit a pull request. Although not required, if you are planning to submit a large pull request, submitting an issue before you start working will give our internal engineers an idea of what you are working on and allow them to guide you through the submission process.

Happy building!

centos 7, database, docker, gpu, omniscidb, open source, tutorial

Published at DZone with permission of Randy Zwitch . See the original article here.

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}