EddyRivasLab / hmmer

HMMER: biological sequence analysis using profile HMMs
http://hmmer.org
Other
317 stars 70 forks source link

Support for M1 chip (ARM) #262

Closed jianshu93 closed 1 year ago

jianshu93 commented 2 years ago

Dear hmmer team,

Any possibility to support macOS m1 chip (ARM)?

Thanks,

Jianshu

npcarter commented 2 years ago

Hello. We have had good luck running the current version of HMMER on M1 Macs using Apple's Rosetta 2 tool. You'll want to follow the instructions that you can find on the web to both install Rosetta 2 and create a version of the terminal app that runs under Rosetta 2. Once you do that, if you open the Rosetta Terminal and follow the normal build instructions for HMMER, it should work smoothly, although you'll have to run HMMER from the Rosetta Terminal.

We have full support for M1 Macs implemented and scheduled for the next release. My best guess is that that release will happen after the end of the term, but it's contingent on Sean's schedule.

-Nick

On Sun, Nov 7, 2021 at 9:53 PM Jianshu_Zhao @.***> wrote:

Dear hmmer team,

Any possibility to support macOS m1 chip (ARM)?

Thanks,

Jianshu

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZEAEAROGBIY3R3OGXDUK43SDANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

jianshu93 commented 2 years ago

Hello Thanks for those info. The h3-neon branch, I have the following error:

Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 ld: symbol(s) not found for architecture arm64 Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 collect2: error: ld returned 1 exit status collect2: error: ld returned 1 exit status collect2: error: ld returned 1 exit status Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 make[1]: [hmmemit] Error 1 make[1]: Waiting for unfinished jobs.... make[1]: [hmmbuild] Error 1 make[1]: [hmmalign] Error 1 collect2: error: ld returned 1 exit status make[1]: [hmmpgmd] Error 1 make: [all] Error 2

Jianshu

npcarter commented 2 years ago

Hello,

The easiest way to run HMMER on an M1 Mac for now is to use Apple's Rosetta 2 tool to build and run the x86 version on ARM. Performance is quite good.

If you want to proceed with the h3-neon branch, the errors you're getting make me think you're trying to build the h3-neon branch of HMMER using the master (default) branch of our easel libraries. h3-neon requires the "/remotes/origin/develop" branch of Easel. Could you try checking that branch out and see how it goes?

-Nick

On Wed, Nov 24, 2021 at 3:40 PM Jianshu_Zhao @.***> wrote:

Hello Thanks for those info. The h3-neon branch, I have the following error:

Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 ld: symbol(s) not found for architecture arm64 Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 collect2: error: ld returned 1 exit status collect2: error: ld returned 1 exit status collect2: error: ld returned 1 exit status Undefined symbols for architecture arm64: "_esl_neon_hmax_f32", referenced from: _p7_OptimalAccuracy in libhmmer.a(optacc.o) ld: symbol(s) not found for architecture arm64 make[1]: [hmmemit] Error 1 make[1]: Waiting for unfinished jobs.... make[1]: [hmmbuild] Error 1 make[1]: [hmmalign] Error 1 collect2: error: ld returned 1 exit status make[1]: [hmmpgmd] Error 1 make: [all] Error 2

Jianshu

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262#issuecomment-978204641, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZGUZHV2NDLF63THXVTUNVESPANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

dimiboeckaerts commented 2 years ago

Just to share my experience (MacBook Air with M1, running macOS Big Sur): Installing with brew didn't work for me, even if my terminal app was opened in Rosetta2 mode. It always resorted to the suggestion that I should install Homebrew into /usr/local first. Trying to install with conda failed as well. What did work for me is compiling from source, after opening the terminal in Rosetta2 mode!

npcarter commented 2 years ago

Thanks for the feedback. That's consistent with what others have reported. We don't work directly with the Homebrew team, so don't have much insight into how they do things. We hope to release a new version of HMMER over the winter break that incorporates the h3-neon branch and builds for M1 automatically.

-Nick

On Fri, Nov 26, 2021 at 12:25 PM Dimi Boeckaerts @.***> wrote:

Just to share my experience (MacBook Air with M1, running macOS Big Sur): Installing with brew didn't work for me, even if my terminal app was opened in Rosetta2 mode. It always resorted to the suggestion that I should install Homebrew into /usr/local first. Trying to install with conda failed as well. What did work for me is compiling from source, after opening the terminal in Rosetta2 mode!

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262#issuecomment-980184947, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZASYMS3XKFK6BSIYWDUN67HXANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

jianshu93 commented 2 years ago

Hello all,

After using the develop branch of Easel and h3-arm branch of hmmer. I can successfully compile it on My MacBook Pro M1 Pro/Max. I am attaching the binaries here. Should be working. No need to use the Rosetta terminal at all and the native support is extremely faster for large searches.

Thanks,

Jianshu

hmmer_arm_binaries.zip

jianshu93 commented 2 years ago

A few testings showed that the hmmsearch results are exactly the same with non-arm version.

A big step to an official release of hmmer-neon.

Thanks,

Jianshu

adlerpriit commented 2 years ago

Is there a "simple" solution to run/build hmmer3 on M1 with docker in Debian (arm) container?

npcarter commented 2 years ago

Not that I know of. Our current solution for M1 on Mac is to build under Rosetta 2, but I don't think that would work in a container. You might try experimenting with the h3-arm branch and see if that builds for you.

-Nick

On Thu, Feb 10, 2022 at 7:51 AM Priit Adler @.***> wrote:

Is there a "simple" solution to run/build hmmer3 on M1 with docker in Debian (arm) container?

— Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262#issuecomment-1034885845, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZBESGI3W2P7WKR3V33U2OYF5ANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

