Skip to content

Commit 1668032

Browse files
committed
Build GPU ARM64 binaries
1 parent 0bda833 commit 1668032

File tree

2 files changed

+83
-3
lines changed

2 files changed

+83
-3
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
FROM debian:buster
2+
ARG VER="12-6"
3+
RUN dpkg --add-architecture arm64
4+
RUN apt-get update
5+
RUN apt-get -y install -o APT::Immediate-Configure=false \
6+
git wget vim ninja-build crossbuild-essential-arm64 zlib1g-dev:arm64 libbz2-dev:arm64 software-properties-common
7+
8+
ENV CC=/usr/bin/aarch64-linux-gnu-gcc
9+
ENV CXX=/usr/bin/aarch64-linux-gnu-g++
10+
ENV CUDAHOSTCXX=/usr/bin/aarch64-linux-gnu-g++
11+
ENV CUDACXX=/usr/local/cuda/bin/nvcc
12+
ENV LIBGCC=/usr/lib/gcc-cross/aarch64-linux-gnu/8
13+
ENV CUDAFLAGS="-t 0 --split-compile=0"
14+
15+
RUN wget https://github.com/Kitware/CMake/releases/download/v3.31.0/cmake-3.31.0-linux-x86_64.sh; \
16+
chmod +x cmake-3.31.0-linux-x86_64.sh; \
17+
./cmake-3.31.0-linux-x86_64.sh --skip-license --prefix=/usr/local;
18+
19+
RUN wget -O cuda-x64.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.1-1_all.deb
20+
RUN wget -O cuda-sbsa.deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/cross-linux-sbsa/cuda-keyring_1.1-1_all.deb
21+
RUN dpkg -i cuda-x64.deb && dpkg -i cuda-sbsa.deb
22+
RUN apt-get update
23+
RUN apt-get install -y cuda-nvcc-${VER} cuda-nvcc-cross-sbsa-${VER} cuda-cudart-cross-sbsa-${VER}
24+
25+
WORKDIR /work
26+
ADD . .
27+
RUN echo "set(CMAKE_SYSTEM_NAME Linux)" > /work/toolchain.cmake; \
28+
echo "set(CMAKE_SYSTEM_PROCESSOR aarch64)" >> /work/toolchain.cmake; \
29+
echo "set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)" >> /work/toolchain.cmake; \
30+
echo "set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)" >> /work/toolchain.cmake;
31+
32+
RUN mkdir -p /work/build && cd /work/build; \
33+
if [ -e "${LIBGCC}/libgomp.so" ]; then \
34+
mv -f -- "${LIBGCC}/libgomp.so" "${LIBGCC}/libgomp.so.disabled"; \
35+
fi; \
36+
/usr/local/bin/cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DHAVE_TESTS=1 -DENABLE_WERROR=1 -DHAVE_ARM8=1 \
37+
-DCMAKE_TOOLCHAIN_FILE=/work/toolchain.cmake \
38+
-DOpenMP_C_FLAGS="-fopenmp -I${LIBGCC} -L${LIBGCC}" -DOpenMP_C_LIB_NAMES=gomp -DOpenMP_CXX_FLAGS="-fopenmp -I${LIBGCC} -L${LIBGCC}" -DOpenMP_CXX_LIB_NAMES=gomp -DOpenMP_gomp_LIBRARY="${LIBGCC}/libgomp.a" \
39+
-DATOMIC_LIB_OVERRIDE="${LIBGCC}/libatomic.a" \
40+
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW -DCMAKE_POLICY_DEFAULT_CMP0144=NEW \
41+
-DFORCE_STATIC_DEPS=1 -DENABLE_CUDA=1 -DCMAKE_CUDA_ARCHITECTURES="75-real;80-real;86-real;89-real;90" ..; \
42+
cmake --build . -j$(nproc --all) -v;
43+
44+
RUN if readelf -a /work/build/src/mmseqs | grep -i "Shared library" | grep -P -v "(linux-vdso|ld-linux-aarch64|libc|libm|libdl|librt|libpthread).so" | grep -q .; then \
45+
echo "Error: unwanted libraries found"; \
46+
readelf -a /work/build/src/mmseqs | grep -i "Shared library"; \
47+
exit 1; \
48+
fi; \
49+
if readelf -Ws /work/build/src/mmseqs | grep -q GLIBC_PRIVATE; then \
50+
echo "Error: binary contains private glibc symbols"; \
51+
readelf -Ws /work/build/src/mmseqs; \
52+
exit 1; \
53+
fi; \
54+
LIBC_V=$(readelf -V /work/build/src/mmseqs | awk '$3 ~ /^GLIBC_/ { print $3 }' | sort -V | tail -n1); \
55+
if awk -v ver="$LIBC_V" 'BEGIN { split(ver, v, /[_.]/); if ((v[2] > 2) || (v[2] == 2 && v[3] > 28)) exit 0; exit 1; }'; then \
56+
echo "Error: glibc too new"; \
57+
exit 1; \
58+
fi;

