Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Revisit format/transform interface and implementation (datasets 4 lazy Columns)

オープン
#48 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
35/100
issue の種類
リファクタリング
明瞭さ
説明が足りない
活発さ
静か
技術スタック
julia, numpy, python
領域
data

調査の方向性

src/dataset.jl とガイドの「The "julia" format and transforms」セクションから始めて、現在の単一スロットの動作を理解します。数値データセットと画像データセットの両方で perf/ ハーネスを実行し、現在の形式と numpy ベースの代替形式を比較します。ベンチマーク結果を記録し、それらを使って内部最適化または opt-in の第 2 の形式軸が正当化されるかどうかを判断できれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Summary

Revisit the format / transform interface (and its implementation) now that
datasets >= 4 returns lazy Column objects for column access. The current
behavior is intentional and documented — this issue is a placeholder to
reconsider the design, not a bug report.

Current model

A Dataset has two independent underlying slots:

  • the python format pyds._format_type (set via datasets' own
    set_format): nothing, "numpy", "torch", "pandas", "arrow",
    "polars", …
  • the julia jltransform field: py2jl, identity, or a user function.

The public API couples them into a single "format" slot (src/dataset.jl,
set_format!):

  • "julia" ≡ (_format_type = nothing, jltransform = py2jl)
  • any python format X ≡ (_format_type = X, jltransform = identity)

So the two slots are mutually exclusive through the API: setting "julia"
resets the python format to nothing; setting a python format installs
identity. The one combination that cannot be expressed is "python format X
and py2jl on top."

What prompted this

With datasets >= 4, ds["col"] returns a lazy datasets.Column, which we now
wrap in a lazy HuggingFaceDatasets.Column <: AbstractVector (added alongside
the datasets >= 4 support). It was observed that the "julia" format calls reset_format(),
so ds.pyds["col"] is always a Column.

Worth recording: resetting to nothing is not what forces the Column. In
datasets 4, Dataset.__getitem__(str) returns a Column for every format
except arrow/pandas/polars:

python format ds["col"] returns
nothing (our "julia") datasets.Column (lazy)
"numpy" datasets.Column (lazy)
"torch" datasets.Column (lazy)
"pandas" pandas.Series (native)
"arrow" pyarrow.ChunkedArray (native)
"polars" polars.Series (native)

So decoupling the two formats would not avoid Columns in general — the lazy
Column is simply the v4 default for column access.

Points to reconsider

  1. One format slot vs. two independent axes. Conceptually the python format
    and the julia conversion are orthogonal (what datasets produces vs. a
    julia-side transform). Exposing both is more faithful but roughly doubles the
    state space; most combinations are redundant (py2jl already absorbs numpy
    copylessly via DLPack) or ill-defined (py2jl has no branch for a pandas
    Series / arrow table / torch tensor). Current stance: keep the single slot;
    with_jltransform / MLUtils.mapobs are the intended composition points.

  2. The one real limitation — numeric throughput. Under nothing, a numeric
    batch comes back as a python list and py2jl copies it element-by-element;
    under "numpy" it would be an np.ndarray → numpy2jl (zero-copy). This is
    the single case where "numpy" + py2jl genuinely wins.

  3. Possible internal optimization (benchmark first). Rather than exposing a
    second format knob, consider whether the "julia" format should sit on
    "numpy" instead of nothing, so numeric columns transfer copyless. Tradeoff:
    image columns currently arrive as PIL.Image (→ Gray/RGB ImageCore
    views) under nothing; under "numpy" they'd be raw transposed arrays and we
    lose that clean path. Best validated with the perf/ harness on both numeric
    and image datasets before changing anything.

Non-goals / decision so far

  • Keep the current format behavior as-is for now (intentional, documented in the
    guide's "The "julia" format and transforms" section).
  • No API change until the numeric zero-copy question (2/3) is benchmarked and we
    decide whether the win justifies either an internal base-format change or a
    second, opt-in axis.
主要言語
Julia
スター
38
フォーク
1
平均マージ
3時間 30分
マージ済み PR(30日)
20

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

JuliaGenAI/HuggingFaceDatasets.jl のほかの issue

JuliaGenAI/HuggingFaceDatasets.jl の issue をすべて見る

似ている issue

Julia の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。