08 June 2012

183. Compiling OpenMM 4.1 on debian testing

OpenMM 4.0 is still somewhat of a traumatic memory. However, having gotten a question about the compilation of v4.1 I can't really resist giving the new version a go.

Having said that, I never ended up using the GPU-enabled gromacs for which I built openmm, so it was all an enormous waste of time -- for those of you thinking about GPU/Gromacs know this:
* not all graphics cards are supported or worth supporting
* there's no speed-up for explicit solvent molecules, and what else would you use gromacs or MD for?
* consumer-grade graphics cards get very hot

I make no attempt at ferreting out what packages are needed other than what I'm explicitly prompted for. Look at http://verahill.blogspot.com.au/2012/01/debian-testing-64-wheezy_20.html for an indication of what you might need.

Also, I already have openmm 4.0 installed, so e.g. paths and other things defined in the post above are still active.


Start here
Register with simtk.org and download the source file.
sudo apt-get install cmake-curses-gui libgccxml-dev gccxml nvidia-cuda-toolkit
unzip -x OpenMM4.1-Source.zipe
mkdir openmm_build
cd openmm_build/
ccmake -i ../OpenMM4.1-Source/

It'll say Empty Cache. Hit c which will populate the list.

I think we can ignore the EMU libs since they do device emulation. I never figured out what the CUT program was and it's not mentioned in the manual from what I can see.


These are the settings I chose -- I had problems before setting the OPENCL parts (in red) to off.

BUILD_TESTING:BOOL=ON
CMAKE_BUILD_TYPE:STRING=Release
CMAKE_INSTALL_PREFIX:PATH=/home/verahill/.openmm
CUDA_BUILD_TYPE:STRING=Device
CUDA_INSTALL_PREFIX:PATH=/usr/bin
CUDA_NVCC:FILEPATH=/usr/bin/nvcc
DL_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libdl.so
FOUND_CUBLAS:FILEPATH=/usr/lib/x86_64-linux-gnu/libcublas.so
FOUND_CUBLASEMU:FILEPATH=FOUND_CUBLASEMU-NOTFOUND
FOUND_CUFFT:FILEPATH=/usr/lib/x86_64-linux-gnu/libcufft.so
FOUND_CUFFTEMU:FILEPATH=FOUND_CUFFTEMU-NOTFOUND
FOUND_CUT:FILEPATH=FOUND_CUT-NOTFOUND
FOUND_CUT_INCLUDE:PATH=FOUND_CUT_INCLUDE-NOTFOUND

GCCXML_EXTRA_ARGS:STRING=
GCCXML_PATH:FILEPATH=/usr/bin/gccxml
OPENMM_BUILD_AMOEBA_CUDA_LIB:BOOL=ON
OPENMM_BUILD_AMOEBA_PLUGIN:BOOL=ON
OPENMM_BUILD_CUDA_LIB:BOOL=ON
OPENMM_BUILD_CUDA_TESTS:BOOL=TRUE
OPENMM_BUILD_C_AND_FORTRAN_WRAPPERS:BOOL=ON
OPENMM_BUILD_FREE_ENERGY_CUDA_LIB:BOOL=ON
OPENMM_BUILD_FREE_ENERGY_PLUGIN:BOOL=ON
OPENMM_BUILD_OPENCL_LIB:BOOL=OFF
OPENMM_BUILD_OPENCL_TESTS:BOOL=OFF
OPENMM_BUILD_PYTHON_WRAPPERS:BOOL=ON
OPENMM_BUILD_RPMD_OPENCL_LIB:BOOL=OFF
OPENMM_BUILD_RPMD_PLUGIN:BOOL=ON
OPENMM_BUILD_SERIALIZATION_SUPPORT:BOOL=ON
OPENMM_BUILD_STATIC_LIB:BOOL=ON
OPENMM_GENERATE_API_DOCS:BOOL=OFF
OPENMM_SVN_REVISION:STRING=exported
PYTHON_EXECUTABLE:FILEPATH=/usr/bin/python
SVNVERSION_PROGRAM:FILEPATH=/usr/bin/svnversion
SWIG_EXECUTABLE:FILEPATH=/usr/bin/swig
SWIG_VERSION:STRING=2.0.7

Make your changes and hit c again, then hit g which brings you back to the terminal.



make -d|tee make.log
make test


If all goes well you'll see
126/126 Test #126: TestParser ......................................   Passed    0.02 sec
100% tests passed, 0 tests failed out of 126
Total Test time (real) = 345.83 sec
make install


[..]
-- Installing: /home/verahill/.openmm/examples/Makefile
-- Installing: /home/verahill/.openmm/examples/NMakefile
-- Installing: /home/verahill/.openmm/examples/MakefileNotes.txt
-- Installing: /home/verahill/.openmm/examples/Empty.cpp