azure-pipelines.yml

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,21 @@ jobs:
134134
pool:
135135
vmImage: 'Ubuntu-20.04'
136136
timeoutInMinutes: 120
137+
strategy:
138+
matrix:
139+
x86_64:
140+
ARCH: x86_64
141+
DOCKER: .github/workflows/Dockerfile.GPU-manylinux2014
142+
aarch64:
143+
ARCH: aarch64
144+
DOCKER: .github/workflows/Dockerfile.GPU-buster-cross-sbsa
137145
steps:
138146
- checkout: self
139147
submodules: false
140148
- script: |
141149
mkdir -p ${BUILD_SOURCESDIRECTORY}/output
142150
docker build -t manylinux-builder \
143-
-f .github/workflows/Dockerfile.GPU-manylinux2014 .
151+
-f ${DOCKER} .
144152
docker run --rm \
145153
-v ${BUILD_SOURCESDIRECTORY}/output:/output \
146154
manylinux-builder \
@@ -149,7 +157,7 @@ jobs:
149157
- task: PublishPipelineArtifact@0
150158
inputs:
151159
targetPath: $(Build.SourcesDirectory)/output/mmseqs
152-
artifactName: mmseqs-linux-gpu
160+
artifactName: mmseqs-linux-gpu-$(ARCH)
153161

154162
- job: build_ubuntu_cross
155163
displayName: Ubuntu Cross-Compile
@@ -333,7 +341,7 @@ jobs:
333341
archiveType: tar
334342
- task: DownloadPipelineArtifact@1
335343
inputs:
336-
artifactName: mmseqs-linux-gpu
344+
artifactName: mmseqs-linux-gpu-x86_64
337345
targetPath: $(Build.SourcesDirectory)/mmseqs/bin
338346
- script:
339347
chmod +x "${BUILD_SOURCESDIRECTORY}/mmseqs/bin/mmseqs"
@@ -343,6 +351,18 @@ jobs:
343351
archiveFile: $(Build.SourcesDirectory)/mmseqs-linux-gpu.tar.gz
344352
includeRootFolder: true
345353
archiveType: tar
354+
- task: DownloadPipelineArtifact@1
355+
inputs:
356+
artifactName: mmseqs-linux-gpu-aarch64
357+
targetPath: $(Build.SourcesDirectory)/mmseqs/bin
358+
- script:
359+
chmod +x "${BUILD_SOURCESDIRECTORY}/mmseqs/bin/mmseqs"
360+
- task: ArchiveFiles@2
361+
inputs:
362+
rootFolderOrFile: $(Build.SourcesDirectory)/mmseqs
363+
archiveFile: $(Build.SourcesDirectory)/mmseqs-linux-gpu-arm64.tar.gz
364+
includeRootFolder: true
365+
archiveType: tar
346366
- task: DownloadPipelineArtifact@1
347367
inputs:
348368
artifactName: mmseqs-linux-POWER9
@@ -413,6 +433,7 @@ jobs:
413433
mmseqs-linux-sse41.tar.gz \
414434
mmseqs-linux-avx2.tar.gz \
415435
mmseqs-linux-gpu.tar.gz \
436+
mmseqs-linux-gpu-arm64.tar.gz \
416437
mmseqs-linux-arm64.tar.gz \
417438
mmseqs-linux-ppc64le-power9.tar.gz \
418439
mmseqs-win64.zip
@@ -423,6 +444,7 @@ jobs:
423444
-F file[][email protected] -F signature[][email protected] \
424445
-F file[][email protected] -F signature[][email protected] \
425446
-F file[][email protected] -F signature[][email protected] \
447+
-F file[][email protected] -F signature[][email protected] \
426448
-F file[][email protected] -F signature[][email protected] \
427449
-F file[][email protected] -F signature[][email protected] \
428450
-F file[][email protected] -F signature[][email protected] \

0 commit comments

Comments
 (0)