Merge pull request #56786 from Ma27/dlib-avx-fixes
dlib: improve AVX configuration
This commit is contained in:
commit
4cd107f6b3
|
@ -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>
|
||||
|
|
|
@ -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 {
|
||||
|
@ -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;
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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 = ''
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue