Rumah > Artikel > hujung hadapan web > Menjalankan Program JAX daripada Dart Menggunakan C FFI
Apabila membina aplikasi, pemilihan alatan yang betul adalah penting. Anda mahukan prestasi tinggi, pembangunan mudah dan penggunaan merentas platform yang lancar. Rangka kerja popular menawarkan pertukaran:
Tetapi inilah tangkapannya: kebanyakan rangka kerja tidak mempunyai sokongan pembelajaran mesin asli (ML) yang teguh. Jurang ini wujud kerana rangka kerja ini mendahului ledakan AI. Soalannya ialah:
Bagaimanakah kita boleh menyepadukan ML dengan cekap ke dalam aplikasi?
Penyelesaian biasa seperti ONNX Runtime membenarkan pengeksportan model ML untuk penyepaduan aplikasi, tetapi ia tidak dioptimumkan untuk CPU atau cukup fleksibel untuk algoritma umum.
Masukkan JAX, perpustakaan Python yang:
Dalam artikel ini, kami akan menunjukkan kepada anda cara untuk:
JAX adalah seperti NumPy pada steroid. Dibangunkan oleh Google, ia merupakan pustaka peringkat rendah berprestasi tinggi yang menjadikan ML boleh diakses namun berkuasa.
Berikut ialah contoh membandingkan NumPy dan JAX:
# NumPy version import numpy as np def assign_numpy(): a = np.empty(1000000) a[:] = 1 return a # JAX version import jax.numpy as jnp import jax @jax.jit def assign_jax(): a = jnp.empty(1000000) return a.at[:].set(1)
Penanda aras dalam Google Colab mendedahkan kelebihan prestasi JAX:
Fleksibiliti dan kelajuan ini menjadikan JAX sesuai untuk persekitaran pengeluaran yang prestasi adalah penting.
JAX menterjemah kod Python ke dalam spesifikasi HLO (Pengoptimum Tahap Tinggi), yang boleh disusun dan dilaksanakan menggunakan pustaka C XLA. Ini membolehkan:
Tulis fungsi JAX anda dan eksport perwakilan HLOnya. Contohnya:
# NumPy version import numpy as np def assign_numpy(): a = np.empty(1000000) a[:] = 1 return a # JAX version import jax.numpy as jnp import jax @jax.jit def assign_jax(): a = jnp.empty(1000000) return a.at[:].set(1)
Untuk menjana HLO, gunakan skrip jax_to_ir.py daripada repositori JAX:
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
Letakkan fail yang terhasil (fn_hlo.txt dan fn_hlo.pb) dalam direktori aset apl anda.
Klon repositori JAX dan navigasi ke jax/examples/jax_cpp.
python jax_to_ir.py \ --fn jax_example.prog.fn \ --input_shapes '[("x", "f32[2,2]"), ("y", "f32[2,2")]' \ --constants '{"z": 2.0}' \ --ir_format HLO \ --ir_human_dest /tmp/fn_hlo.txt \ --ir_dest /tmp/fn_hlo.pb
#ifndef MAIN_H #define MAIN_H extern "C" { int bar(int foo); } #endif
Kompilasi dengan Bazel:
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
Anda akan menemui libjax.dylib yang dikompilasi dalam direktori output.
Gunakan pakej FFI Dart untuk berkomunikasi dengan perpustakaan C. Cipta fail jax.dart:
bazel build examples/jax_cpp:jax
Sertakan perpustakaan dinamik dalam direktori projek anda. Uji dengan:
import 'dart:ffi'; import 'package:dynamic_library/dynamic_library.dart'; typedef FooCFunc = Int32 Function(Int32 bar); typedef FooDartFunc = int Function(int bar); class JAX { late final DynamicLibrary dylib; JAX() { dylib = loadDynamicLibrary(libraryName: 'jax'); } Function get _bar => dylib.lookupFunction<FooCFunc, FooDartFunc>('bar'); int bar(int foo) { return _bar(foo); } }
Anda akan melihat output daripada pustaka C dalam konsol anda.
Dengan persediaan ini, anda boleh:
Kes penggunaan yang berpotensi termasuk:
JAX merapatkan jurang antara pembangunan berasaskan Python dan prestasi peringkat pengeluaran, membenarkan jurutera ML menumpukan pada algoritma tanpa perlu risau tentang kod C peringkat rendah.
Kami sedang membina platform AI yang canggih dengan token sembang tanpa had dan ingatan jangka panjang, memastikan interaksi yang lancar dan sedar konteks yang berkembang dari semasa ke semasa.
Ia percuma sepenuhnya dan anda boleh mencubanya dalam IDE semasa anda juga.
Atas ialah kandungan terperinci Menjalankan Program JAX daripada Dart Menggunakan C FFI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!