{"id":10993,"date":"2024-08-16T00:57:00","date_gmt":"2024-08-15T23:57:00","guid":{"rendered":"http:\/\/rainbowbreeze.it\/?p=10993"},"modified":"2024-08-16T01:15:07","modified_gmt":"2024-08-16T00:15:07","slug":"serving-gemma-2b-for-free-using-google-colab","status":"publish","type":"post","link":"https:\/\/rainbowbreeze.it\/wordpress\/serving-gemma-2b-for-free-using-google-colab\/","title":{"rendered":"Serving Gemma 2B for free using Google Colab"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The free tier of Google Colab runtime, powered only by a CPU, is enough to successfully run <a href=\"https:\/\/huggingface.co\/google\/gemma-2b\">Google&#8217;s Gemma 2B parameters model<\/a> and prompt it using the Colab UI.<br>In addition, it&#8217;s possible to set up the Colab to serve the model, so it can be consumed from anywhere via a normal REST call.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Colab with all the instructions is <a href=\"https:\/\/colab.research.google.com\/drive\/1PYibBP3TjxAWuUdY0kQU6xWfh-k6RArb#scrollTo=YuulwOQkzKF1\">here<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Install Ollama in Colab notebook<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>!curl -fsSL https:\/\/ollama.com\/install.sh | sh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This command installs <a href=\"https:\/\/ollama.com\/\">Ollama<\/a> on the notebook.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Expose Ollama via a Cloudflare tunnel<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In order to &#8220;expose&#8221; the Ollama instance installed in the Colab notebook to the external world, a  Cloudflare Tunnel is created, using the <a href=\"https:\/\/github.com\/cloudflare\/cloudflared\">official client<\/a>. The following lines install the required packages:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>!wget https:\/\/github.com\/cloudflare\/cloudflared\/releases\/latest\/download\/cloudflared-linux-amd64.deb\n!dpkg -i cloudflared-linux-amd64.deb<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Create the tunnel and capture the TryCloudflare subdomain<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of adding a subdomain to a registered Cloudflare&#8217;s account, a random subdomain is generated by <a href=\"https:\/\/developers.cloudflare.com\/cloudflare-one\/connections\/connect-networks\/do-more-with-tunnels\/trycloudflare\/\">TryCloudflare<\/a>. No registration required.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The following code exists for two purposes: start the Cloudflare tunnel as soon as Ollama is ready to serve, and return the random subdomain created by TryCloudflare.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import os\n# Set OLLAMA_HOST to specify bind address\n# https:\/\/github.com\/ollama\/ollama\/blob\/main\/docs\/faq.md#setting-environment-variables-on-linux\nos.environ.update({'OLLAMA_HOST': '0.0.0.0'})\n\nimport subprocess\nimport threading\nimport time\nimport socket\n\ndef iframe_thread(port):\n    while True:\n        time.sleep(0.5)\n        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        result = sock.connect_ex(('127.0.0.1', port))\n        if result == 0:\n            break\n        sock.close()\n\n    p = subprocess.Popen(&#91;\"cloudflared\", \"tunnel\", \"--url\", f\"http:\/\/127.0.0.1:{port}\"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n    for line in p.stderr:\n        l = line.decode()\n        if \"trycloudflare.com \" in l:\n            print(\"\\n\\n\\n\\n\\n\")\n            print(\"running ollama server\\n\\n\", l&#91;l.find(\"http\"):], end='')\n            print(\"\\n\\n\\n\\n\\n\")\n\nthreading.Thread(target=iframe_thread, daemon=True, args=(11434,)).start()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After setting some enviromental variables, a <code>iframe_thread<\/code> function is defined. In the function, a <code>while True<\/code> loop waits till the Ollama server is up and running. Once this happen, the <code>subprocess.Popen<\/code> creates the Cloudflare tunnel pointing to the local Ollama installation, using the command <code>cloudflared<\/code>, and prints the <em>xxxx.trycloudflare.com<\/em> randomly generated subdomain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The last line of code lauches the <code>iframe_thread<\/code>  as a background <code>Thread<\/code>. The wait for being connected with the Ollama server starts.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Launch the Ollama server<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">At this point, everything is ready to launch the Ollama server<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>!ollama serve<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Colab will start the Ollama server, and the previously created thread, which was waiting for this to happen, quits from the <code>while<\/code> loop, creates the tunnel and print the subdomain. Looking at the output of this Colab block something similar will appear:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Couldn't find '\/root\/.ollama\/id_ed25519'. Generating new private key.\nYour new public key is: \n\nssh-ed25519 blablablabla\n\n2024\/08\/15 21:29:34 routes.go:1125: INFO server config env=\"map&#91;CUDA_VISIBLE_DEVICES: GPU_DEVICE_ORDINAL: HIP_VISIBLE_DEVICES: HSA_OVERRIDE_GFX_VERSION: OLLAMA_DEBUG:false OLLAMA_FLASH_ATTENTION:false OLLAMA_HOST:http:\/\/0.0.0.0:11434 OLLAMA_INTEL_GPU:false OLLAMA_KEEP_ALIVE:5m0s OLLAMA_LLM_LIBRARY: OLLAMA_MAX_LOADED_MODELS:0 OLLAMA_MAX_QUEUE:512 OLLAMA_MODELS:\/root\/.ollama\/models OLLAMA_NOHISTORY:false OLLAMA_NOPRUNE:false OLLAMA_NUM_PARALLEL:0 OLLAMA_ORIGINS:&#91;http:\/\/localhost https:\/\/localhost http:\/\/localhost:* https:\/\/localhost:* http:\/\/127.0.0.1 https:\/\/127.0.0.1 http:\/\/127.0.0.1:* https:\/\/127.0.0.1:* http:\/\/0.0.0.0 https:\/\/0.0.0.0 http:\/\/0.0.0.0:* https:\/\/0.0.0.0:* app:\/\/* file:\/\/* tauri:\/\/*] OLLAMA_RUNNERS_DIR: OLLAMA_SCHED_SPREAD:false OLLAMA_TMPDIR: ROCR_VISIBLE_DEVICES:]\"\n&#91;...]\n\n\nrunning ollama server\n\n <strong>https:\/\/sand-commerce-fields-danger.trycloudflare.com<\/strong>                                     <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Bingo! The address <strong>https:\/\/sand-commerce-fields-danger.trycloudflare.com<\/strong> is the url to use to reach our Ollama-on-Colab instance, the <em>&lt;your_cloudflare_subdomain><\/em> in the following snippets.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Set up Ollama using API calls<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Last, but not the least, Ollama need to download the Gemma 2B model. From this point ongoing, while the Colab notebook is busy keeps running the Ollama server, the rest of the interaction happen via <a href=\"https:\/\/github.com\/ollama\/ollama\/blob\/main\/docs\/api.md\">Ollama API<\/a>, available via the newly created Cloudflare tunnel. <br>From any command line shell available (<em>a local computer, a mobile device, etc<\/em>) these two commands need to be launched (<em>only the first one is really mandatory, the second one is useful to improve performances<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl &lt;your_cloudflare_subdomain>\/api\/pull -d '{ \"name\": \"gemma:2b\" }'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This call instructs Ollama to download the <a href=\"https:\/\/ollama.com\/library\/gemma:2b\">Gemma 2B model<\/a> via the <code>pull<\/code> API endpoint.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl &lt;your_cloudflare_subdomain>\/api\/generate -d '{\"model\": \"gemma:2b\", \"keep_alive\": -1}'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This call instructs Ollama to keep the gemma:2b model loaded in memory, instead of discarding it after 5 minutes of non usage (<em>the default behaviour<\/em>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ask question to Gemma 2B<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s time to ask the first question to Gemma:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl &lt;your_cloudflare_subdomain>\/api\/generate -d '{\"model\": \"gemma:2b\", \"stream\":false, \"prompt\": \"Create a 10 line poem about love, with rhyming couplets\"}'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>generate<\/code> API endpoint generates a response for a given prompt with a provided model.<br><code>\"stream\":false<\/code> waits for the model to elaborate the answer and returns it all at once, instead of a stream of tokens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To generate the reply, Gemma took approx 60 to 90 seconds. Not the quickest in the world, but all CPU powered! ;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The model&#8217;s reply is in the json message payload. To focus on it, and filter all the rest out, pipe the previous command to <code><a href=\"https:\/\/jqlang.github.io\/jq\/\">jq<\/a><\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl &lt;your_cloudflare_subdomain>\/api\/generate -d '{\"model\": \"gemma:2b\", \"stream\":false, \"prompt\": \"Create a 10 line poem about love, with rhyming couplets\"}'<em> | jq \".response\"<\/em><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Does it works forever?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Well, no. <a href=\"https:\/\/colab.research.google.com\/signup\">Google Colab FAQ <\/a>says the free notebook can run for at most 12 hours.<br>But no fear, once the notebook has been shut down, it&#8217;s just a matter to launch another &#8220;<em>Run all<\/em>&#8220;, wait to the new Cloudflare random subdomain, and restart the fun.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The free tier of Google Colab runtime, powered only by a CPU, is enough to successfully run Google&#8217;s Gemma 2B parameters model and prompt it using the Colab UI.In addition, it&#8217;s possible to set up the Colab to serve the model, so it can be consumed from anywhere via a normal REST call. Colab with &hellip; <a href=\"https:\/\/rainbowbreeze.it\/wordpress\/serving-gemma-2b-for-free-using-google-colab\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Serving Gemma 2B for free using Google Colab<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[520],"tags":[895,896],"class_list":["post-10993","post","type-post","status-publish","format-standard","hentry","category-dev","tag-genai","tag-llm"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Serving Gemma 2B for free using Google Colab - Rainbowbreeze<\/title>\n<meta name=\"description\" content=\"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Serving Gemma 2B for free using Google Colab - Rainbowbreeze\" \/>\n<meta property=\"og:description\" content=\"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel\" \/>\n<meta property=\"og:url\" content=\"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/\" \/>\n<meta property=\"og:site_name\" content=\"Rainbowbreeze\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-15T23:57:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-16T00:15:07+00:00\" \/>\n<meta name=\"author\" content=\"Alfredo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rainbowbreeze\" \/>\n<meta name=\"twitter:site\" content=\"@rainbowbreeze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alfredo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/\"},\"author\":{\"name\":\"Alfredo\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"headline\":\"Serving Gemma 2B for free using Google Colab\",\"datePublished\":\"2024-08-15T23:57:00+00:00\",\"dateModified\":\"2024-08-16T00:15:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/\"},\"wordCount\":594,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"keywords\":[\"GenAI\",\"LLM\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/\",\"name\":\"Serving Gemma 2B for free using Google Colab - Rainbowbreeze\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#website\"},\"datePublished\":\"2024-08-15T23:57:00+00:00\",\"dateModified\":\"2024-08-16T00:15:07+00:00\",\"description\":\"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/serving-gemma-2b-for-free-using-google-colab\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/rainbowbreeze.it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serving Gemma 2B for free using Google Colab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#website\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/\",\"name\":\"Rainbowbreeze\",\"description\":\"Alfredo Morresi&#039;s digital harbor\",\"publisher\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/rainbowbreeze.it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/#\\\/schema\\\/person\\\/00e63c64a3939938a7467e3aaf54f4cf\",\"name\":\"Alfredo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"url\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"contentUrl\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\",\"width\":700,\"height\":700,\"caption\":\"Alfredo\"},\"logo\":{\"@id\":\"https:\\\/\\\/rainbowbreeze.it\\\/wordpress\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/rainbowbreeze_profile_700px.jpg\"},\"description\":\"79ers, Italian, with a passion for creating environments in which great ideas can happen and people feel empowered, thanks to community dynamics and technological innovation. I also love nature, open-source, running on the beach, snowboarding and Tiramisu\u2019\",\"sameAs\":[\"https:\\\/\\\/rainbowbreeze.it\\\/\",\"https:\\\/\\\/www.instagram.com\\\/rainbowbreez3\\\/\",\"https:\\\/\\\/linkedin.com\\\/in\\\/alfredomorresi\",\"https:\\\/\\\/x.com\\\/rainbowbreeze\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Serving Gemma 2B for free using Google Colab - Rainbowbreeze","description":"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/","og_locale":"en_US","og_type":"article","og_title":"Serving Gemma 2B for free using Google Colab - Rainbowbreeze","og_description":"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel","og_url":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/","og_site_name":"Rainbowbreeze","article_published_time":"2024-08-15T23:57:00+00:00","article_modified_time":"2024-08-16T00:15:07+00:00","author":"Alfredo","twitter_card":"summary_large_image","twitter_creator":"@rainbowbreeze","twitter_site":"@rainbowbreeze","twitter_misc":{"Written by":"Alfredo","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/#article","isPartOf":{"@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/"},"author":{"name":"Alfredo","@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"headline":"Serving Gemma 2B for free using Google Colab","datePublished":"2024-08-15T23:57:00+00:00","dateModified":"2024-08-16T00:15:07+00:00","mainEntityOfPage":{"@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/"},"wordCount":594,"commentCount":1,"publisher":{"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"keywords":["GenAI","LLM"],"articleSection":["Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/","url":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/","name":"Serving Gemma 2B for free using Google Colab - Rainbowbreeze","isPartOf":{"@id":"https:\/\/rainbowbreeze.it\/#website"},"datePublished":"2024-08-15T23:57:00+00:00","dateModified":"2024-08-16T00:15:07+00:00","description":"How to use Google Colab to instantiate for free a Gemma:2b LLM and serve it everywhere using Cloudflare tunnel","breadcrumb":{"@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/rainbowbreeze.it\/serving-gemma-2b-for-free-using-google-colab\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/rainbowbreeze.it\/"},{"@type":"ListItem","position":2,"name":"Serving Gemma 2B for free using Google Colab"}]},{"@type":"WebSite","@id":"https:\/\/rainbowbreeze.it\/#website","url":"https:\/\/rainbowbreeze.it\/","name":"Rainbowbreeze","description":"Alfredo Morresi&#039;s digital harbor","publisher":{"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/rainbowbreeze.it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/rainbowbreeze.it\/#\/schema\/person\/00e63c64a3939938a7467e3aaf54f4cf","name":"Alfredo","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","url":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","contentUrl":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg","width":700,"height":700,"caption":"Alfredo"},"logo":{"@id":"https:\/\/rainbowbreeze.it\/wordpress\/wp-content\/uploads\/2021\/03\/rainbowbreeze_profile_700px.jpg"},"description":"79ers, Italian, with a passion for creating environments in which great ideas can happen and people feel empowered, thanks to community dynamics and technological innovation. I also love nature, open-source, running on the beach, snowboarding and Tiramisu\u2019","sameAs":["https:\/\/rainbowbreeze.it\/","https:\/\/www.instagram.com\/rainbowbreez3\/","https:\/\/linkedin.com\/in\/alfredomorresi","https:\/\/x.com\/rainbowbreeze"]}]}},"_links":{"self":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts\/10993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/comments?post=10993"}],"version-history":[{"count":0,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/posts\/10993\/revisions"}],"wp:attachment":[{"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/media?parent=10993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/categories?post=10993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rainbowbreeze.it\/wordpress\/wp-json\/wp\/v2\/tags?post=10993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}