And you are done!

tree ~/.openmm/ -L 4 -d
.openmm/
|-- bin
|-- docs
|   |-- api-c++
|   `-- api-python
|-- examples
|   `-- VisualStudio
|-- include
|   `-- openmm
|       |-- internal
|       `-- serialization
|-- lib
|   `-- plugins
`-- licenses


16 comments:

  1. Very usefull. My compilation not pass all the test only 59 of 126. What can I do?

    ReplyDelete
  2. Ernesto,
    I can't really tell without knowing what tests passed and which ones didn't.

    Did it fail 67 tests or just didn't run them?

    What were the error messages?

    ReplyDelete
  3. 53% tests passed, 59 tests failed out of 126

    Total Test time (real) = 22.84 sec

    I am new using cmake, and I don´t like it! The log doesn´t give me any usefull message

    Thanks

    ReplyDelete
    Replies
    1. Note that make -d is make in debug mode -- it's been a while so not sure why I did that, but be aware that some information might be lost in the massive amount of stuff -d returns -- i.e. try building just using make.

      All I can guess is that your make doesn't complete properly and that there are missing files, but it's hard without any specific error messages.

      OpenMM is generally a PITA to compile, and cmake doesn't exactly help.

      Delete
  4. Close
    Preview

    Edit Anonymous said...

    Dear lindqvist!

    I've forced with the problem during compilation of the openMM 4.1.1. I've followed to the instructions of your blog but obtain error during make install step
    [ 95%] Creating OpenMM Python swig input files...
    Traceback (most recent call last):
    File "/usr/local/openmm/python/src/swig_doxygen/swigInputBuilder.py", line 616, in
    main()
    File "/usr/local/openmm/python/src/swig_doxygen/swigInputBuilder.py", line 590, in main
    pythonappendFilename, skipAdditionalMethods)
    File "/usr/local/openmm/python/src/swig_doxygen/swigInputBuilder.py", line 135, in __init__
    root = etree.parse(os.path.join(inputDirname, file)).getroot()
    File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1183, in parse

    Why this occurs ? Actually I have updated swig and dohygen. Finally below you can found output of cmake file

    Code: Select all
    -- The C compiler identification is GNU 4.6.3
    -- The CXX compiler identification is GNU 4.6.3
    -- Check for working C compiler: /usr/bin/gcc
    -- Check for working C compiler: /usr/bin/gcc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Could not find 'svnversion' executable; 'about' will be wrong. (Cygwin provides one on Windows.)
    -- Found OPENCL: /usr/lib/x86_64-linux-gnu/libOpenCL.so

    thanks for help

    James

    ReplyDelete
    Replies
    1. Have a look at this post: http://verahill.blogspot.com.au/2012/01/debian-testing-64-wheezy_20.html -- look under "Errors and Solutions", number 4.

      Basically:
      wget http://py-dom-xpath.googlecode.com/files/py-dom-xpath-0.1.tar.gz
      tar xvf py-dom-xpath-0.1.tar.gz
      cd py-dom-xpath-0.1/
      sudo python setup.py install

      Delete
  5. Hello,

    thanks for the tutorial, I'm doing the same procedure for my 64 bit machine but I got this error:
    /usr/local/cuda/lib/libcudart.so: could not read symbols: File in wrong format
    collect2: ld returned 1 exit status
    make[2]: *** [libOpenMMCuda.so] Error 1
    make[1]: *** [platforms/cuda/sharedTarget/CMakeFiles/OpenMMCuda.dir/all] Error 2
    make: *** [all] Error 2

    Could you help me please?

    Thanks in advance.

    ReplyDelete
    Replies
    1. Try
      file /usr/local/cuda/lib/libcudart.so

      I presume that the output is consistent with your architecture? Does it come from libcudart or nvidia-cuda-dev or another package?

      Delete
  6. it worked the make step but in the make test step all the cuda test failed:
    63% tests passed, 59 tests failed out of 160

    Total Test time (real) = 199.64 sec

    The following tests FAILED:
    31 - TestCudaGBVIForce (Failed)
    32 - TestCudaSettle (Failed)
    33 - TestCudaVerletIntegrator (Failed)
    34 - TestCudaMonteCarloBarostat (Failed)
    35 - TestCudaLocalEnergyMinimizer (Failed)
    36 - TestCudaLangevinIntegrator (Failed)
    37 - TestCudaCustomNonbondedForce (Failed)
    38 - TestCudaRBTorsionForce (Failed)
    39 - TestCudaGBSAOBCForce2 (Failed)
    40 - TestCudaNonbondForce2 (Failed)
    41 - TestCudaGBVIForce2 (Failed)
    42 - TestCudaHarmonicAngleForce (Failed)
    43 - TestCudaPeriodicTorsionForce (Failed)
    44 - TestCudaAndersenThermostat (Failed)
    45 - TestCudaCustomTorsionForce (Failed)
    46 - TestCudaCMAPTorsionForce (Failed)
    47 - TestCudaCustomAngleForce (Failed)
    48 - TestCudaNonbondedForce (Failed)
    49 - TestCudaCMMotionRemover (Failed)
    50 - TestCudaEwald (Failed)
    51 - TestCudaHarmonicBondForce (Failed)
    52 - TestCudaRandom (Failed)
    53 - TestCudaGBSAOBCForce (Failed)
    54 - TestCudaVariableVerletIntegrator (Failed)
    55 - TestCudaVariableLangevinIntegrator (Failed)
    56 - TestCudaBrownianIntegrator (Failed)
    57 - TestCudaCustomExternalForce (Failed)
    58 - TestCudaCustomBondForce (Failed)
    95 - TestCudaOBCSoftcoreForce (Failed)
    96 - TestCudaLJSoftcoreForce (Failed)
    97 - TestCudaGBVISoftcoreForce (Failed)
    98 - TestSerializeFreeEnergyNonbondedSoftcoreForce (Failed)
    99 - TestSerializeFreeEnergyGBVISoftcoreForce (Failed)
    100 - TestSerializeFreeEnergyGBSAOBCSoftcoreForce (Failed)
    111 - TestCudaAmoebaVdwForce (Failed)
    112 - TestCudaAmoebaTorsionForce (Failed)
    113 - TestCudaAmoebaHarmonicInPlaneAngleForce (Failed)
    114 - TestCudaAmoebaOutOfPlaneBendForce (Failed)
    115 - TestCudaAmoebaHarmonicBondForce (Failed)
    116 - TestCudaAmoebaTorsionTorsionForce (Failed)
    117 - TestCudaAmoebaUreyBradleyForce (Failed)
    118 - TestCudaAmoebaPME (Failed)
    119 - TestCudaAmoebaHarmonicAngleForce (Failed)
    121 - TestCudaAmoebaPiTorsionForce (Failed)
    122 - TestCudaAmoebaStretchBendForce (Failed)
    123 - TestSerializeAmoebaGeneralizedKirkwoodForce (Failed)
    124 - TestSerializeAmoebaMultipoleForce (Failed)
    125 - TestSerializeAmoebaPiTorsionForce (Failed)
    126 - TestSerializeAmoebaOutOfPlaneBendForce (Failed)
    127 - TestSerializeAmoebaUreyBradleyForce (Failed)
    128 - TestSerializeAmoebaTorsionForce (Failed)
    129 - TestSerializeAmoebaWcaDispersionForce (Failed)
    130 - TestSerializeAmoebaHarmonicInPlaneAngleForce (Failed)
    131 - TestSerializeAmoebaStretchBendForce (Failed)
    132 - TestSerializeAmoebaHarmonicBondForce (Failed)
    133 - TestSerializeAmoebaVdwForce (Failed)
    134 - TestSerializeAmoebaTorsionTorsionForce (Failed)
    135 - TestSerializeAmoebaHarmonicAngleForce (Failed)
    137 - TestOpenCLRpmd (Failed)
    Errors while running CTest

    I used the default ccmake configuration https://dl.dropbox.com/u/11027999/ffavela%40beta%20%28148.247.182.154%29%20-%20byobu_002.png

    Could you please help me?

    Cheers!

    ReplyDelete
    Replies
    1. What happened with libcudart.so?

      Run make with verbose output and see what's missing.

      What version are you building? 4.1 or 4.1.1?

      Delete
  7. In trying with openmm 4.1.1 - CUDA 5 and - 3 Nvidia GTX 680 cards, is there any compatibility problem?

    Thanks in advance.

    ReplyDelete
    Replies
    1. I haven't tried 4.1.1, only 4.0 and 4.1.
      Did you fix the libcudart.so issue?
      What did running with verbose output yield?

      Delete
  8. the libcudart.so issue dissapear with this:
    cd /usr/local/cuda
    sudo mv lib lib32
    sudo ln -s lib64 lib

    My log files
    https://dl.dropbox.com/u/11027999/make.log
    https://dl.dropbox.com/u/11027999/test.log

    ReplyDelete
  9. And if I try for example ./TestCudaEwald I get this error:
    exception: cudaMemcpyToSymbol: SetSim copy to cSim failed invalid device symbol

    ReplyDelete
    Replies
    1. The last error could be due differences in versions between the expect libs and the present libs.

      For the test errors you may want to post on the simtk.org website.

      I'm not using openmm any longer (for implicit solvation I might as well use nwchem) and haven't compiled 4.1.1, so I don't know if it's something particular with your setup or if it's the usual QC issues when it comes to the openmm code.

      Delete