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

TypeError: FBWorkspace.execute() missing 2 required positional arguments: 'env' and 'entry' #631

Closed
tfzzzh opened this issue Feb 21, 2025 · 2 comments
Labels
bug Something isn't working

Comments

@tfzzzh
Copy link

tfzzzh commented Feb 21, 2025

🐛 Bug Description

To Reproduce

Steps to reproduce the behavior:

  1. git clone the repository
  2. make dev
  3. rdagent general_model "https://arxiv.org/pdf/2210.09789"

Log and Error Message

2025-02-21 21:56:49.427 | INFO | rdagent.components.coder.model_coder.task_loader:extract_model_from_doc:66 - 已经完成1个模型的提取
2025-02-21 21:56:49.433 | INFO | rdagent.app.general_model.general_model:extract_models_and_implement:41 - Logging object in /home/user/Documents/git_projects/RD-Agent/log/2025-02-21_13-55-45-606018/r/load_experiment/970417/2025-02-21_13-56-49-428675.pkl
2025-02-21 21:56:49.440 | INFO | rdagent.components.coder.CoSTEER.knowledge_management:init:720 - CoSTEER Knowledge Graph loaded, size=0
Implementing: 0%| | 0/10 [00:00<?, ?it/s]2025-02-21 21:56:49.600 | INFO | rdagent.oai.backend.deprec:_create_chat_completion_inner_function:709 -
Role:system
Content: User is trying to implement some pytorch models in the following scenario:
Background of the scenario:
The general model is a flexible and comprehensive framework designed to integrate factor-based, model-based, and graph-based approaches in quantitative investment. It allows users to define custom models that leverage various financial factors to predict the returns and risks of portfolios or single assets. These models are central to many advanced quantitative investment strategies and can be adapted to a wide range of use cases, from factor-based alpha generation to complex deep learning predictions.

Each general model incorporates the following components:

  1. Name: The name of the model.
  2. Description: A detailed description of the model.
  3. Factors: The financial factors used as inputs, including their definitions and formulations.
  4. Architecture: The structure of the machine learning, deep learning, or graph-based model.
  5. Hyperparameters: The hyperparameters used in the model, such as learning rate, number of epochs, etc.
  6. ModelType: The type of the model, "Tabular" for tabular data, "TimeSeries" for time series data, or "Graph" for graph data.
    The general model should provide clear and detailed documentation of its factors, architecture, and hyperparameters. Each model should have a fixed architecture and hyperparameters to ensure reproducibility and consistency.
    The interface you should follow to write the runnable code:
    Your python code should follow the interface to better interact with the user's system. It should be a pytorch model.
    Your code should contain several parts:
  7. The import part: import the necessary libraries.
  8. A class which is a sub-class of pytorch.nn.Module. This class should have an init function and a forward function which inputs a tensor and outputs a tensor.
  9. Set a variable called "model_cls" to the class you defined.

The user will save your code into a python file called "model.py". Then the user imports model_cls in file "model.py" after setting the cwd into the directory:

from model import model_cls

So your python code should follow the pattern:

class XXXModel(torch.nn.Module):
  ...
model_cls = XXXModel

The model has three types, "Tabular" for tabular data, "TimeSeries" for time series data, and "Graph" for graph data.

The input shape to a tabular model is (batch_size, num_features).
The input shape to a time series model is (batch_size, num_features, num_timesteps).
The input to a graph model are two tensors. 
node_feature: a tensor of shape (batch_size, num_features)
edge_index: a tensor of shape (2, num_edges) 

The batch_size is a dynamic value which is determined by the input of the forward function.

The output shape of the model should be (batch_size, 1).

The "num_features", "num_timesteps" are static and will be provided to the model through the init function.

User will initialize the tabular model with the following code:

model = model_cls(num_features=num_features)

User will initialize the time series model with the following code:

model = model_cls(num_features=num_features, num_timesteps=num_timesteps)

User will initialize the graph model with the following code:

model = model_cls(num_features=num_features)

No other parameters will be passed to the model, so give other parameters a default value or make them static.

When dealing with a time series model, remember to permute the input tensor since the input tensor is in the shape of (batch_size, num_features, num_timesteps) and a normal time series model is expecting the input tensor in the shape of (batch_size, num_timesteps, num_features).

Don't write any try-except block in your python code. The user will catch the exception message and provide the feedback to you. Also, don't write a main function in your python code. The user will call the forward method in the model_cls to get the output tensor.

