Giter VIP home page Giter VIP logo

routenet-fermi's Introduction

RouteNet-Fermi

This is the official implementation of RouteNet-Fermi, a pioneering GNN architecture designed to model computer networks. RouteNet-Fermi supports complex traffic models, multi-queue scheduling policies, routing policies and can provide accurate estimates in networks not seen in the training phase.

If you decide to apply the concepts presented or base on the provided code, please do refer our paper.

@article{ferriol2022routenet,
  title={RouteNet-Fermi: Network Modeling with Graph Neural Networks},
  author={Ferriol-Galm{\'e}s, Miquel and Paillisse, Jordi and Su{\'a}rez-Varela, Jos{\'e} and Rusek, Krzysztof and Xiao, Shihan and Shi, Xiang and Cheng, Xiangle and Barlet-Ros, Pere and Cabellos-Aparicio, Albert},
  journal={arXiv preprint arXiv:2212.12070},
  year={2022}
}

Quick Start

Project structure

The project is divided into three main blocks: scheduling, traffic models, and scalability. Each block has its own directory and contains its own files. In each directory we can find four main files:

  • main.py: contains the code for the training/validation of the model.
  • ckpt_dir: contains the trained models for the specific experiment.
  • predict.py: contains the code for the predictions. It automatically loads the best-trained model and saves its predictions in a predictions.npy file that can be read using NumPy.

The project also contains some auxiliary files like datanetAPI.py used to read the different datasets and the data_generator.py that is used to convert the samples provided by the dataset API into the graph that is taken as input by the model, and a generate_dataframe.py which saves the data in a Pandas Dataframe used to compute the scores.

You can find more information about the reproducibility of the experiments inside each one of the directories (Traffic Models, Scheduling, Scalability, All Mixed, Testbed, Real Traffic, FatTree).

Main Contributors

M. Ferriol-Galmés, J. Paillisé-Vilanovs, J. Suárez-Varela, P. Barlet-Ros, A. Cabellos-Aparicio.

Barcelona Neural Networking center, Universitat Politècnica de Catalunya

Do you want to contribute to this open-source project? Please, read our guidelines on How to contribute

License

See LICENSE for full of the license text.

Copyright 2023 Universitat Politècnica de Catalunya

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

routenet-fermi's People

Contributors

miquelferriol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

routenet-fermi's Issues

requirements.txt missing

Hi,

Seems all the READMEs refer to install reqs from the subject file but its missing from the repo. Is it possible to add one (or perhaps multiple if needed)?

Thanks!

Best Regards,
Toni

predictions_delay_real_traces.npy file

I am trying to run predict.py for some of the datasets. Once we obtain the predictions_delay_real_traces.npy array, what do these values represent, and what are the expected range of values that we should be getting? I am trying to evaluate the accuracy of the predictions.

OMNeT++ simulation and dataset formatting

Hi,

I would like to generate simulation results from OMNeT++ and compare them with the predictions generated from RouteNet-Fermi. I am having trouble figuring out how to format results into a dataset. I see that for a given dataset like geant, a omnet config file is provided with graphs and routing txt files. How do the graph and routing files correspond to an omnet ned file? Additionally, do values like the lambda min and max have to be defined within the ned file?

Thanks,
Rohin

TypeError: 'NoneType' object is not subscriptable

Hello Dear developers! I really like your project and I would like to implement it also. I am new in GNN and would like to learn. I was able to create datasets. But when I am running file main.py I have this error. I have checked my datasets. They have values. Also read_dataset.py produce them. I am trying to understand why model receiving NoneType. Could you guide me please where I am making mistake? Thank you in advance!
TypeError: 'NoneType' object is not subscriptable
Call arguments received by layer 'route_net_model' (type RouteNetModel):
• inputs={'traffic': 'tf.Tensor(shape=(None,), dtype=float32)', 'packets': 'tf.Tensor(shape=(None,), dtype=float32)', 'capacity': 'tf.Tensor(shape=(None,), dtype=float32)', 'link_to_path': ' and so on.

Dataset used to run the project

Hi Team,

Can you help me with the dataset needed to run the project. We don't have the dataset in the github.

Thanks,
Arun Kumar.

Index issues when using `tf.gather_nd` to aggregate `queue_state`

Hi Miquel,

At the end of the link and queue to path block of the RouteNet-Fermi, path_state_sequence is updated, and previous_path_state is added in front of each item. At this time, the feature situation in previous_path_sequence[i] should be [p[i], (queue[a]link[x]), ....], where p[i] is the i-th path_state feature, (queue[a]link[x]) is the updated feature from a-th queue and x-th link.

Then, at the beginning of the path to queue block, path_gather uses the index of path_to_queue to aggregate queue features from previous_path_sequence. However, the index sequence number of each queue in path_to_queue has changed due to the addition of path_state_state above (index from path_to_queue[:,:,i] should + 1). Is the original queue feature still aggregated at this time?

And, What is the function of path_state_sequence = tf.concat([tf.expand_dims(previous_path_state, 1), path_state_sequence], axis=1) ?

The code here is a bit complicated for me, please correct me if there is something wrong with my understanding.

Best Regards,
Henry Fang

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.