easyremote


Nameeasyremote JSON
Version 0.1.3.1 PyPI version JSON
download
home_pageNone
SummaryA lightweight framework for hassle-free remote computing resource sharing
upload_time2025-05-24 07:03:13
maintainerNone
docs_urlNone
authorSilan Hu
requires_python>=3.7
licenseMIT
keywords remote-computing distributed-computing gpu-sharing cloud-computing grpc asyncio
VCS
bugtrack_url
requirements grpcio-tools
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # EasyRemote

<div align="center">

![EasyRemote Logo](https://raw.githubusercontent.com/Qingbolan/EasyRemote/master/docs/easyremote-logo.png)

[![PyPI version](https://badge.fury.io/py/easyremote.svg)](https://badge.fury.io/py/easyremote)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Python Version](https://img.shields.io/pypi/pyversions/easyremote)]()

*A lightweight framework for hassle-free remote computing resource sharing.*

English | [δΈ­ζ–‡](https://github.com/Qingbolan/EasyRemote/blob/main/README_zh.md)

</div>

## Why EasyRemote?

Are you tired of:

- Paying expensive cloud GPU fees for AI development?
- Struggling with complex deployment for demos?
- Looking for ways to share computing resources within your team?

EasyRemote lets you expose local computing resources (AI models, data processing functions) as remote services with just a few lines of code. All you need is a cheap VPS!

```python
# It's as simple as this (register):
from easyremote import ComputeNode

# Initialize ComputeNode with VPS address and unique node ID
node = ComputeNode(
    vps_address="your-vps-ip:8080",
    node_id="basic-compute"
)

@node.register
def run_model(input_data):
    return your_ai_model(input_data)  # Executes on your local GPU

if __name__ == "__main__":
    node.serve()
```

## Features

- πŸš€ **Super Simple**: Turn any function into a remote service with a single decorator
- πŸ’° **Cost-Effective**: Use your local GPU through an inexpensive VPS
- πŸ”’ **Private & Secure**: All computation stays on your local machine
- 🌐 **Flexible Deployment**: Perfect for demos, prototypes, and team collaboration

## Quick Start

### 1. Installation

```bash
pip install easyremote
```

### 2. Set Up VPS (Gateway&&Call)

```python
from easyremote import Server

app = FastAPI()
server = Server(port=8080)

@remote(node_id="basic-compute")
def add(a: int, b: int) -> int:
    pass
```

### 3. Configure Local Node

```python
from easyremote import ComputeNode

# Connect to your VPS
node = ComputeNode("your-vps-ip:8080")

# Define your remote functions
@node.register
def process_data(data):
    return heavy_computation(data)  # Runs locally

# Start serving
node.serve()
```

## Advanced Usage

### Async Support

```python
@node.register(async_func=True)
async def async_process(data):
    result = await complex_async_operation(data)
    return result
```

### Streaming Results

```python
@node.register(stream=True)
def stream_results(data):
    for chunk in process_large_dataset(data):
        yield chunk
```

### Real-world Examples

Check out our [examples](./examples/) directory for:

- AI Model Serving
- Data Pipeline Processing
- Team Resource Sharing
- And more!

## Architecture

```
Client -> VPS (Gateway) -> Local Compute Node
                       -> Local Compute Node
                       -> Local Compute Node
```

## Performance

- Efficient binary protocol
- Support for large data transfer
- Automatic connection management

## Roadmap

- [ ] Rewrite Distributed Network Using Go's Kitex Framework
- [ ] Multi-node clustering support
- [ ] Enhanced security features
- [ ] Web-based management UI
- [ ] More language SDKs
- [ ] Docker support

## Contributing

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md)

## License

[MIT License](LICENSE)

## Contact & Support

- Author: Silan Hu
- Email: silan.hu@u.nus.edu
- GitHub: [Qingbolan](https://github.com/Qingbolan)

## Acknowledgments

Special thanks to all contributors who have helped make EasyRemote better!

---

<div align="center">
*If you find EasyRemote useful, please consider giving it a star ⭐*

</div>

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "easyremote",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "Silan Hu <silan.hu@u.nus.edu>",
    "keywords": "remote-computing, distributed-computing, gpu-sharing, cloud-computing, grpc, asyncio",
    "author": "Silan Hu",
    "author_email": "Silan Hu <silan.hu@u.nus.edu>",
    "download_url": "https://files.pythonhosted.org/packages/1a/71/28788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323/easyremote-0.1.3.1.tar.gz",
    "platform": null,
    "description": "# EasyRemote\r\n\r\n<div align=\"center\">\r\n\r\n![EasyRemote Logo](https://raw.githubusercontent.com/Qingbolan/EasyRemote/master/docs/easyremote-logo.png)\r\n\r\n[![PyPI version](https://badge.fury.io/py/easyremote.svg)](https://badge.fury.io/py/easyremote)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n[![Python Version](https://img.shields.io/pypi/pyversions/easyremote)]()\r\n\r\n*A lightweight framework for hassle-free remote computing resource sharing.*\r\n\r\nEnglish | [\u4e2d\u6587](https://github.com/Qingbolan/EasyRemote/blob/main/README_zh.md)\r\n\r\n</div>\r\n\r\n## Why EasyRemote?\r\n\r\nAre you tired of:\r\n\r\n- Paying expensive cloud GPU fees for AI development?\r\n- Struggling with complex deployment for demos?\r\n- Looking for ways to share computing resources within your team?\r\n\r\nEasyRemote lets you expose local computing resources (AI models, data processing functions) as remote services with just a few lines of code. All you need is a cheap VPS!\r\n\r\n```python\r\n# It's as simple as this (register):\r\nfrom easyremote import ComputeNode\r\n\r\n# Initialize ComputeNode with VPS address and unique node ID\r\nnode = ComputeNode(\r\n    vps_address=\"your-vps-ip:8080\",\r\n    node_id=\"basic-compute\"\r\n)\r\n\r\n@node.register\r\ndef run_model(input_data):\r\n    return your_ai_model(input_data)  # Executes on your local GPU\r\n\r\nif __name__ == \"__main__\":\r\n    node.serve()\r\n```\r\n\r\n## Features\r\n\r\n- \ud83d\ude80 **Super Simple**: Turn any function into a remote service with a single decorator\r\n- \ud83d\udcb0 **Cost-Effective**: Use your local GPU through an inexpensive VPS\r\n- \ud83d\udd12 **Private & Secure**: All computation stays on your local machine\r\n- \ud83c\udf10 **Flexible Deployment**: Perfect for demos, prototypes, and team collaboration\r\n\r\n## Quick Start\r\n\r\n### 1. Installation\r\n\r\n```bash\r\npip install easyremote\r\n```\r\n\r\n### 2. Set Up VPS (Gateway&&Call)\r\n\r\n```python\r\nfrom easyremote import Server\r\n\r\napp = FastAPI()\r\nserver = Server(port=8080)\r\n\r\n@remote(node_id=\"basic-compute\")\r\ndef add(a: int, b: int) -> int:\r\n    pass\r\n```\r\n\r\n### 3. Configure Local Node\r\n\r\n```python\r\nfrom easyremote import ComputeNode\r\n\r\n# Connect to your VPS\r\nnode = ComputeNode(\"your-vps-ip:8080\")\r\n\r\n# Define your remote functions\r\n@node.register\r\ndef process_data(data):\r\n    return heavy_computation(data)  # Runs locally\r\n\r\n# Start serving\r\nnode.serve()\r\n```\r\n\r\n## Advanced Usage\r\n\r\n### Async Support\r\n\r\n```python\r\n@node.register(async_func=True)\r\nasync def async_process(data):\r\n    result = await complex_async_operation(data)\r\n    return result\r\n```\r\n\r\n### Streaming Results\r\n\r\n```python\r\n@node.register(stream=True)\r\ndef stream_results(data):\r\n    for chunk in process_large_dataset(data):\r\n        yield chunk\r\n```\r\n\r\n### Real-world Examples\r\n\r\nCheck out our [examples](./examples/) directory for:\r\n\r\n- AI Model Serving\r\n- Data Pipeline Processing\r\n- Team Resource Sharing\r\n- And more!\r\n\r\n## Architecture\r\n\r\n```\r\nClient -> VPS (Gateway) -> Local Compute Node\r\n                       -> Local Compute Node\r\n                       -> Local Compute Node\r\n```\r\n\r\n## Performance\r\n\r\n- Efficient binary protocol\r\n- Support for large data transfer\r\n- Automatic connection management\r\n\r\n## Roadmap\r\n\r\n- [ ] Rewrite Distributed Network Using Go's Kitex Framework\r\n- [ ] Multi-node clustering support\r\n- [ ] Enhanced security features\r\n- [ ] Web-based management UI\r\n- [ ] More language SDKs\r\n- [ ] Docker support\r\n\r\n## Contributing\r\n\r\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md)\r\n\r\n## License\r\n\r\n[MIT License](LICENSE)\r\n\r\n## Contact & Support\r\n\r\n- Author: Silan Hu\r\n- Email: silan.hu@u.nus.edu\r\n- GitHub: [Qingbolan](https://github.com/Qingbolan)\r\n\r\n## Acknowledgments\r\n\r\nSpecial thanks to all contributors who have helped make EasyRemote better!\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n*If you find EasyRemote useful, please consider giving it a star \u2b50*\r\n\r\n</div>\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A lightweight framework for hassle-free remote computing resource sharing",
    "version": "0.1.3.1",
    "project_urls": {
        "Bug Tracker": "https://github.com/Qingbolan/EasyRemote/issues",
        "Changelog": "https://github.com/Qingbolan/EasyRemote/releases",
        "Documentation": "https://github.com/Qingbolan/EasyRemote/blob/main/README.md",
        "Homepage": "https://github.com/Qingbolan/EasyRemote",
        "Repository": "https://github.com/Qingbolan/EasyRemote.git",
        "Source Code": "https://github.com/Qingbolan/EasyRemote"
    },
    "split_keywords": [
        "remote-computing",
        " distributed-computing",
        " gpu-sharing",
        " cloud-computing",
        " grpc",
        " asyncio"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "54767b500dda72ed0a03358811cf4c5b4fa84528370555b20b794992c00fea32",
                "md5": "c9138dc4917d013e48cd0baba695dd5f",
                "sha256": "97b141f7f676f0b85e8715cd1aae5282b73cc15b4014d74d061cc33ed32bfee6"
            },
            "downloads": -1,
            "filename": "easyremote-0.1.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c9138dc4917d013e48cd0baba695dd5f",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 44574,
            "upload_time": "2025-05-24T07:03:11",
            "upload_time_iso_8601": "2025-05-24T07:03:11.375777Z",
            "url": "https://files.pythonhosted.org/packages/54/76/7b500dda72ed0a03358811cf4c5b4fa84528370555b20b794992c00fea32/easyremote-0.1.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1a7128788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323",
                "md5": "6ad1349c9c46f30aef90c22bacfa1783",
                "sha256": "275502449ff35d814b74b05a72e5ccc24c511bb18bc6306082eda4509a51a9a9"
            },
            "downloads": -1,
            "filename": "easyremote-0.1.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "6ad1349c9c46f30aef90c22bacfa1783",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 59500,
            "upload_time": "2025-05-24T07:03:13",
            "upload_time_iso_8601": "2025-05-24T07:03:13.012912Z",
            "url": "https://files.pythonhosted.org/packages/1a/71/28788aa812e0e378889280664155593cd3141c26e0cd2c54eaa29d40c323/easyremote-0.1.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-05-24 07:03:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Qingbolan",
    "github_project": "EasyRemote",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "grpcio-tools",
            "specs": []
        }
    ],
    "lcname": "easyremote"
}
        
Elapsed time: 1.19116s