Please note that your model should only use current features as input. The user will provide the input tensor to the model's forward function.
The output of your code should be in the format:
Your output should be a tensor with shape (batch_size, 1).
The output tensor should be saved in a file named "output.pth" in the same directory as your python file.
The user will evaluate the shape of the output tensor, so the tensor read from "output.pth" should be 8 numbers.
The simulator user can use to test your model:
The models are not loaded and backtested. That said, pay attention to its architecture.

Your code is expected to align the scenario in any form which means The user needs to get the prediction of the model based on the input data.

To help you write the correct code, the user might provide multiple information that helps you write the correct code:

  1. The user might provide you the correct code to similar models. Your should learn from these code to write the correct code.
  2. The user might provide you the failed former code and the corresponding feedback to the code. The feedback contains to the execution, the code and the model output value. You should analyze the feedback and try to correct the latest code.
  3. The user might provide you the suggestion to the latest fail code and some similar fail to correct pairs. Each pair contains the fail code with similar error and the corresponding corrected version code. You should learn from these suggestion to write the correct code.

Your must write your code based on your former latest attempt below which consists of your former code and code feedback, you should read the former attempt carefully and must not modify the right part of your former code.

User has not write any code before. You should write the new code from scratch.

Please response the code in the following json format. Here is an example structure for the JSON output:
{
"code": "The Python code as a string."
}

Role:user
Content: --------------Target model information:---------------
name: Anti-Symmetric Deep Graph Network (A-DGN)
description: A-DGN is a framework for stable and non-dissipative Deep Graph Networks (DGNs) designed through the lens of ordinary differential equations (ODEs). The model leverages anti-symmetric weight matrices to ensure stability and non-dissipation, which allows the preservation of long-term dependencies between nodes and prevents gradient vanishing or explosion during training. A-DGN is particularly effective in tasks requiring the capture of long-range interactions in graph-structured data.
formulation: The node state update equation for A-DGN is given by:

[ x_\ell^u = x_{\ell-1}^u + \epsilon \sigma\left( (W - W^T - \gamma I) x_{\ell-1}^u + \Phi(X^{\ell-1}, N_u) + b \right) ]

where:

  • (x_\ell^u) is the state of node (u) at layer (\ell),
  • (\epsilon) is the discretization step,
  • (\sigma) is a monotonically non-decreasing activation function,
  • (W) is the weight matrix,
  • (\gamma) is a hyper-parameter regulating the strength of diffusion,
  • (I) is the identity matrix,
  • (\Phi(X^{\ell-1}, N_u)) is the aggregation function for the neighborhood of node (u),
  • (b) is the bias vector.
    architecture: A-DGN consists of multiple layers, each corresponding to a discretization step of the underlying ODE. Each layer updates the node representations by aggregating previous node states and their neighbors. The architecture is designed to preserve long-term dependencies and prevent gradient issues by using anti-symmetric weight matrices. The model can be implemented with different aggregation functions, such as simple aggregation or GCN-based aggregation, depending on the task.
    variables: {'x_\ell^u': 'The state of node \(u\) at layer \(\ell\).', '\epsilon': 'The discretization step size.', 'W': 'The weight matrix.', '\gamma': 'The hyper-parameter regulating the strength of diffusion.', '\Phi(X^{\ell-1}, N_u)': 'The aggregation function for the neighborhood of node \(u\).', 'b': 'The bias vector.'}
    hyperparameters: {'learning_rate': '0.003 (graph property prediction), 0.01-0.0001 (graph benchmarks)', 'weight_decay': '1e-6 (graph property prediction), 0.1 (graph benchmarks)', 'n_layers': '1, 5, 10, 20 (graph property prediction), 1-64 (graph benchmarks)', 'embedding_dim': '10, 20, 30 (graph property prediction), 32-1024 (graph benchmarks)', '\epsilon': '1, 0.1, 0.01, 0.001 (graph property prediction), 0.1, 0.01 (graph benchmarks)', '\gamma': '1, 0.1, 0.01, 0.001 (graph property prediction), 0.1, 0.01 (graph benchmarks)'}
    model_type: Graph

2025-02-21 21:56:49.807 | INFO | rdagent.oai.backend.deprec:create_chat_completion_inner_function:825 - Response:
{
"code": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nclass ADGNModel(nn.Module):\n def init(self, num_features):\n super(ADGNModel, self).init()\n self.embedding_dim = 32\n self.n_layers = 5\n self.epsilon = 0.1\n self.gamma = 0.1\n self.weight = nn.Parameter(torch.Tensor(self.embedding_dim, self.embedding_dim))\n self.bias = nn.Parameter(torch.Tensor(self.embedding_dim))\n self.reset_parameters()\n\n def reset_parameters(self):\n nn.init.kaiming_uniform
(self.weight, a=math.sqrt(5))\n if self.bias is not None:\n fan_in, _ = nn.init.calculate_fan_in_and_fan_out(self.weight)\n bound = 1 / math.sqrt(fan_in)\n nn.init.uniform(self.bias, -bound, bound)\n\n def forward(self, node_feature, edge_index):\n batch_size = node_feature.size(0)\n x = node_feature\n for _ in range(self.n_layers):\n W = self.weight - self.weight.t() - self.gamma * torch.eye(self.embedding_dim, device=node_feature.device)\n x = x + self.epsilon * F.relu(W @ x + self.bias)\n return x.mean(dim=1, keepdim=True)\n\nmodel_cls = ADGNModel"
}
2025-02-21 21:57:22.721 | INFO | rdagent.components.coder.CoSTEER:develop:101 - Logging object in /home/user/Documents/git_projects/RD-Agent/log/2025-02-21_13-55-45-606018/d/evo_loop_0/evolving code/970417/2025-02-21_13-57-22-716604.pkl
2025-02-21 21:57:22.725 | INFO | rdagent.components.coder.CoSTEER:develop:103 - evolving code workspace: Workspace[self.workspace_path=PosixPath('/home/user/Documents/git_projects/RD-Agent/git_ignore_folder/RD-Agent_workspace/0b54a3582cf44d9c855a456a207ac5bb'),self.target_task.name='Anti-Symmetric Deep Graph Network (A-DGN)']
Implementing: 0%| | 0/10 [00:33<?, ?it/s]
Traceback (most recent call last):
File "/data/anaconda3/envs/rdagent/bin/rdagent", line 8, in
sys.exit(app())
File "/home/user/Documents/git_projects/RD-Agent/rdagent/app/cli.py", line 48, in app
fire.Fire(
File "/data/anaconda3/envs/rdagent/lib/python3.10/site-packages/fire/core.py", line 135, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/data/anaconda3/envs/rdagent/lib/python3.10/site-packages/fire/core.py", line 468, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File "/data/anaconda3/envs/rdagent/lib/python3.10/site-packages/fire/core.py", line 684, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "/home/user/Documents/git_projects/RD-Agent/rdagent/app/general_model/general_model.py", line 43, in extract_models_and_implement
exp = QlibModelCoSTEER(scenario).develop(exp)
File "/home/user/Documents/git_projects/RD-Agent/rdagent/components/coder/CoSTEER/init.py", line 99, in develop
for evo_exp in self.evolve_agent.multistep_evolve(evo_exp, self.evaluator):
File "/home/user/Documents/git_projects/RD-Agent/rdagent/core/evolving_agent.py", line 96, in multistep_evolve
eva if isinstance(eva, Feedback) else eva.evaluate(evo, queried_knowledge=queried_knowledge)
File "/home/user/Documents/git_projects/RD-Agent/rdagent/components/coder/CoSTEER/evaluators.py", line 175, in evaluate
multi_implementation_feedback = multiprocessing_wrapper(
File "/home/user/Documents/git_projects/RD-Agent/rdagent/core/utils.py", line 146, in multiprocessing_wrapper
return [f(*args) for f, args in func_calls]
File "/home/user/Documents/git_projects/RD-Agent/rdagent/core/utils.py", line 146, in
return [f(*args) for f, args in func_calls]
File "/home/user/Documents/git_projects/RD-Agent/rdagent/components/coder/model_coder/evaluators.py", line 54, in evaluate
model_execution_feedback, gen_np_array = implementation.execute(
File "/home/user/Documents/git_projects/RD-Agent/rdagent/core/utils.py", line 190, in cache_wrapper
result = func(*args, **kwargs)
File "/home/user/Documents/git_projects/RD-Agent/rdagent/components/coder/model_coder/model.py", line 100, in execute
super().execute()
TypeError: FBWorkspace.execute() missing 2 required positional arguments: 'env' and 'entry'

Additional Notes

I think the error result from the base class method FBWorkspace.execute requires two arguments, while the implementation calls super().execute() directly.

@tfzzzh tfzzzh added the bug Something isn't working label Feb 21, 2025
@you-n-g
Copy link
Contributor

you-n-g commented Feb 27, 2025

Hi, I think it is fixed in #643

@tfzzzh
Copy link
Author

tfzzzh commented Mar 1, 2025

Thank you for your responding. After pull the code works correctly.

Hi, I think it is fixed in #643

@tfzzzh tfzzzh closed this as completed Mar 1, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants