Ao criar aplicativos, a seleção das ferramentas certas é crucial. Você deseja um alto desempenho, desenvolvimento fácil e implantação contínua de plataforma cruzada. As estruturas populares oferecem trade-offs:
Mas aqui está o problema: a maioria das estruturas não tem robusto nativo de aprendizado de máquina (ml) suporte. Essa lacuna existe porque essas estruturas são anteriores ao boom da IA. A pergunta é:
Como podemos integrar com eficiência ML em aplicativos?
soluções comuns como Onnx RunTime permitem exportar modelos ML para integração de aplicativos, mas não são otimizados para CPUs ou flexíveis o suficiente para algoritmos generalizados.
enter Jax , uma biblioteca Python que:
Neste artigo, mostraremos como:
Jax é como Numpy em esteróides. Desenvolvido pelo Google, é uma biblioteca de baixo nível e alto desempenho que torna a ML acessível, mas poderosa.
aqui está um exemplo comparando Numpy e 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)
Benchmarking no Google Colab revela a vantagem de desempenho de Jax:
essa flexibilidade e velocidade tornam o JAX ideal para ambientes de produção onde o desempenho é chave.
Jax traduz o código Python em hlo (otimizador de alto nível) especificações , que podem ser compiladas e executadas usando C XLA Libraries . Isso permite:
Escreva sua função JAX e exporte sua representação HLO. Por exemplo:
import jax.numpy as jnp def fn(x, y, z): return jnp.dot(x, y) / z
Para gerar o HLO, use o script jax_to_ir.py do repositório Jax:
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
Coloque os arquivos resultantes (fn_hlo.txt e fn_hlo.pb) no diretório de ativos do seu aplicativo.
clone o repositório Jax e navegue para Jax/Exemplos/Jax_cpp .
#ifndef MAIN_H #define MAIN_H extern "C" { int bar(int foo); } #endif
cc_shared_library( name = "jax", deps = [":main"], visibility = ["//visibility:public"], )
compilar com Bazel:
bazel build examples/jax_cpp:jax
você encontrará o libjax.dylib compilado no diretório de saída.
use o pacote ffi do Dart para se comunicar com a biblioteca C. Crie um arquivo Jax.dart:
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.lookupFunctioninclua a biblioteca dinâmica no diretório do seu projeto. Teste com:('bar'); int bar(int foo) { return _bar(foo); } }
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.lookupFunctionvocê verá a saída da biblioteca C em seu console.('bar'); int bar(int foo) { return _bar(foo); } }
estamos construindo uma plataforma de AI de ponta com tokens de bate-papo ilimitados e memória de longo prazo, garantindo interações perfeitas e com reconhecimento de contexto que evoluem ao longo do tempo.é totalmente gratuito e você pode experimentá -lo dentro do seu IDE atual também.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3