タグ

rustに関するsh19910711のブックマーク (115)

  • [Rust] ortでonnxモデルを使って推論したりWASMにしたりしてみる | DevelopersIO

    Introduction 以前、BurnというRust機械学習フレームワークで ONNXファイルを変換して使うという記事を書きました。 問題なく変換して推論までできましたが、onnxファイルをそのまま使いたいケースもあります。 というわけで、今回はONNX RuntimeのRustラッパー「ort」を使ってみます。 また、wasmpackを使ってWASMにしてChrome Extensionから使ってみます。 [補足] ONNX? ONNXは、さまざまな機械学習フレームワーク間で使用できる共通フォーマットです。 これを使うことにより、PytorchでトレーニングしたモデルをTensorFlowで使う みたいなことが容易にできます。 ort? ortは、ONNXランタイム用のRustバインディングです。 ここで紹介されていますが、ortとONNX Runtimeを併用することで、 さまざま

    [Rust] ortでonnxモデルを使って推論したりWASMにしたりしてみる | DevelopersIO
    sh19910711
    sh19910711 2024/06/07
    "ort: ONNXランタイム用のRustバインディング / GenAIで「フリーハンドでキャンバスに数値書いてjpgにして、そのデータをwasmに渡すChrome Extension作って」と言ったらほとんど生成してくれます"
  • 量子コンピュータのシミュレータをRustで作る

    目的 最近、量子コンピュータを勉強しています。一般的な意味でいう「なんもわからん」状態ですので、エンジニアがいう「完全に理解した」状態になるために、量子コンピュータのシミュレータを作ってみる事にしました。 せっかくなので、Rustで実装することにしました。量子コンピュータもRustもわからない事だらけなので、以下を参考にしていみました。 qulacs/qulacs: Variational Quantum Circuit Simulator for Quantum Computation Research hajifkd/rusq: Quantum computing simulator in Rust、qulacsの簡易版をRustで移植して、とりあえずqulacsのチュートリアルを実装できる程度をめざします。 今回実装したコードは、こちらになります。 量子コンピュータのシュミレー

    量子コンピュータのシミュレータをRustで作る
    sh19910711
    sh19910711 2024/06/07
    "複素数の状態ベクトルに対して、行列で表現される量子ゲートを適用して計算していく / ロジックは、京都大学数理解析研究所の講究録 1120巻の量子計算機シミュレーションシステムを参考" 2022
  • Rust製データベースSurrealDBの紹介 - Qiita

    はじめに この資料は、2022年7月に公開されたSurrealDBについてまとめたものです。 SurrealDB歴史 公開されてからの期間は浅いが2016年から開発が始まっている 2016年 Feb GoLangで開発開始 2017年 Jul SaaS のバックエンドDBとして運用開始 2021年 Oct Open Source として公開決定、Rustで再構築 2022年 Jul Beta.1 リリース 2022年 Aug Beta.5リリース 2022年 Oct Beta.8 リリース SurrealDB 社 2021年 Nov SurrealDB Ltd. をロンドンに設立 2023年 Jan DBaaS ために 600万ドル調達 SurrealDBが生まれた背景 大きなトレンド データベースの抽象化、クラウド、サーバーレス DBaaSを採用する企業が増えている MariaDBによ

    Rust製データベースSurrealDBの紹介 - Qiita
    sh19910711
    sh19910711 2024/06/06
    "nom: 関数を連結してインクリメンタルにパーサーを構築できる / GeoJSONの解析には geo を利用 / ローカルファイルをデータストアにするときはRocksDB + 分散DBとしての機能はTiKVやFoundationDB" 2023
  • cargo-atcoder を使って Rust での AtCoder ライフを超快適にする - Qiita

    追記(2020/08/10) このエントリで紹介している cargo-atcoder の進化版として、@qryxip さんにより、cargo-compete が開発されました。 ↓↓↓詳しくはご人による紹介エントリをご覧ください!↓↓↓ cargo-atcoderの代替品を作った - Qiita (追記終わり) Rust競技プログラミングをやっている方であれば、 Rust競技プログラミングの入力をスッキリ記述するマクロ - Qiita で紹介されている input! マクロのことを見聞きしたことがある方が多いのではないかと思います。競プロにおいて第一級市民である C++ に比べて標準入力からの受け取りが冗長になりがちな Rust において、さまざまな入力形式に対応する汎用性と記述の短さをもつ input! マクロがもたらす恩恵はとても大きなものです。 さて、このマクロを作成した @

    cargo-atcoder を使って Rust での AtCoder ライフを超快適にする - Qiita
    sh19910711
    sh19910711 2024/06/06
    "競プロにおいて第一級市民である C++ に比べて標準入力からの受け取りが冗長になりがちな Rust / さまざまな入力形式に対応する汎用性と記述の短さをもつ input! マクロがもたらす恩恵はとても大きなもの" 2020
  • 128ビット符号付き整数の最大値は素数 - Rustで任意精度整数演算

    概要 2^n-1 型の数はメルセンヌ数と呼ばれ、更に素数である場合にメルセンヌ素数といいます。記事では、メルセンヌ数に対する高速な素数判定法であるリュカ・レーマーテストを、Rustの任意精度演算用クレート rug を利用して実装します。 実行環境 CPU: Intel Core i7 1.8GHz メモリ: 16GB OS(ホスト): Windows 10 Home 21H1 WSL2: Ubuntu 20.04.3 rustc: Ver. 1.55.0 cargo: Ver. 1.55.0 符号付き整数型の範囲について Rustには組み込みの整数型として 8,\,16,\,32,\,64,\,128 ビット整数[1]がそれぞれ符号付き・符号なしで備わっています[2]。そのうち符号付き整数は、他の多くの言語と同様、2の補数によって負の数が表現されます。したがって、ビット数 n = 8,

    128ビット符号付き整数の最大値は素数 - Rustで任意精度整数演算
    sh19910711
    sh19910711 2024/05/31
    "ミラー・ラビン: 実用的な確率的素数判定法の1つ / 数千ビットの素数はRSA暗号などのキーとして日常的に用いられ / 「ハッシュ値の衝突確率は現実的には無視できる」という文脈における確率と似ていて" 2021
  • Rust製ツールのmiseでランタイムバージョンを管理する|Taro Yamashita

    アキッパの山下です。 手元の環境を汚さずに、PHP/Python/Node.jsなどのランタイムバージョンを切り替えたいというニーズでは、Dockerの利用がすっかり主流だと思いますが、シーンによってはPythonのvenvといったツールもまだまだ活躍するシーンは多いのではないでしょうか。 そんなツールの中で、今回はRust製ツールのmiseを紹介します。 ランタイムバージョン管理とは?あらためて、ITシステムやWebサービスを開発・運用していく場合、どのプログラミング言語で構築されているか?だけでなく、そのバージョンは?も重要なポイントです。 稼動しているサーバにインストールされている言語バージョンと、手元の開発環境でバージョンが異なれば、手元で動くのにサーバで動かない(あるいはその逆)が往々にして起こります。 開発環境にサーバと同じバージョンをインストールすれば良いのですが、サーバAで

    Rust製ツールのmiseでランタイムバージョンを管理する|Taro Yamashita
    sh19910711
    sh19910711 2024/05/28
    "手元の環境を汚さずに、PHP/Python/Node.jsなどのランタイムバージョンを切り替えたいというニーズ / mise: asdfと完全互換なうえに、速度面でも文句なし + rtxからmiseに名前が変わった"
  • 噂のpidfdをRustで試してみた - Qiita

    はじめに Python3.9の新機能 (まとめ)という記事を書く中でpidfdというものを知りました。まだあまり良い解説記事がないのですが、最近の5.x系Linuxカーネルに新たに導入されたプロセスを識別するための仕掛けです。この機能がRust言語でCrate(ライブラリのようなもの)として実装されていたので試してみました。 pidfdとは これまでプロセスはPID(Process ID)によって指し示されていました。PIDはプロセスを一意に指し示すための識別子で、例えばシグナルなどを送ったりするのに使われます。 PIDは32bitの整数で、プロセスが生成される時にカーネルが割り振りますが、システム全体で共有しているので枯渇しちゃいます。32bitならそこそこあるように思いますが、実はPIDの最大値はもっと小さく設定されています。Linuxの場合は cat /proc/sys/kernel

    噂のpidfdをRustで試してみた - Qiita
    sh19910711
    sh19910711 2024/05/24
    "pidfd: 5.x系Linuxカーネルに新たに導入されたプロセスを識別するための仕掛け + Pythonでは asyncioの子プロセスを監視するための仕掛けとして 3.9から導入 / PIDの最大値: Linuxの場合は cat /proc/sys/kernel/pid_max で見ることができ" 2020
  • Rust で自動微分ライブラリ作ってみた

    次回 -> 応用編 前回は Rust でディープラーニングフレームワークを作ってみましたが、バックプロパゲーションに必要な微分の計算は手でやっていました。これを自動化できないかというのが今回のお題です。 業界では自動微分(autograd)と言われる技術で、 PyTorch や TensorFlow では標準装備されているみたいです。 自動微分ってなんだか難しそう……と思っていましたが、とある動画でそれほど難しくなさそうに思えたので自前で実装してみました。 例によってコードは下記にあります。 自動微分でできること まず断っておくべきこととして、ここでいう自動微分とは Python における sympy や Matlab の Symbolic math toolbox や Maxima や Wolfram Alpha のようなシンボリックな微分ではなく、数値が分かっている変数間の微分係数を求

    Rust で自動微分ライブラリ作ってみた
    sh19910711
    sh19910711 2024/05/24
    "バックプロパゲーションの本質はノードの変更を行うことなので、純粋関数型言語では簡単にはできませんでした / 状態の変更を伴うロジックは逐次型プログラミング言語がやはり向いて" 2023
  • WebAssemblyコンポーネントモデルを調べる

    Rustの相互運用ABI(interoperable_abi)の提案 について調べるはずが、いつのまにかWebAssembly Interface Types (WIT) について調べていたのでとりあえずまとめておきます。 2023/2/11現在Interface Typesの提案はWebAssembly component modelに統合されています。 WebAssemblyコンポーネントを使うとき このプロジェクトで目標としているユースケースにはサーバーレス等のいくつかの場合があがっていますが、今回はCPythonからwasmのコンポーネントを読み込んでその中にある実装を利用するケースを考えましょう。これはCPythonにとっては共有ライブラリを読み込んでその中の関数を呼び出しているのと似ています。これを実現するためにコンポーネントモデルはwasmのコア言語の上に インターフェース定

    WebAssemblyコンポーネントモデルを調べる
    sh19910711
    sh19910711 2024/05/23
    "Rustの相互運用ABI(interoperable_abi)の提案について調べるはずが、いつのまにかWebAssembly Interface Types (WIT)について調べていた / IDL: データ構造を記述 + バイナリフォーマットでそれをwasmの線形メモリ上にどう保持するか" 2023
  • Yewを使ってRustでフロントエンド入門してみた - Qiita

    概要 最近趣味Rustをやっています。 そのなかで、WASM(WebAssembly)の技術を使ってRustフロントエンド開発が行えると知ったので少し試しました。 今回はYewというフレームワークのチュートリアルを参考に、環境の立ち上げから簡単なカウンターボタンを表示するところまでやってみます。 執筆者について 普段はGoでバックエンド開発をしています。 フロントエンドはたまにAngularをやる程度であまり詳しくありません。 むしろ、昔ながらのPHPのテンプレートエンジンとjQueryをつかった開発の方が長いです。 Rustについても経験浅なので不正確な記述などあればご指摘ください。 なぜブラウザでRustが動かせるのか WebAssemblyのおかげ https://webassembly.org/ 当初はWebブラウザ上でJavaScriptで行うには負荷が高い処理を高速で実行さ

    Yewを使ってRustでフロントエンド入門してみた - Qiita
    sh19910711
    sh19910711 2024/05/21
    "trunk: RustでWebAssemblyアプリケーションを作るときに利用するビルドツール + ローカルサーバーもついてて便利、ホットリロードもしてくれます / コンパイラの親切さはYewを使っていても健在" 2023
  • Rustの形態素解析ライブラリ - VibratoとLindera

    Rust製の形態素解析ライブラリVibratoのご紹介です。MeCab互換で爆速のようです。Python版もあります。WASMのデモサイトもあります。 学術的な難しい話はできないので、興味のある方は開発者の方のページをご覧ください。 また比較も兼ねて、同じくRust製の形態素解析ライブラリのLinderaも紹介します。最後におまけでActix Webサーバに組み込み、APIとして形態素解析を提供する方法も説明します。 Vibrato 辞書ファイルのダウンロード 最初にVibrato専用の辞書ファイルをダウンロードします。コンパイル済みのものがありますのでこちらからダウンロードします。 辞書ファイルにはいろいろ種類があります。少し古いですがIPA+MeCabがサイズが7.5MBと一番小さくて使いやすいためこちらを使用します。ダウンロードしたら展開してください。この説明では$HOMEに展開しま

    Rustの形態素解析ライブラリ - VibratoとLindera
    sh19910711
    sh19910711 2024/05/21
    "Vibrato: Rust製の形態素解析ライブラリ + MeCab互換で爆速 + Python版、WASMのデモサイトもあり / 辞書ファイル: 少し古いですがIPA+MeCabがサイズが7.5MBと一番小さくて使いやすい" 2023
  • 話題の組版エンジン Typst を触ってみた

    Typst — 新しい組版エンジン 今年の3月21日、Typst というソフトウェアが public beta となり、処理系がオープンソースで公開されました。 Typst is a new markup-based typesetting system for the sciences. Typst はマークアップベースの新しい組版システムです。独自の構文を持っており、Typst で書かれた文書をオンラインサービスまたはローカル上でコンパイルすることで PDF に変換(出力)することができます。 公式サイトには「科学分野向け」「LaTeX への不満から生まれた」とあり、数式や相互参照等の機能が充実していることから、メインターゲットも LaTeX ときわめて近いところにあると考えられます。とはいえそれ自体は汎用的な組版システムなので、用途も 論文・会議原稿 雑誌の記事 小説 技術書 スライ

    話題の組版エンジン Typst を触ってみた
    sh19910711
    sh19910711 2024/05/21
    "Typst: 組版システム + 公式サイトには「科学分野向け」「LaTeX への不満から生まれた」とあり / マークアップとプログラミングの両側面を両立するとなると様々な問題が生じがち(括弧の種類が足りないとか)" 2023
  • Rustを勉強したら低レベルが理解出来る!!!わけねえだろ

    おれはOSを書く仕事をしたこともあるし、今までの仕事はほとんどがいわゆるシステムソフトウェアだった。しかし多くの人はウェブアプリケーションとかそういうところからキャリアをスタートさせるみたいで、そういう人の中でちょっと意識の高い人は「自分はアプリのことしかわからないから低レベルのことを勉強しなきゃならないな」となる人がいて、例えば伊藤直也さんなんかはがんばってLinuxカーネルの勉強をしていたようである。というかそういう有名人に触発されて、低レベルもやらなきゃなみたいな風潮があるといってもよい。そもそも「低レベルとはなんぞや」みたいなところがおれの中にはあるが、OSがどう動いてるかとか、コンパイラは何をしているのかとかは、基なのでざっくりとでも知っておくべきだとは思う。 ただ、そこからどう捻れたのかわからないが、「Rustは低レベルに入門する最後のチャンスだ!」「Rustを勉強すれば低レ

    Rustを勉強したら低レベルが理解出来る!!!わけねえだろ
    sh19910711
    sh19910711 2024/05/01
    "Rustのありがたみを理解するには、CやC++を真剣に書いてリソース管理の難しさを体験しなければいけない / 本来ありがたい存在であるはずのGCの挙動を理解しながらコードを書くことの不毛さを体験しなければいけない" 2016
  • 頑張って Axum を Cloudflare Workers で動かす

    worker = { git = "https://github.com/cloudflare/workers-rs", branch="kflansburg/http-fetch", features = ["http"] } マージがマジ楽しみ! Axumがサポートされたぞ!!!!!!!!!! Cloudflare Workers では少し前から Rust が動いていた。 (正確には動いているのは WebAssembly だが。) Cloudflare Workers は V8 ベースの技術に立っているので、WebAssembly がそのまま動くし、つまり WebAssembly に変換できたらコンパイル前の言語は何であっても良い。 ちなみに V8 で動くものに変換できたらいいので hoge to JS なトランスパイラがある言語は全部動く。 その中でも Rust は worker-r

    頑張って Axum を Cloudflare Workers で動かす
    sh19910711
    sh19910711 2024/04/29
    "Cloudflare Workers: V8 ベースの技術に立っているので、WebAssembly がそのまま動く + WebAssembly に変換できたらコンパイル前の言語は何であっても良い / workers-rs: Routerがある + リバースプロキシー目的で使うときは使い勝手が良い"
  • RustでミニTensorFlowを作った - Qiita

    Rust Advent Calendar 2017 6日目の記事です。 rust-autograd というライブラリを作りました。https://github.com/raskr/rust-autograd もともとニューラルネットのライブラリのつもりだったんですが、GPUの知識がなさすぎて無理だと気づき、一般的な名前にしました。一応ドキュメント(兼テスト)もあります。例えば行列積の計算はこんな感じです: extern crate autograd as ag; let a: ag::Tensor = ag::zeros(&[4, 2]); let b: ag::Tensor = ag::zeros(&[2, 3]); let c: ag::Tensor = ag::matmul(&a, &b); println!("{}", c.eval(&[]).unwrap()); // [[0,

    RustでミニTensorFlowを作った - Qiita
    sh19910711
    sh19910711 2024/04/28
    "数値計算は rust-ndarray というクレートに依存 / rust-ndarray: Pure Rust なので結構速い + map, fold などのコレクション系の高階関数が提供 + Read-only View のようなRustっぽい面白い API がある" 2017
  • burn – Rust製DeepLearningフレームワークの紹介

    burnはRust製の深層学習(Deep Learning)フレームワークです。 現在活発に開発が進められており、最新のコードやサンプルには、Githubリポジトリからアクセスできます。 GitHub - tracel-ai/burn: Burn is a new comprehensive dynamic Deep Learning Framework built using Rust with extreme flexibility, compute efficiency and portability as its primary goals.Burn is a new comprehensive dynamic Deep Learning Framework built using Rust with extreme flexibility, compute efficiency

    burn – Rust製DeepLearningフレームワークの紹介
    sh19910711
    sh19910711 2024/04/24
    "burn: Rust製の深層学習フレームワーク / 3種類のバックエンド + ブラウザ環境も考慮したGPUベースの計算をサポート (WebGPU) / no_std開発をサポートしているのが嬉しくて、マイコンへの学習済みモデルの移植が捗りそう" 2023
  • Rustのゼロコスト抽象化の効果をアセンブラで確認

    これは Rust その3 Advent Calendar 2019 の24日目のエントリです。 Rustのゼロコスト抽象化が期待どおりに働いていることを、コンパイラが出力した機械語(アセンブリコード)で確認します。 ゼロコスト抽象化とは ゼロコスト抽象化(zero-cost abstraction)とは、Rustが持つ抽象化のしくみが実行時の追加コストなしに動作することです。 ここでいう追加コストとは、メモリ使用量の増加や実行速度の低下などの、いわゆるオーバーヘッドを指します。 では抽象化とはなんでしょうか? プログラミングにおける抽象化とは、共通な部分を抽出し、その詳細をブラックボックス化することです。 これにより仕様変更に強く、再利用性の高いソフトウェアを開発できます。 Rustが提供する抽象化のしくみには、たとえば以下のようなものがあります。 ポリモーフィズム:いくつかの型に共通する

    sh19910711
    sh19910711 2024/04/24
    "抽象化のしくみを使うと実行時のオーバーヘッドがかかる / Rustではこれらをできる限りコンパイル時に解決 / cargo rustcコマンド: --emit asmフラグでアセンブリコードの入ったファイルを生成" 2019
  • HTMXとRustを組み合わせて遊んでみた

    なにやら少し話題になっていたHTMXが気になっていたので、触ってみました。 基的なことは公式リファレンスにまとまっているので、 今回はRustとHTMXを利用してカウンターのWebアプリを作成してみました。 HTMXとは? htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypertext 意訳すると、「JavaScript使わんでも色々できまっせー」って感じらしい。 多分、実際に使ってみると言ってることがわかってくる。 サンプルコード maudを利用して、H

    HTMXとRustを組み合わせて遊んでみた
    sh19910711
    sh19910711 2024/04/20
    "HTMX: 勝手に距離を置いていましたが、触ってみると面白かった + 公式サイトにあるエッセイを読んでいても、HTMXに対する熱い想いを感じられて良い / maudを利用して、HTMXを用いたテンプレートを作成"
  • 「RとRustの現状確認 2023」というタイトルでTokyo.R#103で発表してきました。 - Technically, technophobic.

    少し前ですが、第103回R勉強会@東京で発表してきました。スライドはQuarto Pub(便利)で公開しています。 これは、1月中旬くらいにR core teamの人から「お前のCRANにあるパッケージどうなっとんねん」という問い合わせがあり、Rustのこと何も知らなそうだったので「私に答えれることだったらなんでも聞いてくださいね」と優しく返したところ、それが命取り、「そもそもRustってどういう仕組みなの?」みたいなマニアックな質問に回答するために東奔西走(具体的にはググる)する羽目になりめっちゃ疲れた、ので、その愚痴でも語りに行くか...、というモチベーションの発表でした。が、私の知識不足のために、話したいことの2割くらいしか話せませんでした。いずれリベンジしたい。 個人的には、Rの未来もRustの未来も明るいと思っていますが、これが「RとRust」の未来となると、明るくないわけじゃな

    「RとRustの現状確認 2023」というタイトルでTokyo.R#103で発表してきました。 - Technically, technophobic.
    sh19910711
    sh19910711 2024/04/11
    "Rの未来もRustの未来も明るいと思っていますが、これが「RとRust」の未来となると、明るくないわけじゃないんですけど、シンプルじゃないというか、端的に言えば、つらそう、みたいな感触" 2023
  • Rustによる高速なOptuna実装の試作 - Preferred Networks Research & Development

    上記の結果で重要な点の1つは、Trial数を10倍にした際にRustOptuna実装の実行時間は約10倍で済んでいるのに対して、Optunaの実行時間は50-100倍にまで伸びてしまっている点です。この原因はOptunaが提供するいくつかの便利な機能に起因しています。Optunaでは利便性と速度低下のバランスを慎重に判断して開発を進めていますが、多くのユーザーにとっての利便性を追求した結果、一部のユーザーにとってこのような速度低下を招いてしまっているのも事実です。 RustOptuna実装は高速化により重きを置いています。速度に大幅な改善がなければ存在意義がなくなってしまうからです。互換性を重視してOptunaの設計や機能に合わせすぎてしまうと高速化に限界が生じてしまうため、enqueue_trial()のような一部の機能については導入を慎重に判断しています。 “基的に” 同じA

    Rustによる高速なOptuna実装の試作 - Preferred Networks Research & Development
    sh19910711
    sh19910711 2024/03/27
    "Optuna: 速度を必要とする処理もC拡張を使わずにすべてPythonで実装 + このおかげで様々な実行環境にトラブルなくインストールでき / Optunaのコア機能をRustで再実装するとともに、PyO3を使ってPythonバインディングを提供"