快捷方式

PromptData

class torchrl.data.PromptData(input_ids: 'torch.Tensor', attention_mask: 'torch.Tensor', prompt_rindex: 'torch.Tensor', labels: 'Optional[torch.Tensor]' = None, logits: 'Optional[torch.Tensor]' = None, loss: 'Optional[torch.Tensor]' = None, *, batch_size, device=None, names=None)[source]
property device: device

檢索張量類的裝置型別。

dumps(prefix: str | None = None, copy_existing: bool =False, *, num_threads: int =0, return_early: bool =False, share_non_tensor: bool =False) T

將 tensordict 儲存到磁碟。

此函式是 memmap() 的代理。

classmethod fields()

返回描述此 dataclass 欄位的元組。

接受 dataclass 或其例項。元組成員型別為 Field。

classmethod from_dataset(split, dataset_name=None, max_length=550, root_dir=None, from_disk=False, num_workers: int | None = None)[source]

從資料集名稱返回一個 PromptData 例項。

引數:
  • split (str) – 根據需要的資料拆分,可以是 "train""valid"

  • dataset_name (str, optional) – 要處理的資料集名稱。預設為 "CarperAI/openai_summarize_comparisons"

  • max_length (int, optional) – 資料集序列的最大長度。預設為 550。

  • root_dir (path, optional) – 資料集儲存的路徑。預設為 "$HOME/.cache/torchrl/data"

  • from_disk (bool, optional) – 如果為 True,則使用 datasets.load_from_disk()。否則,使用 datasets.load_dataset()。預設為 False

  • num_workers (int, optional) – 在分詞期間呼叫 datasets.dataset.map() 的工作程序數。預設為 max(os.cpu_count() // 2, 1)

返回: 一個 PromptData 例項,包含所需資料集的記憶體對映版本。

示例

>>> data = PromptData.from_dataset("train")
>>> print(data)
PromptDataTLDR(
    attention_mask=MemoryMappedTensor(shape=torch.Size([116722, 550]), device=cpu, dtype=torch.int64, is_shared=False),
    input_ids=MemoryMappedTensor(shape=torch.Size([116722, 550]), device=cpu, dtype=torch.int64, is_shared=False),
    prompt_rindex=MemoryMappedTensor(shape=torch.Size([116722]), device=cpu, dtype=torch.int64, is_shared=False),
    labels=MemoryMappedTensor(shape=torch.Size([116722, 550]), device=cpu, dtype=torch.int64, is_shared=False),
    logits=None,
    loss=None,
    batch_size=torch.Size([116722]),
    device=None,
    is_shared=False)
>>> # data can be sampled from using regular indexing
>>> sub_data = data[:3]
classmethod from_tensordict(tensordict, non_tensordict=None, safe=True)

張量類包裝器,用於例項化新的張量類物件。

引數:
  • tensordict (TensorDict) – 張量型別字典

  • non_tensordict (dict) – 包含非張量和巢狀張量類物件的字典

get(key: NestedKey, *args, **kwargs)

獲取與輸入鍵關聯儲存的值。

引數:
  • key (str, tuple of str) – 要查詢的鍵。如果是字串元組,則相當於鏈式呼叫 getattr。

  • default – 如果在 tensorclass 中找不到鍵,則返回的預設值。

返回:

與輸入鍵關聯儲存的值

classmethod load(prefix: str | Path, *args, **kwargs) T

從磁碟載入 tensordict。

此類方法是 load_memmap() 的代理。

load_(prefix: str | Path, *args, **kwargs)

在當前 tensordict 中從磁碟載入 tensordict。

此方法是 load_memmap_() 的代理。

classmethod load_memmap(prefix: str | Path, device: torch.device | None = None, non_blocking: bool =False, *, out: TensorDictBase | None = None) T

從磁碟載入記憶體對映的 tensordict。

引數:
  • prefix (str資料夾路徑) – 應該從中獲取已儲存 tensordict 的資料夾路徑。

  • device (torch.device等效型別, 可選) – 如果提供,資料將非同步轉換為該裝置。支援 “meta” 裝置,在這種情況下,資料不會被載入,而是建立一組空的“meta”張量。這有助於在不實際開啟任何檔案的情況下了解模型總大小和結構。

  • non_blocking (bool, optional) – 如果為 True,則在將張量載入到裝置後不會呼叫同步操作。預設為 False

  • out (TensorDictBase, optional) – 可選的 tensordict,資料將寫入其中。

示例

>>> from tensordict import TensorDict
>>> td = TensorDict.fromkeys(["a", "b", "c", ("nested", "e")], 0)
>>> td.memmap("./saved_td")
>>> td_load = TensorDict.load_memmap("./saved_td")
>>> assert (td == td_load).all()

此方法也允許載入巢狀的 tensordicts。

示例

>>> nested = TensorDict.load_memmap("./saved_td/nested")
>>> assert nested["e"] == 0

tensordict 也可以載入到“meta”裝置上,或者作為假張量載入。

示例

>>> import tempfile
>>> td = TensorDict({"a": torch.zeros(()), "b": {"c": torch.zeros(())}})
>>> with tempfile.TemporaryDirectory() as path:
...     td.save(path)
...     td_load = TensorDict.load_memmap(path, device="meta")
...     print("meta:", td_load)
...     from torch._subclasses import FakeTensorMode
...     with FakeTensorMode():
...         td_load = TensorDict.load_memmap(path)
...         print("fake:", td_load)
meta: TensorDict(
    fields={
        a: Tensor(shape=torch.Size([]), device=meta, dtype=torch.float32, is_shared=False),
        b: TensorDict(
            fields={
                c: Tensor(shape=torch.Size([]), device=meta, dtype=torch.float32, is_shared=False)},
            batch_size=torch.Size([]),
            device=meta,
            is_shared=False)},
    batch_size=torch.Size([]),
    device=meta,
    is_shared=False)
fake: TensorDict(
    fields={
        a: FakeTensor(shape=torch.Size([]), device=cpu, dtype=torch.float32, is_shared=False),
        b: TensorDict(
            fields={
                c: FakeTensor(shape=torch.Size([]), device=cpu, dtype=torch.float32, is_shared=False)},
            batch_size=torch.Size([]),
            device=cpu,
            is_shared=False)},
    batch_size=torch.Size([]),
    device=cpu,
    is_shared=False)
load_state_dict(state_dict: dict[str, Any], strict=True, assign=False, from_flatten=False)

嘗試將 state_dict 原地載入到目標 tensorclass 上。

memmap(prefix: str | None = None, copy_existing: bool =False, *, num_threads: int =0, return_early: bool =False, share_non_tensor: bool =False, existsok: bool =True) T

將所有張量寫入新 tensordict 中相應的記憶體對映張量。

引數:
  • prefix (str) – 儲存記憶體對映張量的目錄字首。目錄樹結構將模擬 tensordict 的結構。

  • copy_existing (bool) – 如果為 False(預設),則如果 tensordict 中的條目已經是儲存在磁碟上的張量且關聯有檔案,但未按照 prefix 儲存到正確位置,將引發異常。如果為 True,任何現有張量將被複制到新位置。

關鍵字引數:
  • num_threads (int, optional) – 用於寫入記憶體對映張量的執行緒數。預設為 0

  • return_early (bool, optional) – 如果為 Truenum_threads>0,此方法將返回 tensordict 的 future 物件。

  • share_non_tensor (bool, optional) – 如果為 True,非張量資料將在程序之間共享,並且在單個節點內任何工作程序上的寫入操作(例如原地更新或設定)將更新所有其他工作程序上的值。如果非張量葉節點的數量很高(例如,共享大量非張量資料堆疊),這可能會導致 OOM 或類似錯誤。預設為 False

  • existsok (bool, optional) – 如果為 False,則如果同一路徑中已存在張量,將引發異常。預設為 True

然後 TensorDict 將被鎖定,這意味著任何非原地寫入操作(例如,重新命名、設定或刪除條目)都將丟擲異常。一旦 tensordict 解鎖,記憶體對映屬性將變為 False,因為不再保證跨程序標識。

返回:

如果 return_early=False,則返回一個新的 tensordict,其中張量儲存在磁碟上;否則返回一個 TensorDictFuture 例項。

注意

以這種方式序列化對於深度巢狀的 tensordicts 可能會很慢,因此不建議在訓練迴圈內部呼叫此方法。

memmap_(prefix: str | None = None, copy_existing: bool =False, *, num_threads: int =0, return_early: bool =False, share_non_tensor: bool =False, existsok: bool =True) T

將所有張量原地寫入相應的記憶體對映張量。

引數:
  • prefix (str) – 儲存記憶體對映張量的目錄字首。目錄樹結構將模擬 tensordict 的結構。

  • copy_existing (bool) – 如果為 False(預設),則如果 tensordict 中的條目已經是儲存在磁碟上的張量且關聯有檔案,但未按照 prefix 儲存到正確位置,將引發異常。如果為 True,任何現有張量將被複制到新位置。

關鍵字引數:
  • num_threads (int, optional) – 用於寫入記憶體對映張量的執行緒數。預設為 0

  • return_early (bool, optional) – 如果為 Truenum_threads>0,此方法將返回 tensordict 的 future 物件。可以使用 future.result() 查詢結果 tensordict。

  • share_non_tensor (bool, optional) – 如果為 True,非張量資料將在程序之間共享,並且在單個節點內任何工作程序上的寫入操作(例如原地更新或設定)將更新所有其他工作程序上的值。如果非張量葉節點的數量很高(例如,共享大量非張量資料堆疊),這可能會導致 OOM 或類似錯誤。預設為 False

  • existsok (bool, optional) – 如果為 False,則如果同一路徑中已存在張量,將引發異常。預設為 True

然後 TensorDict 將被鎖定,這意味著任何非原地寫入操作(例如,重新命名、設定或刪除條目)都將丟擲異常。一旦 tensordict 解鎖,記憶體對映屬性將變為 False,因為不再保證跨程序標識。

返回:

如果 return_early=False,則返回自身;否則返回一個 TensorDictFuture 例項。

注意

以這種方式序列化對於深度巢狀的 tensordicts 可能會很慢,因此不建議在訓練迴圈內部呼叫此方法。

memmap_like(prefix: str | None = None, copy_existing: bool =False, *, existsok: bool =True, num_threads: int =0, return_early: bool =False, share_non_tensor: bool =False) T

建立一個內容為空的記憶體對映 tensordict,其形狀與原始 tensordict 相同。

引數:
  • prefix (str) – 儲存記憶體對映張量的目錄字首。目錄樹結構將模擬 tensordict 的結構。

  • copy_existing (bool) – 如果為 False(預設),則如果 tensordict 中的條目已經是儲存在磁碟上的張量且關聯有檔案,但未按照 prefix 儲存到正確位置,將引發異常。如果為 True,任何現有張量將被複制到新位置。

關鍵字引數:
  • num_threads (int, optional) – 用於寫入記憶體對映張量的執行緒數。預設為 0

  • return_early (bool, optional) – 如果為 Truenum_threads>0,此方法將返回 tensordict 的 future 物件。

  • share_non_tensor (bool, optional) – 如果為 True,非張量資料將在程序之間共享,並且在單個節點內任何工作程序上的寫入操作(例如原地更新或設定)將更新所有其他工作程序上的值。如果非張量葉節點的數量很高(例如,共享大量非張量資料堆疊),這可能會導致 OOM 或類似錯誤。預設為 False

  • existsok (bool, optional) – 如果為 False,則如果同一路徑中已存在張量,將引發異常。預設為 True

然後 TensorDict 將被鎖定,這意味著任何非原地寫入操作(例如,重新命名、設定或刪除條目)都將丟擲異常。一旦 tensordict 解鎖,記憶體對映屬性將變為 False,因為不再保證跨程序標識。

返回:

如果 return_early=False,則返回一個新的 TensorDict 例項,其中資料儲存為記憶體對映張量;否則返回一個 TensorDictFuture 例項。

注意

這是將一組大型緩衝區寫入磁碟的推薦方法,因為 memmap_() 會複製資訊,對於大型內容可能很慢。

示例

>>> td = TensorDict({
...     "a": torch.zeros((3, 64, 64), dtype=torch.uint8),
...     "b": torch.zeros(1, dtype=torch.int64),
... }, batch_size=[]).expand(1_000_000)  # expand does not allocate new memory
>>> buffer = td.memmap_like("/path/to/dataset")
memmap_refresh_()

如果記憶體對映的 tensordict 具有 saved_path,則重新整理其內容。

如果未關聯路徑,此方法將引發異常。

save(prefix: str | None = None, copy_existing: bool =False, *, num_threads: int =0, return_early: bool =False, share_non_tensor: bool =False) T

將 tensordict 儲存到磁碟。

此函式是 memmap() 的代理。

set(key: NestedKey, value: Any, inplace: bool =False, non_blocking: bool =False)

設定新的鍵值對。

引數:
  • key (str, tuple of str) – 要設定的鍵名。如果是字串元組,則相當於鏈式呼叫 getattr 後跟最終的 setattr。

  • value (Any) – 要儲存在 tensorclass 中的值

  • inplace (bool, optional) – 如果為 True,set 將嘗試原地更新值。如果為 False 或鍵不存在,則值將直接寫入其目標位置。

返回:

自身

state_dict(destination=None, prefix='', keep_vars=False, flatten=False) dict[str, Any]

返回一個 state_dict 字典,可用於儲存和從 tensorclass 載入資料。

to_tensordict(*, retain_none: bool | None = None) TensorDict

將 tensorclass 轉換為常規的 TensorDict。

複製所有條目。Memmap(記憶體對映)和共享記憶體張量將被轉換為常規張量。

引數:

retain_none (bool) –

如果為 TrueNone 值將被寫入 tensordict 中。否則,它們將被丟棄。預設值:True

注意

從 v0.8 版本起,預設值將切換為 False

返回:

一個新的 TensorDict 物件,包含與 tensorclass 相同的值。

unbind(dim: int)

返回一個元組,其中包含沿指定維度解除繫結的索引 tensorclass 例項。

結果 tensorclass 例項將共享初始 tensorclass 例項的儲存。

文件

查閱 PyTorch 全面的開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得解答

檢視資源