You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by ma...@apache.org on 2021/06/24 21:24:50 UTC
[incubator-mxnet] branch v1.9.x updated: [v1.9.x] Cherry-pick ArmPL
changes from v1.x (#20381)
This is an automated email from the ASF dual-hosted git repository.
manuseth pushed a commit to branch v1.9.x
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/v1.9.x by this push:
new 5a8c414 [v1.9.x] Cherry-pick ArmPL changes from v1.x (#20381)
5a8c414 is described below
commit 5a8c414653cca5aa09dc040fba7e30326fa41858
Author: Manu Seth <22...@users.noreply.github.com>
AuthorDate: Thu Jun 24 14:22:58 2021 -0700
[v1.9.x] Cherry-pick ArmPL changes from v1.x (#20381)
* [v1.x] update armpl version (#20332)
* update armpl version
* enable apl
* downgrade openblas to 3.13
* Update Dockerfile
* [v1.x] Use ArmPL as BLAS for MXNet AArch64 wheels (#20342)
* use armpl as blas for mxnet
* link libgfortran
* fix CPATH
* rectify if condition
* update armpl macro
* remove lapacke.h as duplicate of cblas.h
* Specify Arm CD ARMPL include path (#20364)
Workaround https://github.com/oneapi-src/oneDNN/issues/1100
* update s3 links to public links (#20357)
Co-authored-by: Zhaoqi Zhu <zh...@gmail.com>
---
3rdparty/mshadow/mshadow/base.h | 8 +++
cd/python/docker/Dockerfile | 2 +-
.../Dockerfile.publish.ubuntu1804_aarch64_cpu | 2 +-
cmake/ChooseBlas.cmake | 8 +++
cmake/Modules/FindArmPL.cmake | 79 ++++++++++++++++++++++
config/distribution/linux_aarch64_cpu.cmake | 3 +
.../imageclassifier/scripts/get_resnet_18_data.sh | 6 +-
.../infer/predictor/scripts/get_resnet_18_data.sh | 6 +-
.../scripts/infer/get_resnet_18_data.sh | 6 +-
.../infer/imageclassifier/get_resnet_18_data.sh | 6 +-
.../infer/predictor/PredictorExampleTest.java | 8 +--
.../benchmark/ScalaInferenceBenchmarkSuite.scala | 8 +--
.../ImageClassifierExampleSuite.scala | 8 +--
.../infer/predictor/PredictorExampleSuite.scala | 8 +--
.../src/main/java/mxnet/ImageClassification.java | 8 +--
.../scala/sample/ImageClassificationExample.scala | 8 +--
src/operator/c_lapack_api.h | 16 +++--
tools/staticbuild/build.sh | 6 +-
tools/staticbuild/build_lib_cmake.sh | 4 +-
19 files changed, 153 insertions(+), 47 deletions(-)
diff --git a/3rdparty/mshadow/mshadow/base.h b/3rdparty/mshadow/mshadow/base.h
index 9f53857..a6bf0ef 100755
--- a/3rdparty/mshadow/mshadow/base.h
+++ b/3rdparty/mshadow/mshadow/base.h
@@ -106,6 +106,10 @@ typedef unsigned __int64 uint64_t;
#ifndef MSHADOW_USE_MKL
#define MSHADOW_USE_MKL 1
#endif
+/*! \brief use ArmPL for BLAS */
+#ifndef MSHADOW_USE_ARMPL
+ #define MSHADOW_USE_ARMPL 0
+#endif
/*!
* \brief use CUDA support, must ensure that the cuda include path is correct,
@@ -178,6 +182,10 @@ typedef unsigned __int64 uint64_t;
#if MSHADOW_USE_CBLAS
extern "C" {
+ #if MSHADOW_USE_ARMPL
+ #define armpl_singlecomplex_t float _Complex
+ #define armpl_doublecomplex_t double _Complex
+ #endif
#include <cblas.h>
}
#elif MSHADOW_USE_MKL
diff --git a/cd/python/docker/Dockerfile b/cd/python/docker/Dockerfile
index cbfd9e6..28d85cf 100644
--- a/cd/python/docker/Dockerfile
+++ b/cd/python/docker/Dockerfile
@@ -41,7 +41,7 @@ RUN if [ "$MXNET_VARIANT" = "aarch64_cpu" ] ; \
tar -xvf arm-performance-libraries_21.0_Ubuntu-18.04_gcc-8.2.tar && \
arm-performance-libraries_21.0_Ubuntu-18.04_gcc-8.2/arm-performance-libraries_21.0_Ubuntu-18.04.sh -a; \
fi
-ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/arm/armpl_21.0_gcc-8.2/lib
+ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/arm/armpl_21.0_gcc-8.2/lib/
ARG MXNET_COMMIT_ID
ENV MXNET_COMMIT_ID=${MXNET_COMMIT_ID}
diff --git a/ci/docker/Dockerfile.publish.ubuntu1804_aarch64_cpu b/ci/docker/Dockerfile.publish.ubuntu1804_aarch64_cpu
index 129984c..f4da407 100644
--- a/ci/docker/Dockerfile.publish.ubuntu1804_aarch64_cpu
+++ b/ci/docker/Dockerfile.publish.ubuntu1804_aarch64_cpu
@@ -24,7 +24,7 @@ WORKDIR /work/deps
COPY install/ubuntu_aarch64_publish.sh /work/
RUN /work/ubuntu_aarch64_publish.sh
-ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/arm/armpl_21.0_gcc-8.2/lib
+ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/arm/armpl_21.0_gcc-8.2/lib/
ENV LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/gcc-8.5.0/lib64
ENV PATH=${PATH}:/usr/local/gcc-8.5.0/bin
diff --git a/cmake/ChooseBlas.cmake b/cmake/ChooseBlas.cmake
index 3848a3c..24ba7ea 100644
--- a/cmake/ChooseBlas.cmake
+++ b/cmake/ChooseBlas.cmake
@@ -103,4 +103,12 @@ elseif(BLAS STREQUAL "apple")
add_definitions(-DMSHADOW_USE_MKL=0)
add_definitions(-DMSHADOW_USE_CBLAS=1)
add_definitions(-DMXNET_USE_BLAS_APPLE=1)
+elseif(BLAS STREQUAL "armpl" OR BLAS STREQUAL "ArmPL")
+ find_package(ArmPL REQUIRED)
+ include_directories(SYSTEM ${ArmPL_INCLUDE_DIR})
+ list(APPEND mshadow_LINKER_LIBS ${ArmPL_LIBRARIES})
+ add_definitions(-DMSHADOW_USE_CBLAS=1)
+ add_definitions(-DMSHADOW_USE_MKL=0)
+ add_definitions(-DMSHADOW_USE_ARMPL=1)
+ add_definitions(-DMXNET_USE_LAPACK=1)
endif()
diff --git a/cmake/Modules/FindArmPL.cmake b/cmake/Modules/FindArmPL.cmake
new file mode 100644
index 0000000..5ff4e44
--- /dev/null
+++ b/cmake/Modules/FindArmPL.cmake
@@ -0,0 +1,79 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Find the ARM Performance Libraries
+#
+# The following are set after configuration is done:
+# ArmPL_FOUND
+# ArmPL_INCLUDE_DIR
+# ArmPL_LIBRARIES
+
+file(TO_CMAKE_PATH "$ENV{ArmPL_HOME}" ArmPL_HOME)
+
+SET(ArmPL_INCLUDE_SEARCH_PATHS
+ /opt/arm/armpl_21.0_gcc-8.2/include_lp64_mp
+ ${ArmPL_HOME}/include_lp64_mp
+)
+
+SET(ArmPL_LIB_SEARCH_PATHS
+ /opt/arm/armpl_21.0_gcc-8.2/lib
+ ${ArmPL_HOME}/lib
+)
+
+FIND_PATH(ArmPL_INCLUDE_DIR NAMES armpl.h PATHS ${ArmPL_INCLUDE_SEARCH_PATHS})
+FIND_LIBRARY(ArmPL_LIB NAMES armpl_lp64_mp PATHS ${ArmPL_LIB_SEARCH_PATHS})
+FIND_LIBRARY(MATH_LIB NAMES amath PATHS ${ArmPL_LIB_SEARCH_PATHS})
+FIND_LIBRARY(STRING_LIB NAMES astring PATHS ${ArmPL_LIB_SEARCH_PATHS})
+SET(ArmPL_LIBRARIES
+ ${ArmPL_LIB}
+ ${MATH_LIB}
+ ${STRING_LIB}
+ /usr/local/gcc-8.5.0/lib64/libgfortran.so
+ /usr/lib/aarch64-linux-gnu/libm.so
+)
+
+SET(ArmPL_FOUND ON)
+
+# Check include files
+IF(NOT ArmPL_INCLUDE_DIR)
+ SET(ArmPL_FOUND OFF)
+ MESSAGE(STATUS "Could not find ArmPL include. Turning ArmPL_FOUND off")
+ENDIF()
+
+# Check libraries
+IF(NOT ArmPL_LIBRARIES)
+ SET(ArmPL_FOUND OFF)
+ MESSAGE(STATUS "Could not find ArmPL lib. Turning ArmPL_FOUND off")
+ENDIF()
+
+IF (ArmPL_FOUND)
+ IF (NOT ArmPL_FIND_QUIETLY)
+ MESSAGE(STATUS "Found ArmPL libraries: ${ArmPL_LIBRARIES}")
+ MESSAGE(STATUS "Found ArmPL include: ${ArmPL_INCLUDE_DIR}")
+ ENDIF (NOT ArmPL_FIND_QUIETLY)
+ELSE (ArmPL_FOUND)
+ IF (ArmPL_FIND_REQUIRED)
+ MESSAGE(FATAL_ERROR "Could not find ArmPL")
+ ENDIF (ArmPL_FIND_REQUIRED)
+ENDIF (ArmPL_FOUND)
+
+MARK_AS_ADVANCED(
+ ArmPL_FOUND
+ ArmPL_INCLUDE_DIR
+ ArmPL_LIBRARIES
+)
+
diff --git a/config/distribution/linux_aarch64_cpu.cmake b/config/distribution/linux_aarch64_cpu.cmake
index f413451..26e7b2c 100644
--- a/config/distribution/linux_aarch64_cpu.cmake
+++ b/config/distribution/linux_aarch64_cpu.cmake
@@ -19,6 +19,7 @@ set(CMAKE_BUILD_TYPE "Distribution" CACHE STRING "Build type")
set(CFLAGS "-march=armv8-a+crc+crypto -moutline-atomics" CACHE STRING "CFLAGS")
set(CXXFLAGS "-march=armv8-a" CACHE STRING "CXXFLAGS")
+set(USE_BLAS ArmPL CACHE STRING "BLAS")
set(USE_CUDA OFF CACHE BOOL "Build with CUDA support")
set(USE_OPENCV ON CACHE BOOL "Build with OpenCV support")
set(USE_OPENMP ON CACHE BOOL "Build with Openmp support")
@@ -40,3 +41,5 @@ set(MKLDNN_USE_ACL OFF CACHE BOOL "Integrate MKLDNN with Arm Compute Library")
# APL can be downloaded from https://developer.arm.com/tools-and-software/server-and-hpc/downloads/arm-performance-libraries
# Note that APL needs to be added to LD_LIBRARY_PATH
set(MKLDNN_USE_APL ON CACHE BOOL "Integrate MKLDNN with Arm Performance Libraries")
+# Due to a MKLDNN bug we will need to manually set the ArmPL header
+set(BLAS_INCLUDE_DIR "/opt/arm/armpl_21.0_gcc-8.2/include_lp64_mp" CACHE STRING "Specifies BLAS include dir")
diff --git a/contrib/clojure-package/examples/infer/imageclassifier/scripts/get_resnet_18_data.sh b/contrib/clojure-package/examples/infer/imageclassifier/scripts/get_resnet_18_data.sh
index 1a142e8..bbb6eba 100755
--- a/contrib/clojure-package/examples/infer/imageclassifier/scripts/get_resnet_18_data.sh
+++ b/contrib/clojure-package/examples/infer/imageclassifier/scripts/get_resnet_18_data.sh
@@ -34,9 +34,9 @@ if [ ! -d "$image_path" ]; then
fi
if [ ! -f "$data_path/resnet-18-0000.params" ]; then
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-symbol.json -P $data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-0000.params -P $data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/synset.txt -P $data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-symbol.json -P $data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-0000.params -P $data_path
+ wget http://data.mxnet.io/models/imagenet/synset.txt -P $data_path
fi
if [ ! -f "$image_path/kitten.jpg" ]; then
diff --git a/contrib/clojure-package/examples/infer/predictor/scripts/get_resnet_18_data.sh b/contrib/clojure-package/examples/infer/predictor/scripts/get_resnet_18_data.sh
index cf85355..423eb0b 100755
--- a/contrib/clojure-package/examples/infer/predictor/scripts/get_resnet_18_data.sh
+++ b/contrib/clojure-package/examples/infer/predictor/scripts/get_resnet_18_data.sh
@@ -34,9 +34,9 @@ if [ ! -d "$image_path" ]; then
fi
if [ ! -f "$data_path/resnet-18-0000.params" ]; then
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-symbol.json -P $data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-0000.params -P $data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/synset.txt -P $data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-symbol.json -P $data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-0000.params -P $data_path
+ wget http://data.mxnet.io/models/imagenet/synset.txt -P $data_path
fi
if [ ! -f "$image_path/kitten.jpg" ]; then
diff --git a/contrib/clojure-package/scripts/infer/get_resnet_18_data.sh b/contrib/clojure-package/scripts/infer/get_resnet_18_data.sh
index 601f362..654d523 100755
--- a/contrib/clojure-package/scripts/infer/get_resnet_18_data.sh
+++ b/contrib/clojure-package/scripts/infer/get_resnet_18_data.sh
@@ -32,7 +32,7 @@ fi
resnet_18_data_path="$data_path/resnet-18"
if [ ! -f "$resnet_18_data_path/resnet-18-0000.params" ]; then
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-symbol.json -P $resnet_18_data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-0000.params -P $resnet_18_data_path
- wget https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/synset.txt -P $resnet_18_data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-symbol.json -P $resnet_18_data_path
+ wget http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-0000.params -P $resnet_18_data_path
+ wget http://data.mxnet.io/models/imagenet/synset.txt -P $resnet_18_data_path
fi
diff --git a/scala-package/examples/scripts/infer/imageclassifier/get_resnet_18_data.sh b/scala-package/examples/scripts/infer/imageclassifier/get_resnet_18_data.sh
index b129932..c6967bb 100755
--- a/scala-package/examples/scripts/infer/imageclassifier/get_resnet_18_data.sh
+++ b/scala-package/examples/scripts/infer/imageclassifier/get_resnet_18_data.sh
@@ -34,8 +34,8 @@ if [ ! -d "$image_path" ]; then
fi
if [ ! -f "$data_path" ]; then
- curl https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-symbol.json -o $data_path/resnet-18-symbol.json
- curl https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/resnet-18-0000.params -o $data_path/resnet-18-0000.params
- curl https://s3.us-east-2.amazonaws.com/scala-infer-models/resnet-18/synset.txt -o $data_path/synset.txt
+ curl http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-symbol.json -o $data_path/resnet-18-symbol.json
+ curl http://data.mxnet.io/models/imagenet/resnet/18-layers/resnet-18-0000.params -o $data_path/resnet-18-0000.params
+ curl http://data.mxnet.io/models/imagenet/synset.txt -o $data_path/synset.txt
curl https://s3.us-east-2.amazonaws.com/mxnet-scala/scala-example-ci/resnet152/kitten.jpg -o $image_path/kitten.jpg
fi
diff --git a/scala-package/examples/src/test/java/org/apache/mxnetexamples/javaapi/infer/predictor/PredictorExampleTest.java b/scala-package/examples/src/test/java/org/apache/mxnetexamples/javaapi/infer/predictor/PredictorExampleTest.java
index 30bc8db..337a566 100644
--- a/scala-package/examples/src/test/java/org/apache/mxnetexamples/javaapi/infer/predictor/PredictorExampleTest.java
+++ b/scala-package/examples/src/test/java/org/apache/mxnetexamples/javaapi/infer/predictor/PredictorExampleTest.java
@@ -38,13 +38,13 @@ public class PredictorExampleTest {
String tempDirPath = System.getProperty("java.io.tmpdir");
logger.info("tempDirPath: %s".format(tempDirPath));
- String baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models";
+ String baseUrl = "http://data.mxnet.io/models/imagenet/";
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-symbol.json",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-symbol.json",
tempDirPath + "/resnet18/resnet-18-symbol.json", 3);
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-0000.params",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-0000.params",
tempDirPath + "/resnet18/resnet-18-0000.params", 3);
- Util.downloadUrl(baseUrl + "/resnet-18/synset.txt",
+ Util.downloadUrl(baseUrl + "synset.txt",
tempDirPath + "/resnet18/synset.txt", 3);
Util.downloadUrl("https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg",
tempDirPath + "/inputImages/resnet18/Pug-Cookie.jpg", 3);
diff --git a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/benchmark/ScalaInferenceBenchmarkSuite.scala b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/benchmark/ScalaInferenceBenchmarkSuite.scala
index 548f2e4..f36f64a 100644
--- a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/benchmark/ScalaInferenceBenchmarkSuite.scala
+++ b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/benchmark/ScalaInferenceBenchmarkSuite.scala
@@ -34,12 +34,12 @@ class ScalaInferenceBenchmarkSuite extends FunSuite with BeforeAndAfterAll {
logger.info("Downloading resnet-18 model")
val tempDirPath = System.getProperty("java.io.tmpdir")
logger.info("tempDirPath: %s".format(tempDirPath))
- val baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models"
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-symbol.json",
+ val baseUrl = "http://data.mxnet.io/models/imagenet/"
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-symbol.json",
tempDirPath + "/resnet18/resnet-18-symbol.json")
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-0000.params",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-0000.params",
tempDirPath + "/resnet18/resnet-18-0000.params")
- Util.downloadUrl(baseUrl + "/resnet-18/synset.txt",
+ Util.downloadUrl(baseUrl + "synset.txt",
tempDirPath + "/resnet18/synset.txt")
Util.downloadUrl("https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg",
tempDirPath + "/inputImages/resnet18/Pug-Cookie.jpg")
diff --git a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/imageclassifier/ImageClassifierExampleSuite.scala b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/imageclassifier/ImageClassifierExampleSuite.scala
index d7233a2..8ed733b 100644
--- a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/imageclassifier/ImageClassifierExampleSuite.scala
+++ b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/imageclassifier/ImageClassifierExampleSuite.scala
@@ -39,13 +39,13 @@ class ImageClassifierExampleSuite extends FunSuite with BeforeAndAfterAll {
val tempDirPath = System.getProperty("java.io.tmpdir")
logger.info("tempDirPath: %s".format(tempDirPath))
- val baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models"
+ val baseUrl = "http://data.mxnet.io/models/imagenet/"
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-symbol.json",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-symbol.json",
tempDirPath + "/resnet18/resnet-18-symbol.json")
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-0000.params",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-0000.params",
tempDirPath + "/resnet18/resnet-18-0000.params")
- Util.downloadUrl(baseUrl + "/resnet-18/synset.txt",
+ Util.downloadUrl(baseUrl + "synset.txt",
tempDirPath + "/resnet18/synset.txt")
Util.downloadUrl("https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg",
tempDirPath + "/inputImages/resnet18/Pug-Cookie.jpg")
diff --git a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/predictor/PredictorExampleSuite.scala b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/predictor/PredictorExampleSuite.scala
index f04f06a..1f5deca 100644
--- a/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/predictor/PredictorExampleSuite.scala
+++ b/scala-package/examples/src/test/scala/org/apache/mxnetexamples/infer/predictor/PredictorExampleSuite.scala
@@ -36,13 +36,13 @@ class PredictorExampleSuite extends FunSuite with BeforeAndAfterAll {
val tempDirPath = System.getProperty("java.io.tmpdir")
logger.info("tempDirPath: %s".format(tempDirPath))
- val baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models"
+ val baseUrl = "http://data.mxnet.io/models/imagenet/"
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-symbol.json",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-symbol.json",
tempDirPath + "/resnet18/resnet-18-symbol.json")
- Util.downloadUrl(baseUrl + "/resnet-18/resnet-18-0000.params",
+ Util.downloadUrl(baseUrl + "resnet/18-layers/resnet-18-0000.params",
tempDirPath + "/resnet18/resnet-18-0000.params")
- Util.downloadUrl(baseUrl + "/resnet-18/synset.txt",
+ Util.downloadUrl(baseUrl + "synset.txt",
tempDirPath + "/resnet18/synset.txt")
Util.downloadUrl("https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg",
tempDirPath + "/inputImages/resnet18/Pug-Cookie.jpg")
diff --git a/scala-package/mxnet-demo/java-demo/src/main/java/mxnet/ImageClassification.java b/scala-package/mxnet-demo/java-demo/src/main/java/mxnet/ImageClassification.java
index 8cb58da..e857897 100644
--- a/scala-package/mxnet-demo/java-demo/src/main/java/mxnet/ImageClassification.java
+++ b/scala-package/mxnet-demo/java-demo/src/main/java/mxnet/ImageClassification.java
@@ -46,12 +46,12 @@ public class ImageClassification {
public static void downloadModelImage() {
String tempDirPath = System.getProperty("java.io.tmpdir");
- String baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models";
- downloadUrl(baseUrl + "/resnet-18/resnet-18-symbol.json",
+ String baseUrl = "http://data.mxnet.io/models/imagenet/";
+ downloadUrl(baseUrl + "resnet/18-layers/resnet-18-symbol.json",
tempDirPath + "/resnet18/resnet-18-symbol.json");
- downloadUrl(baseUrl + "/resnet-18/resnet-18-0000.params",
+ downloadUrl(baseUrl + "resnet/18-layers/resnet-18-0000.params",
tempDirPath + "/resnet18/resnet-18-0000.params");
- downloadUrl(baseUrl + "/resnet-18/synset.txt",
+ downloadUrl(baseUrl + "synset.txt",
tempDirPath + "/resnet18/synset.txt");
downloadUrl("https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg",
tempDirPath + "/inputImages/resnet18/Pug-Cookie.jpg");
diff --git a/scala-package/mxnet-demo/scala-demo/src/main/scala/sample/ImageClassificationExample.scala b/scala-package/mxnet-demo/scala-demo/src/main/scala/sample/ImageClassificationExample.scala
index bb6114d..131cf21 100644
--- a/scala-package/mxnet-demo/scala-demo/src/main/scala/sample/ImageClassificationExample.scala
+++ b/scala-package/mxnet-demo/scala-demo/src/main/scala/sample/ImageClassificationExample.scala
@@ -49,17 +49,17 @@ object ImageClassificationExample {
val imgURL = "https://s3.amazonaws.com/model-server/inputs/Pug-Cookie.jpg"
downloadUrl(imgURL, imgPath)
- val baseUrl = "https://s3.us-east-2.amazonaws.com/scala-infer-models"
+ val baseUrl = "http://data.mxnet.io/models/imagenet/"
var tmpPath = tempDirPath + "/resnet18/resnet-18-symbol.json"
- var tmpUrl = baseUrl + "/resnet-18/resnet-18-symbol.json"
+ var tmpUrl = baseUrl + "resnet/18-layers/resnet-18-symbol.json"
downloadUrl(tmpUrl, tmpPath)
tmpPath = tempDirPath + "/resnet18/resnet-18-0000.params"
- tmpUrl = baseUrl + "/resnet-18/resnet-18-0000.params"
+ tmpUrl = baseUrl + "resnet/18-layers/resnet-18-0000.params"
downloadUrl(tmpUrl, tmpPath)
tmpPath = tempDirPath + "/resnet18/synset.txt"
- tmpUrl = baseUrl + "/resnet-18/synset.txt"
+ tmpUrl = baseUrl + "synset.txt"
downloadUrl(tmpUrl, tmpPath)
(imgPath, tempDirPath + "/resnet18/resnet-18")
diff --git a/src/operator/c_lapack_api.h b/src/operator/c_lapack_api.h
index 8b07265..698822b 100644
--- a/src/operator/c_lapack_api.h
+++ b/src/operator/c_lapack_api.h
@@ -70,8 +70,8 @@
using namespace mshadow;
-// Will cause clash with MKL fortran layer headers
-#if MSHADOW_USE_MKL == 0
+// Will cause clash with MKL/ArmPL fortran layer headers
+#if (!MSHADOW_USE_MKL && !MSHADOW_USE_ARMPL)
extern "C" {
@@ -199,7 +199,7 @@ extern "C" {
MXNET_LAPACK_FSIG_GEEV(dgeev, double)
}
-#endif // MSHADOW_USE_MKL == 0
+#endif // (!MSHADOW_USE_MKL && !MSHADOW_USE_ARMPL)
#define CHECK_LAPACK_UPLO(a) \
@@ -228,11 +228,13 @@ inline void flip(int m, int n, DType *b, int ldb, DType *a, int lda) {
}
-#if (MSHADOW_USE_MKL && MXNET_USE_LAPACK)
+#if (MXNET_USE_LAPACK && (MSHADOW_USE_MKL || MSHADOW_USE_ARMPL))
- // We interface with the C-interface of MKL
- // as this is the preferred way.
- #include <mkl_lapacke.h>
+ #if (MSHADOW_USE_MKL)
+ // We interface with the C-interface of MKL
+ // as this is the preferred way.
+ #include <mkl_lapacke.h>
+ #endif
#define MXNET_LAPACK_ROW_MAJOR LAPACK_ROW_MAJOR
#define MXNET_LAPACK_COL_MAJOR LAPACK_COL_MAJOR
diff --git a/tools/staticbuild/build.sh b/tools/staticbuild/build.sh
index e5ce595..1306dce 100755
--- a/tools/staticbuild/build.sh
+++ b/tools/staticbuild/build.sh
@@ -59,7 +59,11 @@ else
export PKG_CONFIG_PATH=$DEPS_PATH/lib/pkgconfig:$DEPS_PATH/lib64/pkgconfig:$DEPS_PATH/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH
fi
export FC="gfortran"
-export CPATH=$DEPS_PATH/include:$CPATH
+if [[ $ARCH == 'aarch64' ]]; then
+ export CPATH=/opt/arm/armpl_21.0_gcc-8.2/include_lp64_mp:$CPATH
+else
+ export CPATH=$DEPS_PATH/include:$CPATH
+fi
if [[ $PLATFORM == 'linux' && $VARIANT == cu* ]]; then
source tools/setup_gpu_build_tools.sh $VARIANT $DEPS_PATH
diff --git a/tools/staticbuild/build_lib_cmake.sh b/tools/staticbuild/build_lib_cmake.sh
index ade6b7a..a29c393 100755
--- a/tools/staticbuild/build_lib_cmake.sh
+++ b/tools/staticbuild/build_lib_cmake.sh
@@ -39,8 +39,10 @@ cd -
rm -rf lib; mkdir lib;
if [[ $PLATFORM == 'linux' ]]; then
cp -L build/libmxnet.so lib/libmxnet.so
- cp -L staticdeps/lib/libopenblas.so lib/libopenblas.so.0
cp -L $(ldd lib/libmxnet.so | grep libgfortran | awk '{print $3}') lib/
+ if [[ ! $ARCH == 'aarch64' ]]; then
+ cp -L staticdeps/lib/libopenblas.so lib/libopenblas.so.0
+ fi
elif [[ $PLATFORM == 'darwin' ]]; then
cp -L build/libmxnet.dylib lib/libmxnet.dylib
fi