-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature: How is WASM Compiled? Are you using wasm_simd128 and msimd128 ? #189
Comments
Hi @vtempest! We don't currently compile to WASM, but it should be compatible with SimSIMD NEON kernels, I believe. What exactly are you looking for? |
I would like to help build the fastest Simd accelerated vector search. If usearch uses simsimd and compiles to wasm, I'd love to improve upon it and build my vsearch fork with ram limited clusters. |
Yes, USearch compiles to WASM, but the whole ecosystem is currently fragmented, and it's not clear how to ship library dependencies for WASM. Still, it shouldn't be hard to integrate USearch directly into an arbitrary project that uses WASM, and then compile together as a monorepo. Have you tried that? |
Yes I was working on top of the original hnswlib ported to wasm here: https://github.com/kaiobarb/hnswlib-wasm?tab=readme-ov-file yahoojapan/NGT#168 (comment) |
@vtempest, have you tried compiling SimSIMD into WASM already? I think the NEON backend should be compatible and can provide a huge boost for i8/u8/f16/bf16 vectors in any search engine, be it USearch or HNSW lib 🤗 |
Is a WASM build still needed ? I can take a look if so. |
@Sero1000, wouldn’t hurt, I assume. But it can be implemented in multiple ways - compiling the Rust SDK to WASM, JS, or Python through cibuildwheel + Pyodide. But before all that, we need the core C library to pass compilation 🤗 |
Would that approach (pyodide, etc) work in cloudflare workers? Check out my usearch / vsearch demo. It has getEmbeddingModel, I would like to make it work by not needing the fs with the load/save function. There should be a export/importBase64String function |
@vtempest, I am not familiar and wouldn't have the time to investigate. |
Describe what you are looking for
WASM support for SIMD discussion: emscripten-core/emscripten#12714
emscripten SIMD Docs https://emscripten.org/docs/porting/simd.html
wasm vs wam with msimd benchmark https://jeromewu.github.io/improving-performance-using-webassembly-simd-intrinsics/
demo code with wasm_simd https://github.com/jeromewu/wasm-perf/blob/main/mul_mats_intrin.c
Here's where the NGT algorithm, which is faster than HNSW, uses SIMD to optimize internally: https://github.com/yahoojapan/NGT/blob/1e44fffc2b95b211ff29ee693abb4a25057042d4/lib/NGT/Clustering.h#L224
Can you contribute to the implementation?
Is your feature request specific to a certain interface?
It applies to everything
Contact Details
No response
Is there an existing issue for this?
Code of Conduct
The text was updated successfully, but these errors were encountered: