{ "cells": [ { "cell_type": "raw", "metadata": {}, "source": [ "---\n", "sidebar_label: \"Prolog-Hello-World\"\n", "sidebar_position: 10\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Prolog Hello World\n", "\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/bacalhau-project/examples/blob/main/workload-onboarding/Prolog-Hello-World/index.ipynb)\n", "[![Open In Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/bacalhau-project/examples/HEAD?labpath=workload-onboarding/Prolog-Hello-World/index.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "id": "nj1-Kp2gw7kU" }, "source": [ "## Introduction\n", "Prolog is intended primarily as a declarative programming language: the program logic is expressed in terms of relations, represented as facts and rules. A computation is initiated by running a query over these relations.\n", "Prolog is well-suited for specific tasks that benefit from rule-based logical queries such as searching databases, voice control systems, and filling templates.\n", "In this example we will run a hello world prolog script on bacalhau\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "DrdQTcaPxDll" }, "source": [ "## Running Locally​\n" ] }, { "cell_type": "markdown", "metadata": { "id": "IvMPtL4xxGFj" }, "source": [ "Install swipl \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "exnVKu_pxH_r", "outputId": "1d536b36-3864-4efa-c27c-071b9b3ac1f6", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Comprehensive Prolog implementation with extensive libraries and development tools. Primarily targetted at teaching, RDF processing and web-related tasks, such as creating web services or analysing web content.\n", "\n", "Official PPAs for SWI-Prolog. See https://www.swi-prolog.org for further information.\n", " More info: https://launchpad.net/~swi-prolog/+archive/ubuntu/stable\n", "Hit:1 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease\n", "Hit:2 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease\n", "Hit:3 http://archive.ubuntu.com/ubuntu bionic InRelease\n", "Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n", "Ign:5 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n", "Hit:6 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n", "Hit:7 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n", "Get:8 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n", "Hit:9 http://ppa.launchpad.net/cran/libgit2/ubuntu bionic InRelease\n", "Hit:10 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease\n", "Get:11 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [83.3 kB]\n", "Hit:12 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease\n", "Hit:13 http://ppa.launchpad.net/swi-prolog/stable/ubuntu bionic InRelease\n", "Fetched 261 kB in 2s (141 kB/s)\n", "Reading package lists...\n", "Hit:1 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease\n", "Ign:2 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n", "Hit:3 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n", "Hit:4 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n", "Hit:6 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease\n", "Get:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n", "Hit:8 http://ppa.launchpad.net/cran/libgit2/ubuntu bionic InRelease\n", "Hit:9 http://archive.ubuntu.com/ubuntu bionic InRelease\n", "Get:10 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n", "Get:11 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [83.3 kB]\n", "Hit:12 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu bionic InRelease\n", "Hit:13 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease\n", "Hit:14 http://ppa.launchpad.net/swi-prolog/stable/ubuntu bionic InRelease\n", "Fetched 261 kB in 5s (57.4 kB/s)\n", "Reading package lists...\n", "Reading package lists...\n", "Building dependency tree...\n", "Reading state information...\n", "swi-prolog is already the newest version (8.4.3-0-bionicppa2).\n", "The following package was automatically installed and is no longer required:\n", " libnvidia-common-460\n", "Use 'sudo apt autoremove' to remove it.\n", "0 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.\n" ] } ], "source": [ "%%bash\n", "sudo add-apt-repository ppa:swi-prolog/stable\n", "sudo apt-get update\n", "sudo apt-get install swi-prolog" ] }, { "cell_type": "markdown", "metadata": { "id": "DmWJsNYVxNzk" }, "source": [ "Create a file called helloworld.pl \n", "\n", "The following script prints ‘Hello World’ to the stdout\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f6mZ2BJBxK_A", "outputId": "8b5129d1-fb7e-4f48-a5f2-368aa3d2df62", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting helloworld.pl\n" ] } ], "source": [ "%%writefile helloworld.pl\n", "hello_world :- write('Hello World'), nl, \n", " halt." ] }, { "cell_type": "markdown", "metadata": { "id": "ob7hpDK8xblS" }, "source": [ "Running the script\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "eGKyvFesxdkC", "outputId": "c261cf03-9a48-405f-bef0-38661b436e13", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World\n" ] } ], "source": [ "%%bash\n", "swipl -q -s helloworld.pl -g hello_world" ] }, { "cell_type": "markdown", "metadata": { "id": "S_0U_66dzGUB" }, "source": [ "After the script has run successfully locally we can now run it on bacalhau\n", "\n", "For that we upload our script to IPFS since the script is only present locally\n", "ipfs add helloworld.pl\n", "\n", "Using IPFS cli\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "aCfmI2YY4JFE", "outputId": "b106a21f-1513-4305-9203-151c369df2c5", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "--2022-11-12 08:44:36-- https://dist.ipfs.io/go-ipfs/v0.4.2/go-ipfs_v0.4.2_linux-amd64.tar.gz\n", "Resolving dist.ipfs.io (dist.ipfs.io)... 209.94.78.1, 2602:fea2:3::1\n", "Connecting to dist.ipfs.io (dist.ipfs.io)|209.94.78.1|:443... connected.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 7642422 (7.3M) [application/gzip]\n", "Saving to: ‘go-ipfs_v0.4.2_linux-amd64.tar.gz.4’\n", "\n", "\r go-ipfs_v 0%[ ] 0 --.-KB/s \rgo-ipfs_v0.4.2_linu 100%[===================>] 7.29M --.-KB/s in 0.04s \n", "\n", "2022-11-12 08:44:36 (206 MB/s) - ‘go-ipfs_v0.4.2_linux-amd64.tar.gz.4’ saved [7642422/7642422]\n", "\n", "go-ipfs/build-log\n", "go-ipfs/install.sh\n", "go-ipfs/ipfs\n", "go-ipfs/LICENSE\n", "go-ipfs/README.md\n", "Error: ipfs daemon is running. please stop it to run this command\n", "Use 'ipfs init --help' for information about this command\n", "Hello and Welcome to IPFS!\n", "\n", "██╗██████╗ ███████╗███████╗\n", "██║██╔══██╗██╔════╝██╔════╝\n", "██║██████╔╝█████╗ ███████╗\n", "██║██╔═══╝ ██╔══╝ ╚════██║\n", "██║██║ ██║ ███████║\n", "╚═╝╚═╝ ╚═╝ ╚══════╝\n", "\n", "If you're seeing this, you have successfully installed\n", "IPFS and are now interfacing with the ipfs merkledag!\n", "\n", " -------------------------------------------------------\n", "| Warning: |\n", "| This is alpha software. Use at your own discretion! |\n", "| Much is missing or lacking polish. There are bugs. |\n", "| Not yet secure. Read the security notes for more. |\n", " -------------------------------------------------------\n", "\n", "Check out some of the other files in this directory:\n", "\n", " ./about\n", " ./help\n", " ./quick-start <-- usage examples\n", " ./readme <-- this file\n", " ./security-notes\n", "nohup: redirecting stderr to stdout\n" ] } ], "source": [ "!wget https://dist.ipfs.io/go-ipfs/v0.4.2/go-ipfs_v0.4.2_linux-amd64.tar.gz\n", "!tar xvfz go-ipfs_v0.4.2_linux-amd64.tar.gz\n", "!mv go-ipfs/ipfs /usr/local/bin/ipfs\n", "!ipfs init\n", "!ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme\n", "!ipfs config Addresses.Gateway /ip4/127.0.0.1/tcp/8082\n", "!ipfs config Addresses.API /ip4/127.0.0.1/tcp/5002\n", "!nohup ipfs daemon > startup.log &" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "fnDSoKm44NQj", "outputId": "cc31251c-c29d-48bf-b282-22105cfa68b3", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\r62 B / 62 B 100.00 % 0\u001b[2K\radded QmYq9ipYf3vsj7iLv5C67BXZcpLHxZbvFAJbtj7aKN5qii helloworld.pl\n" ] } ], "source": [ "!ipfs add helloworld.pl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Copy the CID of the file which in this case is `QmYq9ipYf3vsj7iLv5C67BXZcpLHxZbvFAJbtj7aKN5qii`" ] }, { "cell_type": "markdown", "metadata": { "id": "1EthK_pazMcY" }, "source": [ "Since the data Uploaded To IPFS isn’t pinned or will be garbage collected\n", "\n", "The Data needs to be Pinned, Pinning is the mechanism that allows you to tell IPFS to always keep a given object somewhere, the default being your local node, though this can be different if you use a third-party remote pinning service.\n", "\n", "Using NFTup\n", "\n", "### [NFT.Storage](https://nft.storage/) (Recommneded Option)\n", "\n", "[Upload files and directories with NFTUp](https://nft.storage/docs/how-to/nftup/) \n", "\n", "To upload your dataset using NFTup just drag and drop your directory it will upload it to IPFS" ] }, { "cell_type": "markdown", "metadata": { "id": "pip7Jgwsy8dZ" }, "source": [ "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzsAAAFbCAYAAADyRJBcAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAJFfSURBVHhe7d0HfFNV+wfwX7onlF0Q0CJuUcBFi6jgFgVpAaV1IW7UVxF9/8pQGa4X4X1F3IirRcEWFTcKokhxgCA4ULQKSAt0UbpH+j/n3pPkJk3SpCQd6e+r90PuybizyXnuOee5psLh3etBREREREQUYILUv0RERERERAGFwQ4REREREQUkBjtERERERBSQGOwQEREREVFAYrBDREREREQBicEOEREREREFJAY7REREREQUkBjsEBERERFRQGKwQ0REREREAYnBDhERERERBSQGO0REREREFJAY7BARERERUUBisENERERERAGJwQ4REREREQUkBjtERERERBSQGOwQEREREVFAYrBDREREREQByVQ4vHu9etyom0JOxIlHHanmbIpztuP8vK1IjAtVJe1T5t5KrD1yKPr36a1KGvfdtp9xf8UvOD4mRJX41r31Cehz/Elqrn34+Y8cPHRwM+LDG4/lN5bUYGHsiRh8/LGqhJzJ3f4THjXvUHNEREREbYNXwc5Tx47Cg8+8qOZsdu7ciafuuAFn7vwOZ3cKU6Xtz7v7q9Bz3lu48MILVUnj/vvvu3Hamtf8FuzcYz4CL3/xjZprH2bcfD1St630ONj545KbcPOsx1QJOXPreUPxCIMdIiIiamN80o2tb9++uPeF1/Hd0cOwqqBalRIREREREbUcn43Z6dGjB6Y+9yp+GXg+PsivUqVEREREREQtw6cJCjp16oSpzyzB7sTRWLGfAQ8REREREbUcr4KdOvWvO9HR0Zi6aDGKz52AZQVmVdo+1Jo9Hv5kVef9W7xS6+fPb428Pes8Oa/bu/Z4HhEREZFNQY0Z95Z2QVpFX6wvrlGl3pHvk++XnyM/rzl4FewUwbMaT0hICKb891nUXnI13ij2aeNRqyYHu3srv74ef1T4r7q9V3x+e1MsztN91Z79Af1aVot9TQhS25s8r0NIIiIiChQyMHkOh2HMg//BooxleP/wRK8DHvl6+T75fvk58vOaI+DxKhIJDTapR56Z/Oh8RIy5AUtKwlVJYAs2ebd/pMgw79/jjXYY6yA4yLt9Gh3h32MQCNrjeURE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)" ] }, { "cell_type": "markdown", "metadata": { "id": "XX_26vGczhUZ" }, "source": [ "Running on bacalhau\n", "\n", "We will use the official [swipl docker image](https://hub.docker.com/_/swipl/)\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "8Rt_B9bjEPlC", "outputId": "5fa4c875-3d83-4a13-88b5-f3a80844f813", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Your system is linux_amd64\n", "No BACALHAU detected. Installing fresh BACALHAU CLI...\n", "Getting the latest BACALHAU CLI...\n", "Installing v0.3.11 BACALHAU CLI...\n", "Downloading https://github.com/filecoin-project/bacalhau/releases/download/v0.3.11/bacalhau_v0.3.11_linux_amd64.tar.gz ...\n", "Downloading sig file https://github.com/filecoin-project/bacalhau/releases/download/v0.3.11/bacalhau_v0.3.11_linux_amd64.tar.gz.signature.sha256 ...\n", "Verified OK\n", "Extracting tarball ...\n", "NOT verifying Bin\n", "bacalhau installed into /usr/local/bin successfully.\n", "Client Version: v0.3.11\n", "Server Version: v0.3.11\n" ] } ], "source": [ "!curl -sL https://get.bacalhau.org/install.sh | bash" ] }, { "cell_type": "markdown", "metadata": { "id": "P1Hoiqf10hr_" }, "source": [ "Command\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "0sToMfZa0kqq", "tags": [ "skip-execution" ] }, "outputs": [], "source": [ "%%bash --out job_id\n", "bacalhau docker run \\\n", "-v QmYq9ipYf3vsj7iLv5C67BXZcpLHxZbvFAJbtj7aKN5qii:/helloworld.pl \\\n", "--wait \\\n", "--id-only \\\n", "swipl \\\n", " -- swipl -q -s helloworld.pl -g hello_world" ] }, { "cell_type": "markdown", "metadata": { "id": "6CbHWnN009Rw" }, "source": [ "then we will mount the script to the container using the -v flag\n", "\n", "-v < CID >:/< name-of-the-script >\n", "\n", "Swipl flag\n", "\n", "-q running in quiet mode\n", "\n", "-s load file as a script in this case we want to run the script helloworld.pl\n", "\n", "-g is the name of the function you want to execute in this case its hello_world\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Gg6riPesa5BN", "outputId": "7ad204f8-ba7d-47b3-b729-dd1ba5666d5d", "tags": [ "skip-execution", "remove_cell" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "env: JOB_ID=ddd22db1-61c7-4302-bbe2-f38f8ffa2f44\n" ] } ], "source": [ "%env JOB_ID={job_id}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "q0pc73fqa5BO", "outputId": "96c40b17-39b0-42db-8e8b-42e7a370311e", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[92;100m CREATED \u001b[0m\u001b[92;100m ID \u001b[0m\u001b[92;100m JOB \u001b[0m\u001b[92;100m STATE \u001b[0m\u001b[92;100m VERIFIED \u001b[0m\u001b[92;100m PUBLISHED \u001b[0m\n", "\u001b[97;40m 22-11-12-08:00:51 \u001b[0m\u001b[97;40m ddd22db1-61c7-4302-bbe2-f38f8ffa2f44 \u001b[0m\u001b[97;40m Docker swipl swipl -q -s helloworld.pl -g hello_world \u001b[0m\u001b[97;40m Completed \u001b[0m\u001b[97;40m \u001b[0m\u001b[97;40m /ipfs/QmYnaUZLWmbRTJzpx6kgxoAVT3ZAmhqWY6qWZm33v8PjNm \u001b[0m\n" ] } ], "source": [ "%%bash\n", "bacalhau list --id-filter ${JOB_ID} --wide" ] }, { "cell_type": "markdown", "metadata": { "id": "wElIl4UYa5BO" }, "source": [ "Where it says \"Completed\", that means the job is done, and we can get the results.\n", "\n", "To find out more information about your job, run the following command:\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "gRgrNAm7a5BO", "tags": [ "skip-execution" ] }, "outputs": [], "source": [ "%%bash\n", "bacalhau describe ${JOB_ID}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "duvEDPr-a5BO", "outputId": "b90c0d5f-9cf9-49e0-e7ac-ef55fd262891", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fetching results of job 'ddd22db1-61c7-4302-bbe2-f38f8ffa2f44'...\n", "Results for job 'ddd22db1-61c7-4302-bbe2-f38f8ffa2f44' have been written to...\n", "results\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2022/11/12 08:01:59 failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details.\n" ] } ], "source": [ "%%bash\n", "rm -rf results && mkdir -p results\n", "bacalhau get $JOB_ID --output-dir results" ] }, { "cell_type": "markdown", "metadata": { "id": "YZEeFzMEa5BO" }, "source": [ "Viewing the outputs" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zhk8g_LMa5BO", "outputId": "dc11348a-7dc4-451c-d5b3-5c218c7076a4", "tags": [ "skip-execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello World\n" ] } ], "source": [ "%%bash\n", "cat results/combined_results/stdout" ] } ], "metadata": { "colab": { "collapsed_sections": [], "provenance": [] }, "kernelspec": { "display_name": "Python 3.10.6 64-bit", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.10.6" }, "vscode": { "interpreter": { "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" } } }, "nbformat": 4, "nbformat_minor": 0 }