asedova commented 2 years ago

Hi-- not sure if this is the exact issue to ask this, but we have a new test system at Oak Ridge's OLCF that has Ampere Altra ARM 80-core nodes with ARM v8.2 ISA and NEON 128-bit SIMD. We are looking for things to test on it, and I was wondering if any of the NEON ports in HMMER were functional enough to test. If so, I would love to know which they are to try to see how HMMER performs! We run a lot of HMMER especially now with AlphaFold being released, so it would be a very relevant test.

jianshu93 commented 2 years ago

arm branch could be built. esl arm branch must be used. I would be happy to see how it works on ARM.

Jianshu

npcarter commented 2 years ago

Hello,

We'd be interested in the answer to that as well, since we've been testing on an M1 Mac. If you check out the h3-arm branch of hmmer and the develop branch of easel from our Github repository, that should give you a fully-functional version of HMMER for ARM. Please let us know how it works!

-Nick

On Tue, Feb 15, 2022 at 7:51 PM asedova @.***> wrote:

Hi-- not sure if this is the exact issue to ask this, but we have a new test system at Oak Ridge's OLCF that has Ampere Altra ARM 80-core nodes with ARM v8.2 ISA and NEON 128-bit SIMD. We are looking for things to test on it, and I was wondering if any of the NEON ports in HMMER were functional enough to test. If so, I would love to know which they are to try to see how HMMER performs! We run a lot of HMMER especially now with AlphaFold being released, so it would be a very relevant test.

— Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262#issuecomment-1040950674, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZBG2F6SVGQ22EHVB7DU3LYIXANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

adlerpriit commented 2 years ago

Attempt to compile h3-arm inside Debian docker container running on mac M1

I tried to compile the h3-arm branch with easel develop branch, but to a number of the following errors:

generic_vtrace.c:89:33: error: too few arguments to function 'esl_FCompare'

I can see that in easel/easel.h: there are references to the function, that expects 4 arguments and esl_FCompare_old expects 3 arguments. I'd assume that ideally in the places where to function is called I should add a fourth argument? Or change the function names to *_old

npcarter commented 2 years ago

My guess is that something's gone wrong in checking out the h3-arm branch of HMMER, and you're actually trying to compile the master branch with the develop branch of Easel. I checked the source code on our Github site, and line 89 of generic_vtrace.c in the h3-arm branch has the esl_FCompare_old call instead of esl_FCompare.

-Nick

On Wed, Mar 2, 2022 at 1:20 PM Priit Adler @.***> wrote:

Attempt to compile h3-arm inside Debian docker container running on mac M1

I tried to compile the h3-arm branch with easel develop branch, but to a number of the following errors:

generic_vtrace.c:89:33: error: too few arguments to function 'esl_FCompare'

I can see that in easel/easel.h: there are references to the function, that expects 4 arguments and esl_FCompare_old expects 3 arguments. I'd assume that ideally in the places where to function is called I should add a fourth argument? Or change the function names to *_old

— Reply to this email directly, view it on GitHub https://github.com/EddyRivasLab/hmmer/issues/262#issuecomment-1057238524, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDJBZAKR4S236RY7YZR73LU56WOPANCNFSM5HRS4QDQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.

You are receiving this because you commented.Message ID: @.***>

adlerpriit commented 2 years ago

Thanks, worked. somehow overlooked that. make and make check worked now and passed all the tests. so all good :)

coatless commented 2 years ago

Not sure what the status of the h3-arm branch is as the last commit was about 4 months ago.

Following the note to use Rosetta 2 to install HMMER from the command line, I came up with the following workflow:

Install Rosetta 2

Opening Terminal.app, then type:

softwareupdate --install-rosetta

You may be prompted to enter your username and password.

Close the Terminal.app

Configure Terminal to use Rosetta 2

Find the in Terminal.app the Finder.

Right-click on the Terminal.app to open a context menu and pick the Get Info option.

Under General, click on the Open using Rosetta check-box.

Close the Get Info overview.

Open the Terminal.app

Type:

arch

If arch responds with i386, then the terminal was set up correctly. If the terminal responds with arm64, please double-check the Get Info step was completed successfully

Add Xcode CLI tools

Launch the Terminal.app running under Rosetta 2

Install XCode CLI Tools

xcode-select --install

Add brew

Next, we’ll add a package manager called brew to handle native CLI applications:

https://brew.sh/

Copy and paste into Terminal.app running under Rosetta 2

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Then, type:

brew install hmmer
coatless commented 2 years ago

If the above doesn't work, feel free to use the following Colab notebook as a way of doing proof of concept work.

https://colab.research.google.com/drive/1Lfugd684QDqJmraCB6HIH6AdJC_QDkzu?usp=sharing

npcarter commented 2 years ago

For anyone following this thread, ARM/NEON support has been moved into the develop branch, so please use that instead of the h3-neon or h3-arm branches.

martin-g commented 2 years ago

I've just tested develop branch on Linux ARM64 and all looks good to me!

miguel76 commented 1 year ago

Any news on when it will be released to the main branch?

3f6a commented 1 year ago

Friendly bump. Are there plans to have a stable release with Apple M-series chip support ? Thanks for all the hard work!

npcarter commented 1 year ago

We (mostly Sean) are working on getting a new release of HMMER out, which will include M1 support. We don't have an exact date for this other than "soon". One holdup is that we've been running some new memory and thread checkers (the address and thread sanitizers that are built into GCC and Clang), and those have found a number of issues that our previous tools did not.

cryptogenomicon commented 1 year ago

HMMER 3.4 was just released. It includes support for ARM processors. See hmmer.org for links to the code tarball and documentation.