{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "3Czr6kx-iG0f"
   },
   "source": [
    "## If you are not viewing this notebook in Colab already, open this link:\n",
    "\n",
    "https://colab.research.google.com/github/dbamman/anlp25/blob/main/0.setup/Colab_Intro.ipynb"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "LHwApS9faNtL"
   },
   "source": [
    "# What is Colab?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "x5OxnvOFiPW-"
   },
   "source": [
    "* Colab is a free [Jupyter Notebook](https://jupyter.org/)\n",
    "environment hosted by Google that allows you to develop and run code and analyze data using computing resources in the cloud.  In this class, we'll typically use it for programming assignments in Python.\n",
    "\n",
    "\n",
    "* Colab Notebooks (like this one) consist of \"Cells\" that help organize code and text. From within Colab, you can add a Code Cell or a Text Cell by clicking the \"+ Code\" or \"+ Text\" buttons on the top left.\n",
    "\n",
    "\n",
    "* Google provides lots more details and tips about Colab in their [tutorials](https://colab.research.google.com/notebooks/welcome.ipynb).  If you are new to Colab, you might find these tutorials helpful to get up to speed.\n",
    "\n",
    "\n",
    "* To execute the code in a cell, use the key-command `shift+enter`. Try that out on the code cell below\n",
    "    * Note: the first time you try this, Colab might warn you that **\"This notebook was not authored by Google.\"** This is okay, just accept the warning and continue."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "G8xrN0Fp4W8Z",
    "outputId": "981f069a-11fb-4678-bf95-39857227c938"
   },
   "outputs": [],
   "source": [
    "5 + 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "uSU4zkGNk2d7"
   },
   "source": [
    "# Creating a Colab Notebook"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "aX9E3gEQk9Ww"
   },
   "source": [
    "* You need to be signed into a Google account in order to create, edit, and save Colab Notebooks.  You can create a new Notebook and find your saved Notebooks by going to https://colab.research.google.com/ while logged into your Google account.\n",
    "\n",
    "\n",
    "* We recommend that you use your Berkeley Gmail account rather than a personal Gmail for this class in order to avoid confusion.  When viewing a notebook, you can make sure that you're using the right Gmail account by clicking on your profile icon at the top right, and switch accounts if necessary.\n",
    "\n",
    "\n",
    "* Saved notebooks will then be stored in your account on Google Drive.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Adp_2QRGnf6q"
   },
   "source": [
    "# Viewing a Colab hosted on Github"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "qwEEzj12nnhT"
   },
   "source": [
    "* In addition to Google Drive, Colab Notebooks can also be opened in the browser if they are stored on Github. For this class, assignments or examples will be posted on the course Github. Jupyter Notebooks are files with the extension \".ipynb\".\n",
    "\n",
    "\n",
    "* If a Jupyter Notebook is posted on Github, you can open it in Colab by copying the web address address of the '.ipynb' file and pointing your browser to `https://colab.research.google.com/github/{github-path-to-notebook}`\n",
    "\n",
    "\n",
    "* For example, this notebook can be opened in Colab via `https://colab.research.google.com/github/dbamman/anlp25/blob/main/0.setup/Colab_Intro.ipynb`\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "LR_mOI-c-NCi"
   },
   "source": [
    "# Making and saving changes\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "v70WXknW-IUC"
   },
   "source": [
    "\n",
    "\n",
    "* Once you've opened a Notebook in Colab, you can run the code and make edits. To save your changes, click on File->Save in the menu.\n",
    "\n",
    "* **If you are editing a copy of a Colab that you opened from Github, your edits will only be saved once you save a copy in your Google Drive.** To do this, click on File->Save a copy in Drive.\n",
    "  * By default, this should save the notebook into `My Drive/Colab Notebooks` on your Google Drive. You can find the exact location of your notebook (and move it, if you'd like) by clicking on File->Locate in Drive.\n",
    "\n",
    "* In order to get started on an assigment, you'll want to open the starter notebook from Github in Colab and then save a copy into your Google Drive so that you can make changes to complete the assignment."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Q8B8Motvs7_o"
   },
   "source": [
    "# What is a Runtime?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Eg1Gb4jDtAqQ"
   },
   "source": [
    "* Each time you open a Notebook in Colab, you are actually connecting to a computer (a server running the Linux operating system) in the Cloud, hosted by Google. When you execute your code, it's actually running on that computer and sending back any results to display in your browser.  In Colab, this connection between a Google server and your browser is called a 'Runtime'.\n",
    "\n",
    "\n",
    "* Because Google provides these servers free to Colab users, running code on Colab lets you take advantage of powerful hardware to run computations faster than you could on a laptop, for example.\n",
    "\n",
    "\n",
    "* Because you need to connect to a \"Runtime\" in order to use Colab, each time you connect, you'll need to re-run setup code each time you re-connect (such as installing Python libraries or downloading data). This can take a few minutes, but it's a necessary trade-off in order to be able to use these free computational resources."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "4SXW_o2IspPO"
   },
   "source": [
    "# Downloading Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "F6y4nB-mssDQ"
   },
   "source": [
    "* To work with data in Colab, we need to download the data to the computer you're connecting to in your Runtime. Data can be downloaded using the `!wget` command or by connecting to files on Google Drive.\n",
    "\n",
    "\n",
    "* When possible, data for course assignments will be uploaded to the course Github and then can be downloaded from within Colab. Make sure to download the 'raw' content of the file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "tTDnmG42lxKS",
    "outputId": "686167fe-0ebd-426d-e2dd-a115457dc153"
   },
   "outputs": [],
   "source": [
    "!wget --no-check-certificate https://raw.githubusercontent.com/dbamman/anlp25/master/0.setup/example_data.txt\n",
    "!ls"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Wdjq8WTp3teF"
   },
   "source": [
    "* Let's open a file from the course Github using Python and print out the contents."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "oRCQFiJe3kiQ",
    "outputId": "f41eb2d7-22d4-4e1b-e7ea-30da62794a41"
   },
   "outputs": [],
   "source": [
    "open('example_data.txt').read().split('\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* You can also see the `example_data.txt` in your file explorer on the left sidebar.\n",
    "\n",
    "  <img width=\"200px\" src='data:image/png;base64,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nOc888wz5utf/3qf8v3iF78I7rdu3TqjKZv0fJ7nZeXx6quvmnnz5hndI5yKCVQVWOtaBY3RtH79enP++efnDAKj5xazrWmyvvKVrwR/SETP1x8UslNQqZRr1P873/lO87GPfczstttu0ctNMpk0l112mfnjH/+YObZo0SLzxje+MbMd/aI/YObPf72rSbm/g+h92UYAAQQQMMZraZ7u+6m02Zykj2o9/SByBYL1FKzmKl89+ZUbqGrqpZkzZxZ8FNV4KvB69tlnM+ephlL9F1VLVyhpHtJPfepTQS2mO+9LX/qSOeqoo9xmwc/nnnvO7L333kHtaL4TV65caT796U9nHXaBatbOHBvpdNp861vfMn/6058yR/sLVFWjq+A4V2DvbqIaSAVzf//7392usj4VpMtZtdzFpGigOm7cOHPOOef0e+mPf/xjc9NNNwXnlRKoVvI76LdQnIAAAghshQLetKZZfsKkzUuJ7GbFrdCirh45XyBYL8FqvvLVC2I5gaqa0q+77rrMIzz11FPmxhtvNGraHTNmTBDAqjZPacWKFea8887LnKsauokTJwbbvu+bO+64w9x1111G30866STT1taWOfenP/1pcF+3IxqoqmbztttuC2pQ3/a2t5muri7zlre8xZ0efCqgvP32280jjzxidtllFzN9+vTMJPc6QTWujz/+eOaaaKCqbgL33HOPUV7jx48P/udOVjD9gQ98wG0G3RcKzaP63//930EZdIGa3vV8//jHP4yCQtUOu9pIdTn46Ec/mrlvOV8+8pGPmBNPPDFzqWozf//73weBf2NjY5Bn5qD9Eg5UFUgvXrw4U9u9du1as3DhwqDLhLoAnHXWWVnPMWfOnOBWegc77LBDUEv78Y9/PNgnfzfqX90GVFOtVMnvILgB/0EAAQQQyBLw2sbP9nttqLox/ULWATYGVqBQIFgPwWqh8g2s3JbcywlUFVR96EMfCm6gRQPUjB9O6nP61a9+NdilGkI1n7t01VVXZYJJ1cDdcsst7lDwecYZZ5j29vbguwJgdR9wKRqovve9782qcVUt4tVXXx00+btrVKOrfpnhFA4Yb7311iAIc8fDgaqCbwWT4aQgTzW9Ln372982Dz/8cLBZqEZVK1addtppwXkKUhWohVeCUl/R733ve5ngULWqCi7LSXJQYOn+WNAKWT/60Y+ybnXc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'>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "jIIPppLCXPLj"
   },
   "source": [
    "# Enabling GPU\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "_WGIRKTQaD47"
   },
   "source": [
    "* For some assignments in this class, you will want to enable Colab's GPU, which allows neural models to train much faster (~20x!) than on a CPU.\n",
    "\n",
    "\n",
    "* GPU is not enabled by default on Colab.  To do so, perform the following:\n",
    "    \n",
    "    * Go to Runtime -> Change runtime type.\n",
    "\n",
    "    * Under \"Hardware Accelerator\", select one of the \"GPU\" options (e.g., \"T4 GPU\")\n",
    "\n",
    "\n",
    "* In order to confirm GPU is enabled, run the following command in your Colab notebook:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "a4mEXvEQaD48",
    "outputId": "38ac05bf-05f4-4cab-ed99-5568c0d40aae"
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "print(torch.cuda.is_available())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "w7jgBtSJaD4_"
   },
   "source": [
    "If the cell returns `True`, it means GPU is enabled. If it returns `False`, it means the GPU is not enabled.\n",
    "\n",
    "Let's see the difference in runtime when we do a matrix multiplication on the CPU compared to the GPU."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "oLO6-fCbaD4_",
    "outputId": "38ee7e5f-79a9-405b-d676-5592541a1d99"
   },
   "outputs": [],
   "source": [
    "%%timeit\n",
    "\n",
    "# By default, pytorch uses the CPU.\n",
    "mat_a = torch.rand((1024, 1024))\n",
    "mat_b = torch.rand((1024, 8192))\n",
    "\n",
    "torch.matmul(mat_a, mat_b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/"
    },
    "id": "MN3tYvCz8Ik_",
    "outputId": "2a175782-99e9-4f8e-bf5f-f6c9573eb33e"
   },
   "outputs": [],
   "source": [
    "%%timeit\n",
    "\n",
    "# By setting the device to `cuda`, we are doing these computations on the GPU.\n",
    "mat_a = torch.rand((1024, 1024), device=\"cuda\")\n",
    "mat_b = torch.rand((1024, 8192), device=\"cuda\")\n",
    "\n",
    "torch.matmul(mat_a, mat_b)"
   ]
  }
 ],
 "metadata": {
  "accelerator": "GPU",
  "colab": {
   "gpuType": "T4",
   "provenance": [],
   "toc_visible": true
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
