Skip to content

Commit

Permalink
Merge pull request #56786 from Ma27/dlib-avx-fixes
Browse files Browse the repository at this point in the history
dlib: improve AVX configuration
  • Loading branch information
Ma27 committed Mar 30, 2019
2 parents b556663 + 6fec5aa commit 4cd107f
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 4 deletions.
27 changes: 27 additions & 0 deletions doc/package-notes.xml
Expand Up @@ -883,6 +883,33 @@ citrix_receiver.override {
On NixOS it can be installed using the following expression:
<programlisting>{ pkgs, ... }: {
fonts.fonts = with pkgs; [ noto-fonts-emoji ];
}</programlisting>
</para>
</section>
</section>
<section xml:id="dlib">
<title>DLib</title>

<para>
<link xlink:href="http://dlib.net/">DLib</link> is a modern, C++-based toolkit which
provides several machine learning algorithms.
</para>

<section xml:id="compiling-without-avx-support">
<title>Compiling without AVX support</title>

<para>
Especially older CPUs don't support
<link xlink:href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">AVX</link>
(<abbrev>Advanced Vector Extensions</abbrev>) instructions that are used by DLib to
optimize their algorithms.
</para>

<para>
On the affected hardware errors like <literal>Illegal instruction</literal> will occur.
In those cases AVX support needs to be disabled:
<programlisting>self: super: {
dlib = super.dlib.override { avxSupport = false; };
}</programlisting>
</para>
</section>
Expand Down
5 changes: 5 additions & 0 deletions pkgs/development/libraries/dlib/default.nix
@@ -1,5 +1,8 @@
{ stdenv, lib, fetchFromGitHub, cmake, pkgconfig, libpng, libjpeg
, guiSupport ? false, libX11

# see http://dlib.net/compile.html
, avxSupport ? true
}:

stdenv.mkDerivation rec {
Expand All @@ -17,6 +20,8 @@ stdenv.mkDerivation rec {
rm -rf dlib/external
'';

cmakeFlags = [ "-DUSE_AVX_INSTRUCTIONS=${if avxSupport then "yes" else "no"}" ];

enableParallelBuilding = true;
nativeBuildInputs = [ cmake pkgconfig ];
buildInputs = [ libpng libjpeg ] ++ lib.optional guiSupport libX11;
Expand Down
7 changes: 6 additions & 1 deletion pkgs/development/python-modules/dlib/default.nix
@@ -1,12 +1,17 @@
{ buildPythonPackage, dlib, python, pytest }:
{ buildPythonPackage, dlib, python, pytest, avxSupport ? true }:

buildPythonPackage {
inherit (dlib) name src nativeBuildInputs buildInputs meta;

# although AVX can be enabled, we never test with it. Some Hydra machines
# fail because of this, however their build results are probably used on hardware
# with AVX support.
checkPhase = ''
${python.interpreter} nix_run_setup test --no USE_AVX_INSTRUCTIONS
'';

setupPyBuildFlags = [ "--${if avxSupport then "yes" else "no"} USE_AVX_INSTRUCTIONS" ];

patches = [ ./build-cores.patch ];

checkInputs = [ pytest ];
Expand Down
15 changes: 12 additions & 3 deletions pkgs/development/python-modules/face_recognition/default.nix
Expand Up @@ -4,13 +4,13 @@

buildPythonPackage rec {
pname = "face_recognition";
version = "1.2.2";
version = "1.2.3";

src = fetchFromGitHub {
repo = pname;
owner = "ageitgey";
rev = "v${version}";
sha256 = "17jnyr80j1p74gyvh1jabvwd3zsxvip2y7cjhh2g6gsjv2dpvrjv";
rev = "634db2e4309a365cee2503cb65d6f2e88f519d1e";
sha256 = "06zw5hq417d5yp17zynhxhb73074lx2qy64fqfzf711rw5vrn2mx";
};

postPatch = ''
Expand All @@ -19,6 +19,15 @@ buildPythonPackage rec {

propagatedBuildInputs = [ pillow click dlib numpy face_recognition_models ];

# Our dlib is compiled with AVX instructions by default which breaks
# with "Illegal instruction" on some builders due to missing hardware features.
#
# As this makes the build fairly unreliable, it's better to skip the test and to ensure that
# the build is working and after each change to the package, manual testing should be done.
doCheck = false;

# Although tests are disabled by default, checkPhase still exists, so
# maintainers can check the package's functionality locally before modifying it.
checkInputs = [ flake8 pytest glibcLocales ];
checkPhase = ''
LC_ALL="en_US.UTF-8" py.test
Expand Down

0 comments on commit 4cd107f

Please sign in to comment.