Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DataCollector-User-Bufferプログラミングモデルの改良 (wip) #148

Open
Geson-anko opened this issue Sep 23, 2024 · 0 comments
Open
Labels
refactor ⭐ ⭐ ⭐ ⭐ ⭐ 超重要。設計の根幹に影響するタスク

Comments

@Geson-anko
Copy link
Member

背景・目的

DataBufferクラスに存在するconcatenateの存在や、同じようなメソッドがRandomDataBufferやTimeSeriesDataBufferに存在していたりと、無駄が多い。また、reconstructable_initは引数に大きなオブジェクトを受け取れないといった問題を引き起こす。
さらに、Agentから受け渡されるデータ形式はStepDataであることが確定しており、その前提条件を踏まえた実装が必要である。

スケッチ

まだ構想段階であるが、DataUserがDataBufferの操作権限を持つ構造になる可能性が高く、現在のDataCollectorsDictをインスタンス化する仕組みではなくなると思われる。(TrainingThreadに時間がかかる処理を全て担わせる関係上、Dataの結合処理などをUser側でする必要性がある)

DataBuffer

  • reconstructable_initは廃止とする。
  • 必ず data_keysまたはget_data_keysの実装を確実にさせ、StepDataのどのキーを保持するかの情報を持たせるようにする。abstract methodやpropertyにしても良いだろう。ベースクラスの__init__の引数とするのも良い。
classs BaseDataBuffer(ABC):
    def __init__(self, data_keys: Sequence[str]) -> None:
        self.data_keys = set(data_keys)
    
    @abstractmethod
    def add(self, step_data: StepData) -> None:
        """Bufferへ加える処理を記述"""
        ...
    
    @abstractmethod
    def get_data(self) -> dict[str, Any]:
        """ここでは蓄積したデータを返す。"key: data" の組で返す"""
        ...

DataUser

  • count_data_added_sinceを実装しておきたい。これはAMIシステムの学習において必須。
class BaseDataUser(ABC):
    def __init__(self, buffer: BaseDataBuffer) -> None:
        self.buffer = buffer
        self._added_times = deque() # max sizeをどう指定する...?

DataCollector

  • ModelWrapperクラスのように、Bufferクラスを受け取るWrapperクラスとする。
  • DataBufferのdata_keysプロパティを参照し、StepDataのキーの取捨選択を行う(デカいオブジェクトまで全て保持しているとメモリを食ってしまう。GCに回す)
  • 一時的に保持しておくstep_dataのサイズを max_queue_sizeで指定。DataCollectorクラス自体の操作は行わない。(と言うことはDataCollectorクラスがBufferへの直接的な参照を持つのはスレッドセーフに違反するのでは...?)
@Geson-anko Geson-anko added ⭐ ⭐ ⭐ ⭐ ⭐ 超重要。設計の根幹に影響するタスク refactor labels Sep 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactor ⭐ ⭐ ⭐ ⭐ ⭐ 超重要。設計の根幹に影響するタスク
Projects
None yet
Development

No branches or pull requests

1 participant