Skip to content

Instantly share code, notes, and snippets.

@nhira
Last active July 26, 2024 05:06
Show Gist options
  • Save nhira/ea4b93738aadb1111b2ee5868d56a22b to your computer and use it in GitHub Desktop.
Save nhira/ea4b93738aadb1111b2ee5868d56a22b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "6cb94fad-18c5-49c9-8150-477587595589",
"metadata": {},
"source": [
"# Use your notebook with the AI Hypercomputer"
]
},
{
"cell_type": "markdown",
"id": "2bbb2f5a-d40b-4c20-9d1b-94b333a45a48",
"metadata": {},
"source": [
"## Overview"
]
},
{
"cell_type": "markdown",
"id": "6ac3c6f0-8698-4949-ae36-5129a18d50f9",
"metadata": {},
"source": [
"Google shares its experience creating & operating AI experiences for billions of users at scale as the [AI Hypercomputer](https://cloud.google.com/solutions/ai-hypercomputer) architecture to help customers accelerate their AI journey. This architecture includes performance-optimized infrastructure, open-source software frameworks, and flexible consumption models.\n",
"\n",
"One of the challenges researchers face when working with contemporary models is the distributed programming involved to orchestrate work with a complex architecture. This notebook shows how the AI Hypercomputer architecture can help.\n"
]
},
{
"attachments": {
"8561558d-012e-460f-8c42-07bce794c497.png": {
"image/png": "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veXll19OT0+32Wy4BEM/VRvKyspWrVo1a9asOXPmLFiw4Ny5c72POXDgQFxc3Oeffz5//vx58+ZNnTr117/+tcPhwHsZhnn55ZenTp06f/78adOm/eY3v9Hr9e5zL1y4sGDBgnnz5mVlZd1+++2euwZ4dwDASJk1axZCqL6+flBndXd3p6SkvP766+4t+fn57piDq8mEhYX5PHf4EQYhtGvXrlmzZuXk5MycOXPFihUlJSXuXUaj8Y477sjOzp43b978+fM9d0GEAQCACQsyLwAAAPqDcy59jQ3pS05Ojkql2r9/v3vLoUOHFi9ejOvF4CfSDz74YG5u7vLly998802WZfFhzc3NGzdu1Gg033zzzVdffRUUFPTAAw/gfE1vr7322hNPPHHgwIFNmzYdPXp0586dePvvf//7jz766Kmnnvruu++2bt167ty5u+66Cxd9cDqdv/3tb2mafuedd/bt2zd58mTP9NCg7g4AGL6hRRilUjl//nzPCHPw4MGQkJDs7Gx3hNm2bdvixYtzc3OfffZZd4J1RCLMl19++cwzzyxduvTbb7/99NNPBQLBHXfc0dTUhPc+88wzZ8+effHFF/fv3//QQw8dOHDAfUGIMAAAMGFB5gUAAMBVHA6HzWaz2WydnZ3ffPPNG2+8ER0dPX369EFdhKKovLy8b7/9FqdUysrKLl++vHbtWrxXr9fr9Xo/P781a9YEBAS8/vrrmzdvxru2bdsmFou3bduWlpaWmZn5+uuvd3V17dmzx+dd/vjHP65ZsyY5Ofmxxx4LDQ09f/48QqixsXH37t0PPPDA3XffHRsbu2LFitdee62iomLfvn24y6TT6V5//fUlS5akpqY+9dRTnkU3B3V3AMAQuFwuHGFMJtPp06d/97vfCYXCvLy8wV5n7dq1tbW11dXVeOLPd999t2bNGpIkcYTB+ZeVK1dOnjz5s88+u+uuu3AsGn6E4Xl+y5YtM2bM2Lx5c1JSUlZW1gcffMCy7Ntvv40H7xw+fPihhx761a9+lZKScuuttz788MPuC0KEAQCACQvqvAAAALiKV7WFefPm/eEPf/Bc+XWA1q5d+89//vP06dOzZs06ePCgSqXKycnBu9577z29Xu+eC/D4449//PHH999/f2hoaEFBQURExA8//OC+jp+fX21trc9beFZJUKlUeEXbgoIChNCKFSvc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2tv69eu1Wm3/T2twKvYvf/kLruQ97oqKiu65556dO3f2tVQlGBeQeQEAAAAAAAAA4I1mkdM9G51AImq05ma4GJ7lrvzsJyYEw5vdkpiY6P6ZJMnAwECfizDabDaj0egeHOd0Ojs6OoKCgjynI4WFhd1yyy3erXW52tvbtVqt2GPq3IoVK3rforOzk+O43svMu1yu1tZWnxOivVgslq6urr5G8JnNZpPJFBISIhrANGGdTscwTEhICEnCMjvjADIvAAAAAAAAAAB8eHLnlcEjQgotSBeMUuplXzFTr+MQQgSBPnxAFh44iuU3Dhw48PDDDz/yyCMffPCB3W6/dOkSy7J//OMfd+/ejUfK5OTkbNmyBZdweu+991599dWzZ88GBga+8MILhw8ffvjhh1977TWLxUJR1MMPP7xp0yZ82YyMjF/84hd/+MMfjEbj9OnTN23adPLkyZMnT+IFCt555x33iJjdu3dv3rwZX2Hjxo3FxcWxsbFbt271aifHcZs3b96xYwfLsgqF4rbbbvPc29bW9vvf//6HH37gOI6iqDvuuOO5554jSXL69OlGoxEhdNtttykUipKSEoTQ6dOn8XJsuLb3s88+2zudBEYbpLsAAAAAAAAAAIw/kQCJxmRswMcff/zYY4+98cYbJElu3rx59+7dr7zySkFBwfvvv19cXIyXJ+tNp9Pt2rXrb3/72549exYuXLh169aysjKfR27btm327Nn79+/funVrS0vLn/70J7y9rKzs6aefzsjI+OSTT3bt2tXa2lpeXu7zCh9++OGHH354xx13fP3112+88UZ+fr57F8dx99xzT0NDw44dO06cOPHMM8/ggxFCn3zyyUsvvYQQevXVVz/77DNcmvfuu+8ODw8/cODA0aNHc3Nzn3nmmb6aDUYPjHkBAAAAAAAAADD+xMIxWmzm1VdfXbJkCf45Pj7+tddey8vLQwiFhoauXbv2iy++4Hm+99pkJEn+4x//wAsYPfvss4cOHSopKcnIyOh9/TvvvPORRx5BCKWkpBw9evSHH37A29977z2pVPr3v/9doVDgkjTZ2dk+W/juu+/OmjXrhRdewC8DAgLWr1+Pf7bZbMuXL8/JyZk2bRpC6N577921a9fx48fvueeepKSktrY2hFB0dHRycjJCqKen5/777//lL3+Ja9w8//zzX3/99Y8//uiz2WD0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MCIkLwAAAAAAANB1FBQU/OMf/+jRo8cPP/zg7+9fVFS0YcOG5cuXu7u7h4aGmro6Q7399tvV1dWGtFy2bJlQKDxw4ED7FwWPCKONAAAAAAAAoOtYt26dUqn89ttvw8PD7ezsgoODt2/fbm9vv3HjRp2WtbW19+7d0xmLxCktLb1//37T7SzLlpSUVFRUtLWq4uLiZk/IlZGfny+TybQ3DhgwYNSoUTot5XJ5QUGBTstmqVSqe/fu1dfXt7VOaA/o8wIAAAAAAAC6FCoSe1nBPWZo4u/WXl/bZxaqxP8b+jM9jN/LgXqcszU0NJw7d27atGmOjo6ajebm5tHR0SkpKSzLUhRFCFEqlatXr46NjVWpVNbW1v/v//2/sWPHPqgnM3PlypU3b94khPTu3XvDhg2anjLnz5//8MMP8/PzCSHe3t7r1q0LCwvTKaCmpmb27Nk1NTWxsbFCofDpp5+OiYlJTEy8c+cOISQ4OHjbtm2akUFlZWWrVq367bffWJY1MzN78cUX33nnHYZhCCHz588vLCw8ffo0IeSDDz44c+bMm2+++emnn9bV1TEM8+abby5btuy777778MMPuVN5e3v/+9//njdvHiFk8+bNX331VWNjIyFk+PDhn3zyibu7++O8qvCYkLwAAAAAAABAM87fUnIP+Azh83iPlYi07LcsVW6ZmhDCY8gLw/iPebb8/Hy5XO7n56ezffny5dpPf//998mTJ//000/19fXvvffeqlWrRo4cyefz7927Fx0dHRYW9uuvvyqVyo8++igmJua3334zNze/cePGa6+9FhUV9cUXXzAMs379+vnz5584ccLT01Nz2oaGhldffbWsrCw2NtbV1bWqqooQ8t13361evTo0NDQlJWXt2rXLly8/fPgw14Fl7ty5NTU1O3bs8PHxiY+P/+yzzxobGz/++OOmP1dZWdmhQ4e2b99ua2u7devWLVu2REVFTZkyZeDAgW+//Tafz//kk09cXV0JIYcPH968efO///3vsWPH3rlzZ8WKFYsXL/7pp58e84WFx4HkBQAAAAAAAExPYIyPp9zcKE5OTvqbBQQEbNq0iev/smDBgnfeeSc/P9/X13fr1q1CoXDr1q0WFhaEkI0bN0ZGRh47diw6Onr79u0ODg5btmzh8/mEkK1btz799NMnTpxYsGABd06ZTPb666/fvXv3wIED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7cMPP4wQevPNNzdt2hRwoEqlOnXqFEJo+/btr7/+ektLC94+evToN954Izc397qG0djYSBBEfHx8KN4TuLlB5gUAAAYTy6HdF72Hyul7CvgTk6mceCo7jjpWxegtLJ9HFKRTeIHYpk72j1+5WzpZDiGodgEDg2huII/uo4r2EVfqBnsswwjLkod3k4d3cwolO2MBO30em57drxc8fJk+Xk2vnMSfk8nLjCEzosmzdUxTJ8uniMlplEpGEAh1WLk//MfV0MFyHGRcAADDBE3Ta9eu/f777ykq+MqS2A8//OD/K4/HQwgVFRWtWbNm/vz5//d//6fVamtqal555ZV77rlnx44dsbGxvR/Dk08+KRQKv/jiixt4H2CYgMwLAAAMPpeX+78DnoPl1NLxvNHR5PRRlMlBysUERSKjnfv4kPdQOe24ViOYnrnd7p534K6nr+ZQ2HkojOHmGnB4eHjP3z4xwm6lDhwij+4jS88hPBelh52bGkjhAM2dufk47D28SBgN1JYvqC1fcMmjmIL5zOTZSCDqp4F4afSf497jVcyScbzceGpiMpWmJaUigk8hlxd9csizt4QOOhGp90Z4hLm5QkE/nVYmk/H5UI8JhhChUFhaWvrRRx899NBDPeyWk5PTdeN3331HUdS7774rEokQQpGRkX//+99nzpy5cePGtWvXBj2PyWRyOBxRUVEkeY2GWW63u62tTaFQyOXyrq86HA6j0ejL7zAM09LSIpVKFQpFz6cFQxxkXgAAYKioamPe283MGs1bkMNThBE0i3ZfpD/40XODd0SY2+02Go2hGCa4Wclksp4zL9TpY+qjByXnjl21tcebLt6Hb4VsfCMVUV/Nq6viff53KmucZ+JULvZOon8awTR0sP/40TM5lbd0PE8tIxgWHb7M/HWX2+QIQYTxer0GgyEUwwQ3K4lEApmXkYnl0MVGhu1TIImOIKP7bemAMWPGKBSKd999d8GCBcnJydd1LP7H7HK5cOYFIRQXF/fWW2/FxATplV5VVbV27dri4mL8kOPpp5++5557PvvssxdffBHvkJKS8qc//en++++nafqNN97YtGmTy+UiSXLOnDlvvPEGbkazc+fOxx577PHHH//444+dTmdVVRVFUZs3b3799df1ej1CaOrUqe+++65arQ7Fnw0YBJB5AQCAIYRh0f4ymuXQr6by6/Xs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"
}
},
"cell_type": "markdown",
"id": "dc85f2ac-b476-4bae-8df6-30c91c589ed7",
"metadata": {},
"source": [
"![Screenshot 2024-07-21 18.33.29.png](attachment:8561558d-012e-460f-8c42-07bce794c497.png)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "67ebe691-85eb-4b08-aaf1-19c89a88eb7f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>table {float:left}</style>\n"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%html \n",
"<style>table {float:left}</style>"
]
},
{
"cell_type": "markdown",
"id": "d02ca16e-5273-4879-ad03-afc35362d84a",
"metadata": {},
"source": [
"\n",
"### Performance-optimized infrastructure\n",
"For this example, we choose [Google Cloud TPU v5e](https://cloud.google.com/tpu/docs/v5e) as the accelerator. We also chose Google Kubernetes Engine (GKE) because it enables easy [TPU cluster management](https://cloud.google.com/kubernetes-engine/docs/concepts/tpus). A number of networking and storage enhancements (including Titanium offloads and Multislice training) make this all practical, but for brevity, we will only call out [Cloud Storage (GCS)](https://cloud.google.com/storage) and NFS Filestores. \n",
"\n",
"### Open software\n",
"The code in this notebook relies on [JAX](https://jax.readthedocs.io/en/latest/index.html), a Python library for high-performance numerical computing and large-scale machine learning with accelerators. JAX is integrated with the [OpenXLA compiler](https://github.com/openxla) so the software chooses the most effective implementation and model builders can focus on the math. The crux of the example relies on [MaxText](https://github.com/google/maxtext), a reference implementation for training, tuning, and inference with LLMs.\n",
"\n",
"To interact with the cluster, we use IPython Parallels and some [cell magic](https://ipyparallel.readthedocs.io/en/latest/tutorial/magics.html). IPython Parallels (ipyparallel) is a Python package and collection of CLI scripts for controlling clusters of IPython processes, built on the Jupyter protocol. _While the default settings were adequate for this example, you should review [ipyparallel security details](https://ipyparallel.readthedocs.io/en/latest/reference/security.html) before use in a production environment._\n",
"\n",
"### Flexible consumption options\n",
"In addition to Kaggle and Colab options, customers can also choose Spot VMs (preemptible), Cloud Batch, or Dynamic Workload Scheduler (DWS). For this exercise, we used ``--spot``."
]
},
{
"cell_type": "markdown",
"id": "ae066f9f-1feb-49e3-a75e-5c05e82ad717",
"metadata": {},
"source": [
"## Create the cluster\n",
"\n",
"Again, for brevity, we will mention the steps involved without getting into the details.\n",
"1. Setup custom networking and firewall rules for TPUs (specifically, ``mtu=8896``).\n",
"2. Use [XPK](https://github.com/google/xpk) (Accelerated Processing Kit) to create the GKE cluster.\n",
"3. Create a regional NFS Filestore instance and make it available to the cluster as a persistent volume.\n",
"4. Use MaxText to create a base container image; include ipyparallel before publishing the artifact.\n",
"5. Use [LeaderWorkerSet](https://github.com/kubernetes-sigs/lws) (LWS) to deploy the ipyparallel pods as a group.\n",
"\n",
"### XPK command \n",
"```\n",
"# illustrative example\n",
"python3 xpk/xpk.py cluster create \\\n",
"--cluster ${CLUSTER_NAME} \\\n",
"--tpu-type=v5litepod-16 \\\n",
"--num-slices=2 \\\n",
"--spot --project=${PROJECT_ID} --zone=${PROJECT_ZONE} \\\n",
"--default-pool-cpu-machine-type=n1-standard-16 \\\n",
"--custom-cluster-arguments='--network=mtu9k --subnetwork=mtu9k'\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "af3d36b4-3c53-4061-aafb-69647cce3cfd",
"metadata": {},
"source": [
"### Did it work?\n",
"If it all works out, you should see something like this:\n",
"```\n",
"$ kubectl get nodes\n",
"NAME STATUS ROLES AGE VERSION\n",
"gke-______________-default-pool-03f271f3-0m6z Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-______________-default-pool-03f271f3-cz31 Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-______________-default-pool-03f271f3-p883 Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-tpu-744783eb-0kh0 Ready <none> 2d5h v1.30.1-gke.1329003\n",
"gke-tpu-744783eb-35tz Ready <none> 2d5h v1.30.1-gke.1329003\n",
"gke-tpu-744783eb-647d Ready <none> 2d5h v1.30.1-gke.1329003\n",
"gke-tpu-744783eb-d0jk Ready <none> 2d5h v1.30.1-gke.1329003\n",
"gke-tpu-78fc01ba-dzvw Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-tpu-78fc01ba-mtw4 Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-tpu-78fc01ba-rnlh Ready <none> 2d6h v1.30.1-gke.1329003\n",
"gke-tpu-78fc01ba-v5zd Ready <none> 2d6h v1.30.1-gke.1329003\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "11b714ce-34e3-45d8-aa9e-18437c8ac07b",
"metadata": {},
"source": [
"```\n",
"$ kubectl get services\n",
"NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE\n",
"ipp ClusterIP ___.___.___.64 <none> 8888/TCP 114m\n",
"ipp-deployment ClusterIP None <none> <none> 114m\n",
"kubernetes ClusterIP ___.___.___.1 <none> 443/TCP 2d6h\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "29d4ce5c-1076-4731-acfe-09e702c5e7cc",
"metadata": {},
"source": [
"```\n",
"$ kubectl get pods\n",
"NAME READY STATUS RESTARTS AGE\n",
"ipp-deployment-0 2/2 Running 0 114m\n",
"ipp-deployment-0-1 1/1 Running 0 114m\n",
"ipp-deployment-0-2 1/1 Running 0 114m\n",
"ipp-deployment-0-3 1/1 Running 0 114m\n",
"ipp-deployment-0-4 1/1 Running 0 114m\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "1ae7c7a2-c54a-4ea3-a59b-300020286712",
"metadata": {},
"source": [
"### GKE and multi-host TPU slice node pool\n",
"A [multi-host TPU slice node pool](https://cloud.google.com/tpu/docs/tpus-in-gke#multi-host) is a node pool that contains two or more interconnected TPU VMs. Each VM has a TPU device connected to it. The TPUs in a multi-host slice are connected over a high speed interconnect (ICI). The following diagram shows an example of a v5litepod-16 (v5e) multi-host TPU slice. This slice has four TPU VMs. Each TPU VM has four TPU v5e chips and each TPU v5e chip has one TensorCore.\n",
"\n",
"![image.png](https://cloud.google.com/static/tpu/docs/images/kubernetes-diagram.png)\n"
]
},
{
"cell_type": "markdown",
"id": "1865bcbd-6010-45d5-9d69-cf3ffd0fecaa",
"metadata": {},
"source": [
"### TPU v5e system architecture\n",
"Each v5e chip contains one TensorCore. Each TensorCore has four matrix-multiply units (MXUs), a vector unit, and a scalar unit.\n",
"\n",
"| Key chip specifications | v5e values|\n",
"| :--- | :--- |\n",
"| Peak compute per chip (bf16) | 197 TFLOPs |\n",
"| Peak compute per chip (Int8) | 393 TFLOPs |\n",
"| HBM2 capacity and bandwidth | 16 GB, 819 GBps |\n",
"| Interchip Interconnect BW\t| 1600 Gbps |\n",
"\n",
"![image.png](https://cloud.google.com/static/tpu/docs/images/v5e-tensorcore.png) "
]
},
{
"cell_type": "markdown",
"id": "7a28f9c0-a2b2-4ef7-8941-b156560a7b1e",
"metadata": {},
"source": [
"## Confirm cluster connectivity\n",
"Let's try out ipyparallel to confirm we can interact with our instances (\"engines\") and the TPUs. Each of our ``ipp-deployment-0-?`` instances should have access to 4 TPU v5e chips."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "7c974580-6f10-449f-afe9-7d64a6a6c7b9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: ipyparallel in /opt/conda/lib/python3.11/site-packages (8.8.0)\n",
"Requirement already satisfied: decorator in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (5.1.1)\n",
"Requirement already satisfied: entrypoints in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (0.4)\n",
"Requirement already satisfied: ipykernel>=4.4 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (6.25.2)\n",
"Requirement already satisfied: ipython>=4 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (8.16.1)\n",
"Requirement already satisfied: jupyter-client>=5 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (8.4.0)\n",
"Requirement already satisfied: psutil in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (5.9.5)\n",
"Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (2.8.2)\n",
"Requirement already satisfied: pyzmq>=18 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (25.1.1)\n",
"Requirement already satisfied: tornado>=5.1 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (6.3.3)\n",
"Requirement already satisfied: tqdm in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (4.66.1)\n",
"Requirement already satisfied: traitlets>=4.3 in /opt/conda/lib/python3.11/site-packages (from ipyparallel) (5.11.2)\n",
"Requirement already satisfied: comm>=0.1.1 in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (0.1.4)\n",
"Requirement already satisfied: debugpy>=1.6.5 in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (1.8.0)\n",
"Requirement already satisfied: jupyter-core!=5.0.*,>=4.12 in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (5.4.0)\n",
"Requirement already satisfied: matplotlib-inline>=0.1 in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (0.1.6)\n",
"Requirement already satisfied: nest-asyncio in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (1.5.8)\n",
"Requirement already satisfied: packaging in /opt/conda/lib/python3.11/site-packages (from ipykernel>=4.4->ipyparallel) (23.2)\n",
"Requirement already satisfied: backcall in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (0.2.0)\n",
"Requirement already satisfied: jedi>=0.16 in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (0.19.1)\n",
"Requirement already satisfied: pickleshare in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (0.7.5)\n",
"Requirement already satisfied: prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30 in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (3.0.39)\n",
"Requirement already satisfied: pygments>=2.4.0 in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (2.16.1)\n",
"Requirement already satisfied: stack-data in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (0.6.2)\n",
"Requirement already satisfied: pexpect>4.3 in /opt/conda/lib/python3.11/site-packages (from ipython>=4->ipyparallel) (4.8.0)\n",
"Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.11/site-packages (from python-dateutil>=2.1->ipyparallel) (1.16.0)\n",
"Requirement already satisfied: parso<0.9.0,>=0.8.3 in /opt/conda/lib/python3.11/site-packages (from jedi>=0.16->ipython>=4->ipyparallel) (0.8.3)\n",
"Requirement already satisfied: platformdirs>=2.5 in /opt/conda/lib/python3.11/site-packages (from jupyter-core!=5.0.*,>=4.12->ipykernel>=4.4->ipyparallel) (3.11.0)\n",
"Requirement already satisfied: ptyprocess>=0.5 in /opt/conda/lib/python3.11/site-packages (from pexpect>4.3->ipython>=4->ipyparallel) (0.7.0)\n",
"Requirement already satisfied: wcwidth in /opt/conda/lib/python3.11/site-packages (from prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30->ipython>=4->ipyparallel) (0.2.8)\n",
"Requirement already satisfied: executing>=1.2.0 in /opt/conda/lib/python3.11/site-packages (from stack-data->ipython>=4->ipyparallel) (1.2.0)\n",
"Requirement already satisfied: asttokens>=2.1.0 in /opt/conda/lib/python3.11/site-packages (from stack-data->ipython>=4->ipyparallel) (2.4.0)\n",
"Requirement already satisfied: pure-eval in /opt/conda/lib/python3.11/site-packages (from stack-data->ipython>=4->ipyparallel) (0.2.2)\n"
]
}
],
"source": [
"# install ipyparallel so we can use it here\n",
"!pip install ipyparallel"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "ef3f2db5-3f1b-4f87-a1b4-7400d7915645",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Successfully connected to 4 instances\n"
]
}
],
"source": [
"import ipyparallel as ipp\n",
"\n",
"# ipp access keys\n",
"IPP_FILE_PATH='/home/jovyan/nfs/security/ipcontroller-client.json'\n",
"\n",
"rc = ipp.Client(IPP_FILE_PATH)\n",
"if rc.ids:\n",
" print(f'Successfully connected to {len(rc.ids)} instances')\n",
"else:\n",
" print(f'Failed to connect to {IPP_FILE_PATH}', \"file\")"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "ccca53cf-5792-4b00-b53a-48ccc84f15d3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:0] Hello world\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:3] Hello world\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] Hello world\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:1] Hello world\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine \n",
"print('Hello world')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "cd2b34a6-1af4-455c-b0aa-b24609543ec4",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:2] Just the even engines\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:0] Just the even engines\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine --targets ::2 \n",
"print('Just the even engines')"
]
},
{
"cell_type": "markdown",
"id": "ce5af357-9d73-48dc-86e8-d16e8c4f9cf8",
"metadata": {},
"source": [
"All good so far. Now, let's see if JAX can see our TPUs..."
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "23a45a92-3fa1-44cb-b69b-607a7bbd01b5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:0] jax process: 01; host: ipp-deployment-0-1; chips on device: 4; on the cluster: 16\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:1] jax process: 02; host: ipp-deployment-0-3; chips on device: 4; on the cluster: 16\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:3] jax process: 03; host: ipp-deployment-0-4; chips on device: 4; on the cluster: 16\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] jax process: 00; host: ipp-deployment-0-2; chips on device: 4; on the cluster: 16\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"import jax\n",
"from jax.lib import xla_bridge\n",
"import socket\n",
"\n",
"print(\n",
" f'jax process: {jax.process_index():02d}; '\n",
" f'host: {socket.gethostname()}; '\n",
" f'chips on device: {jax.local_device_count()}; '\n",
" f'on the cluster: {jax.device_count()}')"
]
},
{
"cell_type": "markdown",
"id": "6b931871-38c3-4f57-bca1-bdf2ba1a63c2",
"metadata": {},
"source": [
"### Sharding and JAX\n",
"\n",
"In JAX, Sharding objects describe distributed memory layouts.\n",
"\n",
"Let's start with some basic array manipulation on one ipyparallel instance."
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "94d813a7-3a91-4565-ab8e-19038d6e9296",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mOut[1:253]: \u001b[0m{TpuDevice(id=8, process_index=2, coords=(0,2,0), core_on_chip=0)}"
]
},
"metadata": {
"after": null,
"completed": null,
"data": {},
"engine_id": 1,
"engine_uuid": "6e398cb4-45376298b4e4d5665a884fd1",
"error": null,
"execute_input": "\nimport jax\nimport jax.numpy as jnp\narr = jnp.arange(32.0).reshape(4, 8)\narr.devices()\n",
"execute_result": {
"data": {
"text/plain": "{TpuDevice(id=8, process_index=2, coords=(0,2,0), core_on_chip=0)}"
},
"execution_count": 253,
"metadata": {}
},
"follow": null,
"msg_id": null,
"outputs": [],
"received": null,
"started": null,
"status": null,
"stderr": "",
"stdout": "",
"submitted": "2024-07-26T04:54:20.729874Z"
},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine --target=1\n",
"\n",
"import jax\n",
"import jax.numpy as jnp\n",
"arr = jnp.arange(32.0).reshape(4, 8)\n",
"arr.devices()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "ce796891-8ca3-44ad-afb6-969b909bb3c7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\u001b[0;31mOut[1:254]: \u001b[0mSingleDeviceSharding(device=TpuDevice(id=8, process_index=2, coords=(0,2,0), core_on_chip=0))"
]
},
"metadata": {
"after": null,
"completed": null,
"data": {},
"engine_id": 1,
"engine_uuid": "6e398cb4-45376298b4e4d5665a884fd1",
"error": null,
"execute_input": "\narr.sharding\n",
"execute_result": {
"data": {
"text/plain": "SingleDeviceSharding(device=TpuDevice(id=8, process_index=2, coords=(0,2,0), core_on_chip=0))"
},
"execution_count": 254,
"metadata": {}
},
"follow": null,
"msg_id": null,
"outputs": [],
"received": null,
"started": null,
"status": null,
"stderr": "",
"stdout": "",
"submitted": "2024-07-26T04:54:22.688224Z"
},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine --target=1\n",
"\n",
"arr.sharding"
]
},
{
"cell_type": "markdown",
"id": "82f785c2-1e8b-435b-8d55-d558df5288cf",
"metadata": {},
"source": [
"JAX offers ``debug.visualize_array_sharding`` to visualize the sharding."
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "86db90ee-32d6-4374-8320-d8ea1fd2a473",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[output:1]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┌────────────────────────────────────────────────┐\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ TPU <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">8</span> │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"└────────────────────────────────────────────────┘\n",
"</pre>\n"
],
"text/plain": [
"┌────────────────────────────────────────────────┐\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ TPU \u001b[1;36m8\u001b[0m │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"│ │\n",
"└────────────────────────────────────────────────┘\n"
]
},
"metadata": {
"engine": 1
},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine --target=1\n",
"\n",
"jax.debug.visualize_array_sharding(arr)"
]
},
{
"cell_type": "markdown",
"id": "3370eaa5-50dd-4710-b058-0f2787609845",
"metadata": {},
"source": [
"Let's try this with a more interesting example. We can use ``device_put`` to move the data to the accelerators."
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "bdc2bb62-ff04-4612-8386-25a08867fa3b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:1] [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.\n",
" 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.]\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[output:1]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┌───────┬───────┬───────┬───────┐\n",
"│ TPU <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">8</span> │ TPU <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">9</span> │TPU <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">12</span> │TPU <span style=\"color: #008080; text-decoration-color: #008080; font-weight: bold\">13</span> │\n",
"└───────┴───────┴───────┴───────┘\n",
"</pre>\n"
],
"text/plain": [
"┌───────┬───────┬───────┬───────┐\n",
"│ TPU \u001b[1;36m8\u001b[0m │ TPU \u001b[1;36m9\u001b[0m │TPU \u001b[1;36m12\u001b[0m │TPU \u001b[1;36m13\u001b[0m │\n",
"└───────┴───────┴───────┴───────┘\n"
]
},
"metadata": {
"engine": 1
},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine --target=1\n",
"\n",
"from jax.sharding import PositionalSharding\n",
"\n",
"arr = jnp.arange(32.0)\n",
"sharding = PositionalSharding(jax.devices()[8:12])\n",
"arr_sharded = jax.device_put(arr, sharding)\n",
"\n",
"print(arr_sharded)\n",
"jax.debug.visualize_array_sharding(arr_sharded)"
]
},
{
"cell_type": "markdown",
"id": "2d824e1c-94fa-4b77-b50a-48d1004bce50",
"metadata": {},
"source": [
"Now let's execute this code across all instances using ``multihost_utils``."
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "fda4cdc1-ed0a-4175-a915-af81b5090fa5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:3] example_batch={'inputs': Array((16, 4096), dtype=int32), 'inputs_position': Array((16, 4096), dtype=int32), 'inputs_segmentation': Array((16, 4096), dtype=int32), 'targets': Array((16, 4096), dtype=int32), 'targets_position': Array((16, 4096), dtype=int32), 'targets_segmentation': Array((16, 4096), dtype=int32)}\n",
"\n",
"host 3 chip 0 input data shape: (1, 4096)\n",
"host 3 chip 1 input data shape: (1, 4096)\n",
"host 3 chip 2 input data shape: (1, 4096)\n",
"host 3 chip 3 input data shape: (1, 4096)\n",
"global input data shape: (16, 4096)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:0] example_batch={'inputs': Array((16, 4096), dtype=int32), 'inputs_position': Array((16, 4096), dtype=int32), 'inputs_segmentation': Array((16, 4096), dtype=int32), 'targets': Array((16, 4096), dtype=int32), 'targets_position': Array((16, 4096), dtype=int32), 'targets_segmentation': Array((16, 4096), dtype=int32)}\n",
"\n",
"host 1 chip 0 input data shape: (1, 4096)\n",
"host 1 chip 1 input data shape: (1, 4096)\n",
"host 1 chip 2 input data shape: (1, 4096)\n",
"host 1 chip 3 input data shape: (1, 4096)\n",
"global input data shape: (16, 4096)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:1] example_batch={'inputs': Array((16, 4096), dtype=int32), 'inputs_position': Array((16, 4096), dtype=int32), 'inputs_segmentation': Array((16, 4096), dtype=int32), 'targets': Array((16, 4096), dtype=int32), 'targets_position': Array((16, 4096), dtype=int32), 'targets_segmentation': Array((16, 4096), dtype=int32)}\n",
"\n",
"host 2 chip 0 input data shape: (1, 4096)\n",
"host 2 chip 1 input data shape: (1, 4096)\n",
"host 2 chip 2 input data shape: (1, 4096)\n",
"host 2 chip 3 input data shape: (1, 4096)\n",
"global input data shape: (16, 4096)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] example_batch={'inputs': Array((16, 4096), dtype=int32), 'inputs_position': Array((16, 4096), dtype=int32), 'inputs_segmentation': Array((16, 4096), dtype=int32), 'targets': Array((16, 4096), dtype=int32), 'targets_position': Array((16, 4096), dtype=int32), 'targets_segmentation': Array((16, 4096), dtype=int32)}\n",
"\n",
"host 0 chip 0 input data shape: (1, 4096)\n",
"host 0 chip 1 input data shape: (1, 4096)\n",
"host 0 chip 2 input data shape: (1, 4096)\n",
"host 0 chip 3 input data shape: (1, 4096)\n",
"global input data shape: (16, 4096)\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"from jax.experimental import multihost_utils\n",
"\n",
"example_batch = None\n",
"example_batch = load_next_batch(data_iterator, example_batch, config)\n",
"\n",
"print(f'{example_batch=}')\n",
"data = example_batch['inputs']\n",
"print()\n",
"\n",
"for i, shard in enumerate(data.addressable_shards):\n",
" print(\n",
" f'host {jax.process_index()} chip {i} input data shape: ',\n",
" shard.data.shape)\n",
"\n",
"print('global input data shape:', multihost_utils.process_allgather(data).shape)"
]
},
{
"cell_type": "markdown",
"id": "585e256c-4340-41a8-9c93-9fcf97d22f11",
"metadata": {},
"source": [
"The [Distributed Arrays Tutorial](https://jax.readthedocs.io/en/latest/notebooks/Distributed_arrays_and_automatic_parallelization.html#sharding-describes-how-array-values-are-laid-out-in-memory-across-devices) has more examples for you to work through."
]
},
{
"cell_type": "markdown",
"id": "9fc9fed4-3556-4f5d-969d-909474cfe6f7",
"metadata": {},
"source": [
"## Training Meta's Llama2-7b\n",
"Let's take our 16 TPU v5e chips for a spin. Imagine if you need to train Llama2-7b and you need to evaluate your approach for parallelism. Intuitively, we know that 16 data shards make more sense than 16 tensors parts, but can we try it out?\n"
]
},
{
"cell_type": "markdown",
"id": "d539df88-4228-4691-8182-c904cb7823f6",
"metadata": {},
"source": [
"### Configure parallelism and compile code to begin training\n",
"\n",
"We'll use [FSDP](https://engineering.fb.com/2021/07/15/open-source/fsdp/) and [tensor parallel](https://huggingface.co/docs/text-generation-inference/en/conceptual/tensor_parallelism) techniques to split our large model across the 16 TPUs. Let's start with [MaxText](https://github.com/google/maxtext) to save some development time.The code will automatically figure out the best way to do this.\n",
"\n",
"In this step, we configure and compile the model. With 16 chips, we plan to shard the model using 4-way FSDP and 4-way tensor parallel, by setting `ici_fsdp_parallelism=4 ici_tensor_parallelism=4`. It takes a few seconds for the code to automatically complete the configuration and compile the `p_train_step` function.\n",
"\n",
"Rafi Witten [shared](https://github.com/rwitten/HighPerfLLMs2024/blob/main/s03/Session3Slides.pdf) this illustration."
]
},
{
"attachments": {
"09ec515a-24ed-4ae5-bb0a-50c19a524af2.png": {
"image/png": "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ByhsKV9iyrLwnJS3pFM540vUDtg6d+a84jS3FVIMgwoz4VWF91KyPonXV7NmzQrzcspLBERABERABERABERABERABERABERABERABERABERABETgAglccsbSBeYRP/3Y8dw9OuMH6o0IXCCB48eOuU2bN7lFCxe51WtWu/37TGS07+Jiv/Xq8hXKuwrlK7gGtpdfq1YtXVZWaxNpO6UUGi+wSDpdBC5qAgj827dvMwOJbW7Hjh3u5KmTPjJF9WrVbQw2MO+dlt6Y5aKGpMqLgAiIgAiIgAiIgAiIgAiIQDET+OUvf+F+/KMfxa/auP1VrvvV/+FqNGgf/y7T3pw+edwtnfKIW/b+b5JW7fsNFrl6Fdsk/S1Tvvxw39/chMO/cnvPbPBV6t+/v/v+ww/7yJaZUkfVQwREQAREQAREQAREwLnCdQkUUREoJgKVKld2bdq09X/hkoj8iI3eA9aEfrymS8sWBKGMehWBTCXAeGtlXvn8KYmACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIiACBQtAQn9RctXuRcjAfYjJyy3kgiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAhkMoFymVw51U0EREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEMo2AhP5Ma1HVRwREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREIKMJSOjP6OZV5URABERABERABERABERABERABERABERABERABERABERABERABERABERABDKNgIT+TGtR1UcEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERCCjCUjoz+jmVeVEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQyjYCE/kxrUdVHBERABERABERABERABERABERABERABERABERABERABERABERABERABEQgowlI6M/o5lXlREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEMo2AhP5Ma1HVRwREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREIKMJSOjP6OZV5URABERABERABERABERABERABERABERABERABERABERABERABERABERABDKNgIT+TGtR1UcEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERCCjCUjoz+jmVeVEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQyjYCE/kxrUdVHBERABERABERABERABERABERABERABERABERABERABERABERABERABEQgowlI6M/o5lXlREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEMo2AhP5Ma1HVRwREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREIKMJSOjP6OZV5URABERABERABERABERABERABERABERABERABERABERABERABERABERABDKNgIT+TGtR1UcEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERCCjCUjoz+jmVeVEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQyjYCE/kxrUdVHBERABERABERABERABERABERABERABERABERABERABERABERABERABEQgowlI6M/o5lXlREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEMo2AhP5Ma1HVRwREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREIKMJSOjP6OZV5URABERABERABERABERABERABERABERABERABERABERABERABERABERABDKNgIT+TGtR1UcEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERCCjCUjoz+jmVeVEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQyjYCE/kxrUdVHBERABERABERABERABERABERABERABERABERABERABERABERABERABEQgowlI6M/o5lXlyjqB06dPl/UqqPwiIAIiIAIiIAIiIAIiIAK5EDijZ/5c6OgnERABERABERABERABERABERABERCBVAQqpPpB34uACJQsgWPHjrnHH3/cZbVq5a4YNsxd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gAiIgAjkQkBCfy5w9JMIFDeBQ4cOuzffHB8Xz9nPetSoUWmF3j9kIURXWlh4RJ6Q8Nhav26d22eLhQgneSXCkG7dutUfhkCE59FoE/ArVMwZbBuPsO07dtieos/6smKQMNz2EuZV6eImcMQWqNmXnb5Eat+ho4WtreHKZbjQTx0HXDbAh+vfZ1E5WpiA0qtXr4zrDAgQL730knmL73GVK1d2dU34lNBf8s1coUJFd+XwK30obub9Zs2amYFYJ4sEk3PuLvmSpi4B+1SPHz/OfWqCf5s2bd2lN1UpUaEfI4PRY8aYt21zd+rkKdepUyeXlRAdB4OmuXM/du++846v2PARI1x2u2wzsEhfiExNRL+IQOERYE7gebKRGQCdOnXa9+e29oxXmhMRSRYsXOBee/VVX8zLLx/oOthzceV8CP0YoiKkV0mxVRLGayH8Psfy7JvsWbZatWr2LJz8f5s5nrk28TyelakDxgZsH8DfOnsm322vt952uxlaNPf14rymZgSAYe/Klb/2z9XMh0QNGDxkSFqGvqW5HVU2ERABERABERABERABERABERABERCBoiWQfMWiaK+p3EVABJIQYCEQryUW90iE87zppptzhPhMclr8K7wKt2/fdp53Ed5BeCSmI/QTUYC9lkksamaZh2iiyM9vLIoi+G3bto2PfnEzLJT6L/TPRUsAD7xdu3a7AwdiBifBs/9iANK6TRu/cM9YRgTPj9dhWeFz6tRJt3XbVu91TR0x7FAqHQTats12eJTT/xCruIeUpcQ9BSFs586dZrBQxx09ey8qyTr07dvXh9BGiKtkURMSw2ifPn3GGzVRZtLBAwct9HbqPbtLsi669sVNgDmBCCwdO3byz3CphO/SROmMCeVEyAnji+eKsPVAuuWsZAL86NFj4nkknoe3/6pVq7wgj3HPoEGDk3rRV61aJWUEBAT77t17uLoWnj+aKOuxY0f9vLZ8+XK/JRdGkB988IF/tr///s/H52metXv1pn06usWLF/ts3nzrTdf/sstSGilEr6X3IiACIiACIiACIiACIiACIiACIiACFy8BCf0Xb9ur5qWMAAL7hAkT/CImokJbC+uJyICHUTrp448/9ouJHMtiI15KCCdr1651mzZudJ3NG7G8hQ9NN7EoXLt27XQP13EiIAJGoKKNG/6URKAkCOBVWpa8+EuCUX6v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IECAAAECBAgQIECAAAECBAgQIECAAIFWAgL9rUBsEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBchYQ6C/nu6NvBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECglYBAfysQmwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJwFBPrL+e7oGwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaCUg0N8KxCYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChnAYH+cr47+kaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFoJCPS3ArFJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKWUCgv5zvjr4RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFWAgL9rUBsEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBchYQ6C/nu6NvBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECglYBAfysQmwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoJwFBPrL+e7oGwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaCUg0N8KxCYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChnAYH+cr47+kaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBFoJCPS3ArFJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKWUCgv5zvjr4RIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFWAj1abdskQIAAAQIECBAgQIAAAQIEOpFAY2NjbN68OfV4Swd63S26d+8eFRXmA3QA0aEECBAgQIAAAQIECBAgQGCvCQj07zVqJyJAgAABAgQIECBAgAABArtXYMOGDfH449Nj4YKFKcy/64H+3r17xyGHHBoHHHDA7u2g1ggQIECAAAECBAgQIECAAIE9IiDQv0dYNUqAAAECBAgQIECAAAECBPa8wMIFC+JLX/pS3HXnnR06WQ7w//Vf/41Af4cUHUyAAAECBAgQIECAAAECBPaegED/3rN2JgIECBAoQ4Gc6nbLll2f/ZYvqVu3bkWa2/xdIUCAAAECBAjsTYG6urpobGjYm6d0LgIECBAgQIBAmQpsiYaGxg73LS9lZDmjDjNqgAABAgT2goBA/15AdgoCBAgQKE+BnOp2+vTpsXHjxg51sLa2Ng488MAYNGhQh9pxMAECBAgQIECgowI9evSIwYMHR9++fdvV1OjRo6Nfv37tOkZlAgQIECBAgEC5CGzZvDkWpExHzz3/fIe7NH78uBg7dlxUVVV1uC0NECBAgACBPSkg0L8ndbVNgAABAmUtMHPmK3HFe98TixYt6lA/TznllPibv/mfceZZZ3WoHQcTIECAAAECBDoq0L9//7jyyqti6umnt6up6urqGDduXLuOUZkAAQIECBAgUC4C9fX18bOf/Sw9n/nrDnfpM5/5THzik/8jRo4c2eG2NECAAAECBPakgED/ntTVNgECBAiUtcD6detjcxrxrRAgQIAAAQIE9heBXr16xRFHHBFnnHHG/nJJroMAAQIECBAg8IYCeVnGNWvXvGE9FQgQIECAwP4kINC/P91N10KAAAECHRLo3r17DBw4MHLK2/aUnLJfOrf2iKlLgAABAgQIECBAgAABAgQIENizAr179y6WM+rWrVu7TtQ3LWfUvXtFu45RmQABAgQI7AuB9kUy9kUPnZMAAQIECOwlgSFDhsT//Pzni3XY2nPK2traOOigg9pziLoECBAgQIAAAQIECBAgQIAAAQJ7UGDq1NPjqquuisqqqnad5YADxkdt/9p2HaMyAQIECBDYFwIC/ftC3TkJECBAoCwFcsD+LW85NQ455JCy7J9OESBAgAABAgQIECBAgAABAgQItE0gT8qYNm1aVNfUtO0AtQgQIECAQCcTkH+mk90w3SVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBri0g0N+177+rJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFOJiB1fye7YbpLgAABAgQIECBAgAABAgR2JrBly+bYsmXLzqqUvNctb3Ur/luy3wYBAgQIECBAgAABAgQIECBQvgIC/eV7b/SMAAECBAgQIECAAAECBAi0S6Curi5mz5kTTz/9dJuO6969ewwcODBGjhzZpvoqESBAgAABAgQIECBAgAABAuUhINBfHvdBLwgQIECAAAECBAgQIECAQIcFFi9eHP/w939ffLWlsQEDBsSVV14VX/7KV9pSXR0CBAgQIECAAAECBAgQIECgTAQE+svkRugGAQIECBAgQIAAAQIECBDYHQKbN29uczO57uaU6l8hQIAAAQIECBAgQIAAAQIEOpeAQH/nul96S4AAAQJ7UGDDhg3x8ssvt3lN2549e8aQIUOitrZ2D/ZK0wQIECBAgAABAgQIECBAgAABAu0VWLp0abzwwgtRVV3dpkP79u0bQ9NznrbWb1OjKhEgQIAAgT0oINC/B3E1TYAAAQKdS2DevHnxgQ+8P7pXdG9Tx0ePHhWf/dzn4vLL392m+ioRIECAAAECBPa0wODBg+ODH/xQnHraaW06Vc+ePWLEiJFtqqsSAQIECBAgQKAzCVx33S/jd7+7KXW5W5u6fcEFF8SnP/OZOOSQQ9pUXyUCBAgQILCvBQT69/UdcH4CBAgQKBuBnLp2zerVbe5P3759or6uvs31VSRAgAABAgQI7GmBmpqa4uH0qaee2uZTVVRUtLmuigQIECBAgACBziJQV1cX+autZd26ddHY2NjW6uoRIECAAIF9LiDQv89vgQ4QIECAAAECBAgQIECAAIHdJ9CjR4/ISwwpBAgQIECAAAECBAgQIECAwP4rINC//95bV0aAAAEC7RQYOXJk/NWnPx2jR49p05G9etXE5MnSubUJSyUCBAgQIECAAAECBAgQIECAwF4UOPfcc+Pyd78nKisr23TWUem50NgxbXsm1KYGVSJAgAABAntYQKB/DwNrngABAgQ6j0CfPn3iLae8JQXvJ7ep0926dYseZsu1yUolAgQIECBAgAABAgQIECBAgMDeFDjggANj2rRpUVNd3abTVnTvLitSm6RUIkCAAIFyERDoL5c7oR8ECBAgsM8F8vq0VenDX3Va21YhQIAAAQIECBAgQIAAAQIECBDovAJ5OaMc5Pecp/PeQz0nQIAAgZ0LVOz8be8SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5SQg0F9Od0NfCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGwgI9L8BkLcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEA5CfQop87oCwECBAgQIECAAAECBAgQILDrAmvXrosnn3wy+vfv365Gelb2jFEjR8XESZPa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Xnj++ciz4ZvK6NGjo3+//rFyxYqmXdt835Kua/DgQc376+rqYtHCRc3brV/kYHxtmtH/RmXIkCElVXK7a9asiYaGTemrMRrTMgaNhemWol5eOiAPIsjfFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYKiDQv9Vih68qe1ZGRcXWdedXr17VHGDf4UHbeSNnBliTZqc3lYqKihSY3xq8z/tz4HzQ4MHx9pRe/7//+7+LqsuXL4vpj02PM9PM+Rz8zuWee+4pAuXFRvrP2WefHcNbrHef9y9dtizWrlvXVCWeffbZ+Pa3vx1DUvs7KptSwP3ll19qfnvDho0xf/785u0OvUgZDDb+KcD/6COPxJNPPllkC8hZB/LXypUrU9C/oTjF+vXrBPk7hO1gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2VwGB/jbc2YEDB0Z1dVVzzeXLV8S6FgH05jfe4MXGjRtT8H1pc608e39ESmvfuuT973jHO+OnP/1pcwaA3/3ud/GWlHY/B/pzyv877rijOdCf95108snFAIGWbS1Pgf51a9c278op+HeWhr+5YosXGzduiFdfe7XFnl19uSWWL18eN910U3zve9+NZ1I2gjyrXyFAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB9gkI9LfBa8DAASVp85elYH3LAHobmiiqbExp9pcu3Rro79mzZ0qTv+3s+hy4P+Utb4na2tpY8ac0+7/85S/jb//u74qU/kuXLolHHnm4ObX/iSeeFAeMPyByey3LypWlmQdyBoGcMSB/tbXkuptSJoKOllWrVsfn/n+fi99cf32s/dPgg9yffK3du3dPGRMqilM09a2+vj7yl0KAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECpQIC/aUe290aNHBQVFdtndG/JAXrV6/ZmoJ/uwdtZ+f69evTevcLm995PdBfunZ905s1NTXx3ve8N/792/9e7MqDC55Kqe6nnn563HvPvc1B/vzm2dPOjiFDtm2nJi0LkM/RtM79AQccEBMmTIyqFtfSdL4dfc+B+COOPGJHb7dtf8pA8MV/+Ze46be/bQ7y5+D+EUccGRdeeEGceNLJMXrUqBiQMif0Stedg/7/8sV/iW9+4xuC/W0TVosAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgS4kINDfhps9YcKE6N+/trnmrJkzY8aMGTF16unRt2/f5v1v9CIPEHjqqaeaq/Xp0yemTJnSvN3yRQ6wv+Od74xvf+fbzen7b7nllnjziSfGrbfemgLm65qrn/jmE4sgefOOP70YN258DEyDFBYten1wwdvOPz8++5nPxtBhw1pX3aPbs9OSATff/LtYuXJl83k+/elPx8c+/okYOXJk876WL3qkgQAKAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECGwr8Hq+9G3329NCYOy4cTFp0qTo3bt38957fn9PPPfss83bb/RiyZLF8cAD98ecFPRuKv369UuB+zc3bZZ8z7Pajzn22Bg/fnxzqv3rr/91CtovirvvvjvN6H890H/e294Wo0ePbk5937KRUXmW/ICtAxQWL14cy5Yva1llr7y+++67UgaENc3nOu+88+LdKVvBjoL8zRW9IECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFtBAT6tyHZ/o5T3nJKjB4zpvnNHLx++OGHY+PGjc37dvbipRdfiut/fX3z7PycCeDoY46JgQMG7vCwPKv/fVde2RzEnz9/fpHOfuXKFc3HTJs2LQYOGtS83fLF8BHDIw8maCpPPvFkPP/c802be+37ooWLoqF+U/P5Dj54ctT279+8vb0XW7a30z4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQCIH+Nv4QnHba1BjbItDf2NgYP/3pf8ctt9wcmzZtDWJvr7nZs2bFL37xi3j22Wea3x4+fHhccsklkabrN+9r/aIivXfJJZdGXs8+ly1prftrrvlx8zr3tbUD4oQT3hT9drB8wIEHHhSDBw9pbvall15M/b0lXnzxxeZ923uRU+z/7qbfxtXf/35sWL9+e1Xava9l4D4PVKjfVL/DNqZPnx5PPflU1Ne3rJNaSNevECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoKsLCPS38SdgeFrX/s/e//6YMmVK8xHPptT9f/93fxfXXnNNc/C9+c30Igfmn3jiifj85z8fP/7xjyIPDsiltrY2zjp7Wpw+9fRie4f/SYH+iRMnxrHHHdcc7M/B79xuLuecMy2GDR0a3VKa/+2V8WnJgbee+9Y46KCDirc3b94c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AgQIECBAgAABAgQIECBAgAABAgQIECBAoFMLCPR36tun8wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQ1QQE+rvaHXe9BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCpBQT6O/Xt03kCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6GoCAv1d7Y67XgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDo1AIC/Z369uk8AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHQ1AYH+rnbHXS8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdGoBgf5Offt0ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgS6moBAf1e7466XAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBDq1gEB/p759Ok+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECXU1AoL+r3XHXS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKdWkCgv1PfPp0nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAga4mINDf1e646yVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBTi0g0N+pb5/OEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBXExDo72p33PUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKcWEOjv1LdP5wkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgqwkI9He1O+56CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBTCwj0d+rbp/MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0NUEBPq72h13vQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQqQUE+jv17dN5AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOhqAgL9Xe2Ou14CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ6NQCAv2d+vbpPAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0NQGB/q52x10vAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHRqAYH+Tn37dJ4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEupqAQH9Xu+OulwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQ6tYBAf6e+fTpPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAl1NQKC/q91x10uAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECnVpAoL9T3z6dJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGuJiDQ39XuuOslQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgU4tINDfqW+fzhMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAVxMQ6O9qd9z1EiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECnFhDo79S3T+cJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoKsJCPR3tTvuegkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUwsI9Hfq26fzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINDVBAT6u9odd70ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0KkFBPo79e3TeQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDoagIC/V3tjrteAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEOjUAgL9nfr26TwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIdDUBgf6udsddLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh0agGB/k59+3SeAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBLqaQI+udsGulwABAgQIECBAgAABAgTKV2DJksVx1113xxOPP16+ndSzLi8wdNjQGD58eEyefEgce+yxXd4DAAECBAgQIECAAAECBAjsfQGB/r1v7owECBAgQIAAAQIECBAgsAOBW2+9Nb76la/G0qVLd1DDbgL7XqCmpiZ69aqJ8857W4wcMSJGjBy57zulBwQIECBAgAABAgQIECDQpQQE+rvU7XaxBAgQIECAAAECBAgQKF+B559/Lm5Lgf6XXnqxfDupZwSSwIoVrzPcdfddcdzxx8dll13GhQABAgQIECBAgAABAgQI7FWBir16NicjQIAAAQIECBAgQIAAAQI7EFi2bJmZ/Duwsbs8BVYsXxGLFy0qz87pFQECBAgQIECAAAECBAjs1wJm9O/Xt9fFESBAgAABAgQIECBAoHML1AzuHQMPHNS5L2If9n71qytjzfzVzT3oWdM/+g6eFNX9hjXv86LtAnVrl8aaJS9G/frlbT9ITQIECBAgQIAAAQIECBAgsAcEBPr3AKomCRAgQIAAAQIECBAgQKDjAj17VcbII0fGhLMmdbyxLtrCS3e8WBLo7zfk4Jhw4keiz+AJXVSkY5e9fN7jMWv6tQL9HWN0NAECBAgQIECAAAECBAjsBgGB/t2AqAkCBAgQIECAAAECBAgQ2P0C3Su7R++hfWLAuIG7v/Eu0mJN/5qSK63sPShqR0xJgf6JJftttE2gfv2y6FHZu22V1SJAgAABAgQIECBAgAABAntQoGIPtq1pAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYDcLCPTvZlDNESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBPSkgdf+e1NU2AQIECBAgQIAAAQIECBAgQIAAAQIECBDYBYGlLy+NtYvW7MKRDskCWzZvKYFYvqkhZqzbEN27dSvZb+ONBbLk4vqGKBV94+PUIECAAIE9KyDQv2d9tU6AAAECBAgQIECAAAECBAgQIECAAAECBNolsGH5hnjx1hlR0V1S3nbBtai8pXFzi62Ix1avj6fWbijZZ6PtAks3NQr0t51LTQIECOwVAYH+vcLsJAQIECBAgAABAgQIECBAgAABAgQIECBAoG0CG1esj/yl7D6BV+o37b7GtESAAAECBMpAQKC/DG6CLhAgQGB3C9StqY+5j86NlfNW7u6mu0x7y2cti81ppHJTeWn9xsiJ3aorpHdrMmnP91c21MWGLaUj6dtzvLoECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAVgGB/q0WXhEgQGC/EahfvTFm3f3yfnM95XAhz22sj/ylECBAgAABAgQIECBAgAABAgT2hkC/sbXRo9Ij/F21XjFzWWzZvHVV+X4VFTGwR/fovqsNdvHjlqelEFY2St/fxX8MXD4BAmUm4K+EMrshukOAAAECBAgQIECAAAECBAgQIECAAAECXVugsl91HDxtctQMqOnaEB24+vu/cW8K9G/N1nhMn5o4PH1VdZOtsb2sebjEw6vWxkNrN8TWoRPtbUV9AgQIENjdAgL9u1tUewQIECBAgAABAgQIECBAgAABAgQIECBAoAMCvYf0juGHj4jeQ/p0oJWufWi3VssvHtq7Oo7u2ysqW+3v2kptu/otKbo/e2NddEuBfoUAAQIEykdAoL987oWeECBAYLcJ9OjVM/oO7xuVvat2W5tdraG1i9fEhmXrY3PD6+vKD+rePQan9G49fRjcpR+FRfUNsTyNom807HuX/BxEgAABAgQIECBAgAABAgQIECBAgAABAgRaCgj0t9TwmgABAvuJQE7rNuGsg2PwxMH7yRXt/cv4480zYt4jc1Kgv744+WG9quKU2j7RPwX7lfYL/H7Fmrhv9fpYu+X1gRPtb8ERBAgQIECAAAECBAgQIECAAAECBAgQIECAQJOAQH+ThO8ECBDYzwR6pWB//1G1+9lV7b3L6VFV+ityYM8eMaqqMvr3FOjflbswOtlVddsQa3flYMcQIECAAAECBAgQIECAAAECBAgQIECAAAECJQIVJVs2CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIWEOgv69ujcwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFRAoL/UwxYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChrAYH+sr49OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoFBPpLPWwRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyFhDoL+vbo3MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBUQKC/1MMWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoawGB/rK+PTpHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBQT6Sz1sESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshYQ6C/r26NzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVECgv9TDFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKGsBgf6yvj06R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgUE+ks9bBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIWEOgv69ujcwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFRAoL/UwxYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChrAYH+sr49OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoFBPpLPWwRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyFhDoL+vbo3MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBUQKC/1MMWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoawGB/rK+PTpHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBQT6Sz1sESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshYQ6C/r26NzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVECgv9TDFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKGsBgf6yvj06R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgUE+ks9bBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIWEOgv69ujcwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFRAoL/UwxYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChrAYH+sr49OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoFBPpLPWwRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyFhDoL+vbo3MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBUQKC/1MMWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoawGB/rK+PTpHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBQT6Sz1sESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshYQ6C/r26NzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVECgv9TDFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKGsBgf6yvj06R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgUE+ks9bBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIWEOgv69ujcwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFRAoL/UwxYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChrAYH+sr49OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoFBPpLPWwRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyFhDoL+vbo3MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBUQKC/1MMWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoawGB/rK+PTpHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBQT6Sz1sESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshYQ6C/r26NzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVECgv9TDFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKGsBgf6yvj06R4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIESgUE+ks9bBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgbIWEOgv69ujcwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFRAoL/UwxYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChrAYH+sr49OkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBEoFBPpLPWwRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGyFhDoL+vbo3MECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBUQKC/1MMWAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoawGB/rK+PTpHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRKBQT6Sz1sESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBshYQ6C/r26NzBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgVECgv9TDFgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKGuBHmXdO50jQIAAAQIECBAgQIAAAQIECBAgQIAAgV0WmDt3bvz+97+Pma+8UrQxZsyYmDZtWowZO3aX23QgAQIECBAgQIDAvhcQ6N/390APCBAgQIAAAQIECBDYDwW2bNkSdXV1UbdxY4evrk/fvtG9e/cOt6MBAgQIECDQWQUaGhpi/fp1sWXzlp1eQkVFRVRVV0dlZeVO63WlNxcuWBA33nBD3H33XcVlH3fccXHooYcK9HelHwLXSoAAAQIECOyXAgL9++VtdVEECBAgQIAAAQIECOxrgeeffz6+8uUvxWOPPdbhrtxww40xcdKk6NatW4fb0gABAgQIEOhsAmvXro0bb7wh/ukf/7FNXc/B/jxr/YgjjojDpkyJC86/IAYOGtRlf482bm6MjRs3RHbMZf36DdHQ2NgmS5UIECBAgAABAgTKV0Cgv3zvjZ4RIECAAAECBAgQINCJBdalh+kvv/xyzJ49u8NXUb+pPrWRZzAK9HcYUwMECBAg0OkENtXXx+JFi9v1O3XevHnx5JNPRnWa3f+d73wnPvTBD8Z73vPeyFlyFAIECBAgQIAAAQL7g0DF/nARroEAAQIECBAgQIAAAQLlJrAlBeYbGzeXW7f0hwABAgQIdDqBPNRt8+b2/U7dtGlTrF69OhYvXhzPPvNMfPGLX4wf/PAHsWbNmr16/evWrY1f/eq6OOH444qvqVNPi//84Q/3ah+cjAABAgQIECBAYP8UMKN//7yvrorALgmsW7cu/vDUU/Hon9LL9undO4459tg45phjdqk9BxEgQIAAAQIECGwVGJRSBl900cUx/oADtu5s46thw4anufxm87eRSzUCBAgQ2M8FevbsGZPSkjaXv/s9JVe6ZcvmWLVyVSxdujSeePKJIsC/ZcuWYpDAokWL4utf/3ocesihcdrUqVFVVVVy7J7aaEwp8pcsWRJPP/10cYre6VlLzvijECBAgAAB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89IE2yv57+vXUiaCPGAhL3t59Q9+uNM2t9eGfQQIECBAgAABAntWYMd/8e3Z82qdwF4RyCnPevXqFaPTg/udlcOnHB5r1qyNq6/+fjHLP9e9//4HYln60La3Av0765/3CBAgQIAAgZ0L5Jlad991V1p/9Zsxbty4mDx5crzl1FPjqCNTKtUWa4tWV1elNU23FBl9Hn3k0bg/PZydnQb4nX76GZEfzg4dOnTnJ/IuAQJ7VaAy/T0/uGePGG1G/y679+tRuv50724DYkTVYTGkp0D/rqCuaVgUVd3STNnWEbldacwxBNohMOOFF+I3v7m+CMy247DmqpMmTYpDDpncpQL9ORifB4F+MwXLW86EP+ecc4q/+fKs/JYlT/r40Y/+M25IafVXr15dvDVixMg4Nf1Necwxx0RtSmW/sW5jzHhhRtx5553x4ot/LDJD5gwAv77+13HIoYcUf1Pmdg877LD4yle/Gg0po8r6DevjsTTj/vY04CCXPLD02GOPjbe97fxiu1sa1HbSSSeVZHPMAfavf/3rcc/vfx85kJ9Lr16946yzzkxtTyn6vyEtJ/DUU08VdXIGgXUp7f7DKcvAT37ykxieslseffTRxXHb+8+KFSsif+XBAAceeFCceeaZkZc4yGXevLlplv8daRLMzGI7L3GQB5rcf999MfX004t9/kOAAAECBAgQIFAeAgL95XEf9GIfCwwaPDjed+WV8ctf/qI50L9kyeLIo5pzSv+djYJu6vq6deti+bJlsSZ9sMofJvv36xcDBg4s0qVtb421puN29/ecIm596suKtCxBkREgbfft2zdqB9SmNeM6nvI0f8DLKd2yzYD0ITev01aTBlMoBAgQIEBgXwqsXrU67rjjjnj22Wfjueeei/vSg8h701qmOei/eMmS5q49/fTT8Xd/97cxd86cYrme/GA2/27LDzovvvhigf5mKS/2hEBD+llbkn4e88P7tpaBAwZETVonN6WoaOsh6hEgQIDAfiiQnzN0pORnBR1toyPn393H5mc1C1I2pz/OmFHSdL7OvFRjzt74xONPpL8H74knnniiCMjnisekAPtHPvLRGJSe17Qud6Rg9gMPPNAc5D/wwAPjyvSs6IILLoxxKVtknkiSf5fPT+vaHzz54Pjxj35UBNpzX55Pf3/ek2be58Gj+RnQ2PQ36Ic++KFoTPdt1apV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tjRGjxode6RBA0OHDm1rwllnnR350ZWSMwTkes9861vj8ccfi6dTvbmuSZMmF4MQNgbRt64pp+QvnWfdunXFQIInU0r//HzkqJExZcrUGDFixFYz9tvXlN//2Mc/Xjzab9/e8759m+Kf0yCD/FAIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKi+gEB/9Y2doYcL5AD7mDTzPT8qWQamWf8HHnhQ8djRevNggSlTphSPHT3W/gQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7NoCr7b49q7deq0jQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINJiDQ32AXXHcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoL4FBPrr+/ppPQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0mIBAf4NdcN0lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfoWEOiv7+un9QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQYAIC/Q12wXWXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOpbQKC/vq+f1hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAgwkI9DfYBdddAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhvAYH++r5+Wk+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDSYg0N9gF1x3CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKC+BQT66/v6aT0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINJiAQH+DXXDdJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH6FhDor+/rp/UECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GACAv0NdsF1lwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqW0Cgv76vn9YTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQIMJCPQ32AXXXQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCobwGB/vq+flpPgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0mINDfYBdcdwkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgvgUE+uv7+mk9AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDSYgEB/g11w3SVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB+hYQ6K/v66f1BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBgAgL9DXbBdZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE6ltAoL++r5/WEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgECDCQj0N9gF110CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqG8Bgf76vn5aT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINJiDQ32AXXHcJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoL4FBPrr+/ppPQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0mIBAf4NdcN0lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfoWEOiv7+un9QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQYAIC/Q12wXWXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOpbQKC/vq+f1hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAgwkI9DfYBdddAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhvAYH++r5+Wk+AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDSYg0N9gF1x3CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKC+BQT66/v6aT0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINJiAQH+DXXDdJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIH6FhDor+/rp/UECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0GACAv0NdsF1lwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqW0Cgv76vn9YTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA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XeUVKRvC8g3PxfpY263jHUSAAAECBAgQIECAAAECBAgQIECAAAECBAhsFhDo32zhGQECBHqMQFPzbjHpoP8vRk45osf0qdYdmf/QVbFgzo1tgf7d+xwZBzSfGUP6jql1U3rE+R5t+VU8sPaKWBkv9Ij+6AQBAgQIECBAgAABAgQIECBAgAABAgQIENiZAgL9O1PfuQkQIFAlgeYhY2P01KNi7D4nVekMPb/aRY//pkMnJzYdEvsNPi2G9BnbYbsXXRNYsX5RPLzuZ5HyuykECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAmQK9yzze4QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEANBQT6a4jtVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFwBgf5yBR1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqKCDQX0NspyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUKCPSXK+h4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQwGB/hpiOxUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChXQKC/XEHHEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBGgoI9NcQ26kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5AgL95Qo6ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FBAoL+G2E5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFRDoL1fQ8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIYCAv01xHYqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQroBAf7mCjidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjUUEOivIbZTESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgUE+ssVdDwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKihgEB/DbGdigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCsg0F+uoOMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEANBQT6a4jtVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFwBgf5yBR1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqKCDQX0NspyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUKCPSXK+h4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQwGB/hpiOxUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChXQKC/XEHHEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBGgoI9NcQ26kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5AgL95Qo6ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FBAoL+G2E5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFRDoL1fQ8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIYCAv01xHYqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQroBAf7mCjidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjUUEOivIbZTESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgUE+ssVdDwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKihgEB/DbGdigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCsg0F+uoOMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEANBQT6a4jtVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFwBgf5yBR1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqKCDQX0NspyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUKCPSXK+h4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQwGB/hpiOxUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChXQKC/XEHHEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBGgoI9NcQ26kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5AgL95Qo6ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FBAoL+G2E5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFRDoL1fQ8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIYCAv01xHYqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQroBAf7mCjidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjUUEOivIbZTESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgUE+ssVdDwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKihgEB/DbGdigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCsg0F+uoOMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEANBQT6a4jtVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFwBgf5yBR1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqKCDQX0NspyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUKCPSXK+h4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQwGB/hpiOxUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChXQKC/XEHHEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBGgoI9NcQ26kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5AgL95Qo6ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FBAoL+G2E5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFRDoL1fQ8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIYCAv01xHYqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQroBAf7mCjidAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAjUUEOivIbZTESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBcgUE+ssVdDwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKihgEB/DbGdigABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlCsg0F+uoOMJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEANBQT6a4jtVAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFwBgf5yBR1PgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqKCDQX0NspyJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUKCPSXK+h4AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQQwGB/hpiOxUBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEChXQKC/XEHHEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBGgoI9NcQ26kIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEC5AgL95Qo6ngABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FBAoL+G2E5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKFRDoL1fQ8QQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIYCfWt4LqciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEXkVg1ZKn4uGbvhB9+w9+lT29vS2B1lfWdnjr7pXfj7mrb4neISzSAaZLLzbE/PUPxoZo7dLediJAgACB2gj4jVYbZ2chQIAAAQIECBAgQIAAAQIECBAgQIAAAQJdEliz8sV4ZuZPurSvnbom8FjrLSFO3TUrexEgQIBAfQgI9NfHddJKAgQI7LDAskWPRPS2QssOw206YPnzs2P9upa2w1esXxRPtdwd/XoPbNvmSdcFFq6dHes2bPbs+pH2JECAAAECBAgQIECAAAECBAgQ2NUEpkydGk1NQky72nXRHgIEGkvA/8KNdb31lgCBBhHIo76f/v0V0Xf2oAbpceW7ufz5WdH6ypq2ih9/5bZYuCINnlC6JfDyhudjTSzv1rEOIkCAAAECBAgQIECAAAECPV1gagqavvGNb4wbfvGLWLu2Y8r5nt53/as/gSlTpsQ73vGOGDx4SP01XosJECDQgwQE+nvQxdQVAgQIlATWrloc+aFUTuCFDY9GfigECBAgQIAAAQIECBAgQIAAgUoLTJw0KS644NNxxBFHCPRXGld9FReYPGlynHD8CdG/f/+K161CAgQIEOi6gEB/163sSYAAgV1WYMyYMTFgQPMu2z4NI7ClwKhRo2PgQMsgbOniNQECBAgQIECAAAECBAg0rsBRRx0V+aEQIECAAAECBLoiINDfFSX7ECBAYBcXGDtuXJz7rnfFkCFDYu7cubFqlbXQd/FL1tDNmz59Wpx11tkxNaV5UwgQIECAAAECBAgQIECAAAECBAgQIECAAIEdF+i1IZUdP6zzI9asXdf5G7YSIECAQE0EHnzwgXho5kOxYsWKmpzPSQh0R2DGjBlxwIEHxqBBg7pzuGMIECBAgAABAgQIECBAgAABAgQIECBAgEDDCwj0N/xHAAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1JNA73pqrLYSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFGFxDob/RPgP4TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQF0JCPTX1eXSWAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBodAGB/kb/BOg/AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNSVgEB/XV0ujSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBRhcQ6G/0T4D+EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdCQj019Xl0lgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaHQBgf5G/wToPwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUlYBAf11dLo0lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUYXEOhv9E+A/hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQkI9NfV5dJYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGh0AYH+Rv8E6D8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1JWAQH9dXS6NJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFGFxDob/RPgP4TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQF0JCPTX1eXSWAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBodAGB/kb/BOg/AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNSVgEB/XV0ujSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBRhcQ6G/0T4D+EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdCQj019Xl0lgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaHQBgf5G/wToPwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUlYBAf11dLo0lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUYXEOhv9E+A/hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQkI9NfV5dJYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGh0AYH+Rv8E6D8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1JWAQH9dXS6NJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFGFxDob/RPgP4TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQF0JCPTX1eXSWAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBodAGB/kb/BOg/AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNSVgEB/XV0ujSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBRhcQ6G/0T4D+EyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdCQj019Xl0lgCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaHQBgf5G/wToPwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjUlYBAf11dLo0lQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUYXEOhv9E+A/hMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQkI9NfV5dJYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGh0AYH+Rv8E6D8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1JWAQH9dXS6NJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFGFxDob/RPgP4TIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQF0JCPTX1eXSWAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBodAGB/kb/BOg/AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNSVgEB/XV0ujSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBRhfo2+gA5fZ//fr1sXbtusg/FQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRLoLm5f/TtK8RbLd96qtenoMyrtXr1mnjxpcXR0tJSZk0OJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQOcCOcA/buyYGDxYiLdzocba6lNQ5vVubW2NHOxfsWJVmTU5nAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp0LDBjYHBs2bOj8TVsbTkCgv8xLntNjjBo5IgYNGlhmTQ4nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA5wL9+zVF//79On/T1oYT6JVGfVRs2MeatFa9QoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRPoHf1qlYzAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGkBgf5Ki6qPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUUCgv4q4qiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUWEOivtKj6CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAFQUE+quIq2oCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBpAYH+SouqjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVFFAoL+KuKomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVFhDor7So+ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBUFBPqriKtqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQaQGB/kqLqo8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRRQKC/iriqJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClRYQ6K+0qPoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAVBQT6q4iragIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGkBgf5Ki6qPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUUCgv4q4qiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUWEOivtKj6CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAFQUE+quIq2oCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBpAYH+SouqjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVFFAoL+KuKomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVFhDor7So+ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBUFBPqriKtqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQaQGB/kqLqo8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRRQKC/iriqJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClRYQ6K+0qPoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAVBQT6q4iragIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGkBgf5Ki6qPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUUCgv4q4qiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUWEOivtKj6CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAFQUE+quIq2oCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBpAYH+SouqjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVFFAoL+KuKomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVFhDor7So+ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBUFBPqriKtqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQaQGB/kqLqo8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRRQKC/iriqJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClRYQ6K+0qPoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAVBQT6q4iragIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGkBgf5Ki6qPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUUCgv4q4qiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABApUWEOivtKj6CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAFQUE+quIq2oCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBpAYH+SouqjwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIVFFAoL+KuKomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKVFhDor7So+ggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQBUFBPqriKtqAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQaQGB/kqLqo8AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECFRRQKC/iriqJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEClRYQ6K+0qPoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEAVBQT6q4iragIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUGkBgf5Ki6qPAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhUUaBvFetWNQECBAgQIECAAAECBAgQIECAAAECBAgQINAFgWXLlsaSJUtjQ2trF/a2C4GdJ7Db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QAABBBAQAv3X+Jdgtymx7prN36VLFxk4cKAEBdc/A9/blHXv2auXDBkyRNavX+ec2Reff272ex/kDMA7f3D54FmHtPmYmFiZOXOmnDx5woy/wQTCs11GcP+xrclMX7DgPunapau8/fbbsmnTRklNTbWZ8dXP0PL83c0Ch759+sqDDz0o403pfw2suzYN+mu1AEfz8vKs8t1xvKHvutBi9KhRcu+998o//vEPSUlJueJQPt5VtxTQ767zc3eyl3lOdVl0EWAWbtwyfry0j24vH374oSxbukyOHTtqF0pUH9fLbM0QHR1tF2JMnzFD5s2b1yhVHKpfh+8IIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIHDjCxDov8ZnGGn2tNd97EeMHGFH6mMy5ocPv/i5IUMHBQXJE088Ib3iezlP10Bx9eDz1KnTpFNcnC0Jrx3jOncWDRZfqekY403g2d+U009IWGSCzsdMwD7fBK29JNgsTBibONbuIV99DJ2TlqHvnZAgixctkqNHj0ra+TTJyc6R8vIy210z5LVU/8iRI2XChIkSGxvrNhg+/hZzfT9/KSgssOfFm+oHukCgMZsGzL///adNZnyc2WJgp+TkmnmWldt7DA8PE18/P+fltJz//PnzJd+U9Nc22lQwCAoOcv7u7kOCcbjLZNyfSzlnf9bqBernrum99evX33oMHzZctmzdIklnkiQvP09024fy8nLzPAIkzMyrX79+Mnr0GPP3Z7hbO3fjcwwBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBG4+AQL91/jMp06bJvpqrOZngtB33HmnfV1pTC2n35DmZ4L8mmU+fMQIuXD+vGRmZYq3l7fonvIR4eFVguCu4+sigjizsOCxb37TbimQn5dns+VLSi/uKR8WFi5RUe3Eu1qGvOsY+vnrJtNeX03ZPHWuZuHD98zWARkZGbYCgW450KZNG7PvfVu7vYLj+l27dZPf/u55x9c6vet2BvqqT4uMbCOzZs+2r+LiYklPT7cVFcpKyyQkNFQiIyLse33GpC8CCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCNycAgT6b87nLlpWXisC6Ku+TSsDBIeESA/zaslNFydolQF9taSmizm04oG+aAgggAACCCCAAAIIIIAAAggggAACCCCA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poVrrsVRo0DX/q1p3+ZnZkiIdWwXnHV1jXuTrbd7fzq46/HUfUAnRu8GAgQIECBAgAABAgQIEDj1AgL9p95YCQQIEGiawKyF56Y1V/1SmrP4gqbVYSIXHI3fXR2bhwT6L5r6ivTsWa+ayIfV1Lrfsf9jaW/vhlyHo4H+plZG4QQIECAwoQUmTWlL81c9N134k2+Z0MfRzMpvf/xbQwL9M9pX8qzjhBzc/URad9cnBPrrMJSVAAECBAgQIECAAAECBKoXEOiv3sqWBAgQmHACMcpt9qLz0rwVV0y4uo+HCrdOmppaJ08bUpX5k89Kq6ZdNeQ5v1QvcE/Lp6vf2JYECBAgQOAEAvE9PbN9leucExid7KXOPeuHbDJ56iyeQ0TK/dLaOiVNNZNWOTRbEyBAgAABAgQIECBAgEDNAq0155SRAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaLiAQH/DyRVIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqFxDor91OTgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HABgf6GkyuQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjULiDQX7udnAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoOECAv0NJ1cgAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoXUCgv3Y7OQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQMMFBPobTq5AAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQu4BAf+12chIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYYLCPQ3nFyBBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgdgGB/trt5CRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0XEOhvOLkCCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA7QIC/bXbyUmAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBouINDfcHIFEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB2gUE+mu3k5MAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRcQKC/4eQKJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECtQsI9NduJycBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGi4gEB/w8kVSIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEahcQ6K/dTk4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBwAYH+hpMrkAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1C4g0F+7nZwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDhAgL9DSdXIAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqF1AoL92OzkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDDBQT6G06uQAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgULuAQH/tdnISIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGGCwj0N5xcgQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoHYBgf7a7eQkQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINFxDobzi5AgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQO0CAv2128lJgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQaLiDQ33ByBRIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgdoFBPprt5OTAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0XECgv+HkCiRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABArULCPTXbicnAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBouIBAf8PJFUiAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBGoXEOiv3U5OAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQcAGB/oaTK5AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNQuINBfu52cBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg4QIC/Q0nVyABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEKhdQKC/djs5CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAwwUE+htOrkACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFC7gEB/7XZyEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhgsI9DecXIEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKB2AYH+2u3kJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDRcQ6G84uQIJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDtAgL9tdvJSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEGi4g0N9wcgUSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHaBQT6a7eT3lKUhQAAQABJREFUkwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINFxAoL/h5AokQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK1Cwj0124nJwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaLiAQH/DyRVIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRqFxDor91OTgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0HABgf6GkyuQAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjULiDQX7udnAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoOECAv0NJ1cgAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoXUCgv3Y7OQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQMMFBPobTq5AAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQu4BAf+12chIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYYLCPQ3nFyBBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgdgGB/trt5CRAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0XEOhvOLkCCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA7QIC/bXbyUmAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBouINDfcHIFEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB2gUE+mu3k5MAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRcQKC/4eQKJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECtQsI9NduJycBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGi4gEB/w8kVSIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEahcQ6K/dTk4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINBwAYH+hpMrkAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1C4g0F+7nZwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKDhAgL9DSdXIAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqF1AoL92OzkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDDBSY3vEQFEiBAgAABAgQIECBAgAABAgQIECBAgAABAicU6Nj2QOo+uOOE23hxdIGBgf4hL27uuTfN7l6SprRMH/K8X6oVGKh2Q9sRIECAQIMEBPobBK0YAgQIECBAgAABAgQIECBAgAABAgQIECBQjUDHtvvTj77wltTSalLearxG2qana18a6D9y7KU7Dn80/bDnU6kl/08qL9A70JX60zOe5fcgBwECBAiMtYBA/1iL2h8BAgQIECBAgAABAgQIECBAgAABAgQIEKhDoL/vcB7Nv72OPcg6XKA7daTugY7hT/udAAECBAhMWAHdASfsqVNxAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEDgTBQT6z8Sz7pgJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYMIKmLp/wp46FSdAgAABAgQIECBAgAABAgQIECBAgACB01Fg9qLz0kUveXtqm7X4dDy8hhzTvV/9k7Rvyz1poP/ouvIva3tHOrvt2jSlpa0h5Z9OhQykgXTXwf+b7ur9ROpPRz1Pp+NzLAQIEJioAgL9E/XMqTcBAgSqEOjq2JK2PXpzOrDzsSq2tslwgY5tD6YwHJzW93w/Tdo/dfBT/l1CYF3f7elwOlgih00JECBAgMDoAocP7Ukb7v7U6Bt45YQCezb9aMjr3Qd38hwiUu6Xro7N6dC+TeUy2ZoAAQIECIwiMHna7DR/xRVpxrzVo2zh6ZMJTJ3enjdpObbZ4innpbOnPy8H+mcce84/qhMYyOH9J7q+k1LvM57V5bQVAQIECJxKAYH+U6lr3wQIEGiywMHdT6T1d30itU7RU7mWU9HXfSD1du8bkvXB3q+kJ/tuG/KcX6oX2D+wJd8a9lafwZYECBAgQGAUgb6eQ2nXutvSvq33jbKFp08m0Hd4aOe7ro6N6aFv/dXJsnl9FIH+vsOpt2voteMom3qaAAECBAgQIECAAAECBAjULSDQXzehHRAgQGD8ChzJDeBd+UcaO4HOtDN1Duwcux3aEwECBAgQIFCTwEB/Xzrcuav4qWkHMh0ncKS3O3XufvK45z1BgAABAgQIECBAgAABAgQIjD+B1vFXJTUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIERhMwon80Gc8TIEDgNBBom7UkzV78rDSlWJPsNDigJhzCng13pu6D24+VvKLl8jS/9axjv/tHOYG9AxvTjv5HUk/qLJfR1gQIECBAYASB6ak9rZ103QiveKoagX0Dm9PG/ruObTojLUjnTnrBsd/9o5xA18D+tH3g4XRgYGu5jLYmQIAAAQIECBAgQIAAAQI1CAj014AmCwECBCaKwKyF56Q1V/5SmrPkwolS5XFVz66OzenQ3o1DAv0XTntFunTmq8dVPSdSZW7f/5G0u39drrJA/0Q6b+pKgACB8SgwJU1PayY9L72s/e3jsXoTok6PHLo5bex6JtA/r2U1zzrO3I6ex9IdnR8T6K/DUFYCBAgQIECAAAECBAgQqF5AoL96K1sSIEBgwglMbpuTZi08N7Uvu2TC1X08VLilpTW1Tp46pCrzJq1My6ddNuQ5v1QvMK1lVvUb25IAAQIECJxAoDVNSe2tvpdPQHTSlyIwPThNa5npOmcwSOl/t6TpXXNT6i+dUQYCBAgQIECAAAECBAgQIFBaoLV0DhkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBpgkI9DeNXsEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKC8gEB/eTM5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA0wQE+ptGr2ACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBeQKC/vJkcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgaQIC/U2jVzABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgvINBf3kwOAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQNAGB/qbRK5gAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQXEOgvbyYHAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBomoBAf9PoFUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMoLCPSXN5ODAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0TUCgv2n0CiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUFBPrLm8lBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaJiDQ3zR6BRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfICAv3lzeQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNExDobxq9ggkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHkBgf7yZnIQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGmCQj0N41ewQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoLyAQH95MzkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDTBAT6m0avYAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUF5AoL+8mRwECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBpAgL9TaNXMAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKC8g0F/eTA4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINA0AYH+ptErmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIlBcQ6C9vJgcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGiagEB/0+gVTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEygsI9Jc3k4MAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECDRNQKC/afQKJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC5QUE+subyUGAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJomINDfNHoFEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB8gIC/eXN5CBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAk0TEOhvGr2CCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAeQGB/vJmchAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgaYJCPQ3jV7BBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgvIBAf3kzOQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQNMEBPqbRq9gAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQXkCgv7yZHAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoGkCAv1No1cwAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoLyDQX95MDgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0DQBgf6m0SuYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiUFxDoL28mBwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJqAQH/T6BVMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTKCwj0lzeTgwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINE1AoL9p9AomQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLlBQT6y5vJQYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiYg0N80egUTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHyAgL95c3kIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECTRMQ6G8avYIJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEB5AYH+8mZyECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBpgkI9DeNXsEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKC8gEB/eTM5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBA0wQE+ptGr2ACBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBeQKC/vJkcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgaQIC/U2jVzABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgvINBf3kwOAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQNAGB/qbRK5gAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECJQXEOgvbyYHAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBomoBAf9PoFUyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMoLCPSXN5ODAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg0TUCgv2n0CiZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAuUFBPrLm8lBgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaJiDQ3zR6BRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfICAv3lzeQgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJNExDobxq9ggkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQHkBgf7yZnIQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIGmCQj0N41ewQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoLyAQH95MzkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEDTBAT6m0avYAIE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"
}
},
"cell_type": "markdown",
"id": "f46e0a4f-8dc4-4a35-ba74-5befc6257f44",
"metadata": {},
"source": [
"![download.png](attachment:09ec515a-24ed-4ae5-bb0a-50c19a524af2.png)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "e3031556-48ef-44c6-bb0f-c8a6b24c6c4d",
"metadata": {},
"outputs": [],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"import sys\n",
"# in our container image, MaxText is available in /deps\n",
"sys.path.append('/deps/MaxText')\n",
"from MaxText import pyconfig\n",
"from MaxText.train import train_loop, setup_train_loop, train_step, load_next_batch\n",
"from MaxText import maxtext_utils\n",
"from flax.linen import partitioning as nn_partitioning\n",
"import jax\n",
"import os\n",
"\n",
"def config_llama7b_model(\n",
" ici_fsdp_parallelism=-1,\n",
" ici_fsdp_transpose_parallelism=1,\n",
" ici_tensor_parallelism=1,\n",
" per_device_batch_size=1,\n",
"):\n",
" argv = [\n",
" 'dummy_placeholder',\n",
" 'MaxText/configs/base.yml',\n",
" 'model_name=llama2-7b',\n",
" f'per_device_batch_size={per_device_batch_size}',\n",
" 'steps=5',\n",
" 'dataset_type=tfds',\n",
" 'enable_checkpointing=false',\n",
" 'max_target_length=4096',\n",
" f'ici_fsdp_parallelism={ici_fsdp_parallelism}',\n",
" f'ici_fsdp_transpose_parallelism={ici_fsdp_transpose_parallelism}',\n",
" f'ici_tensor_parallelism={ici_tensor_parallelism}',\n",
" 'base_output_directory=gs://opmusw4/ipp/maxtext/llama2-7b/',\n",
" 'run_name=demo-test',\n",
" 'dataset_path=gs://maxtext-dataset',\n",
" 'attention=dot_product',\n",
" 'remat_policy=full',\n",
" ]\n",
" pyconfig.initialize(argv)\n",
" config = pyconfig.config\n",
" os.environ['TFDS_DATA_DIR'] = config.dataset_path\n",
" os.environ['LIBTPU_INIT_ARGS'] = (\n",
" '--xla_enable_async_all_gather=true TPU_MEGACORE=MEGACORE_DENSE'\n",
" )\n",
" (\n",
" init_rng,\n",
" writer,\n",
" checkpoint_manager,\n",
" state_mesh_annotations,\n",
" model,\n",
" mesh,\n",
" learning_rate_schedule,\n",
" data_iterator,\n",
" eval_data_iterator,\n",
" state,\n",
" ) = setup_train_loop(config)\n",
" (\n",
" functional_train,\n",
" in_shard_train,\n",
" out_shard_train,\n",
" static_argnums_train,\n",
" donate_argnums_train,\n",
" ) = maxtext_utils.get_functional_train_with_signature(\n",
" train_step, mesh, state_mesh_annotations, model, config\n",
" )\n",
" p_train_step = jax.jit(\n",
" functional_train,\n",
" in_shardings=in_shard_train,\n",
" out_shardings=out_shard_train,\n",
" static_argnums=static_argnums_train,\n",
" donate_argnums=donate_argnums_train,\n",
" )\n",
" return config, init_rng, data_iterator, state, p_train_step, mesh"
]
},
{
"cell_type": "markdown",
"id": "3d84c92d-a8e0-49e7-84d8-c83560ae73df",
"metadata": {},
"source": [
"Line 64 above is where we invoke the [JAX just-in-time compiler](https://jax.readthedocs.io/en/latest/jit-compilation.html) to compile a JAX Python function so it can be executed efficiently in XLA.\n",
"\n",
"JAX compilation was designed to work with pure functions and this can lead to some [interesting challenges](https://jax.readthedocs.io/en/latest/notebooks/Common_Gotchas_in_JAX.html#) so do read up before diving in. The [MaxText README](https://github.com/google/maxtext/blob/b314957fcfc0410aa0cafb734706f6f27020a67c/README.md#ahead-of-time-compilation-aot-tpu-only) also shares examples of how we can use AOT (ahead of time) compilation to find issues before the target hardware becomes available (e.g., on your CPU).\n",
"\n",
"Let's try it out!"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "afa8834c-abc8-4500-9345-a08a6a4905b7",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:1] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 4\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 4\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 4, 1, 1, 4, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:3] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 4\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 4\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 4, 1, 1, 4, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:0] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 4\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 4\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 4, 1, 1, 4, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 4\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 4\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 4, 1, 1, 4, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:3] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:1] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:0] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:2] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 100%|██████████| 4/4 [00:01<00:00, 2.68tasks/s]\n"
]
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"config, init_rng, data_iterator, state, p_train_step, mesh = (\n",
" config_llama7b_model(\n",
" ici_fsdp_parallelism=4,\n",
" ici_fsdp_transpose_parallelism=1,\n",
" ici_tensor_parallelism=4,\n",
" per_device_batch_size=1\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"id": "7cf5e375-1c5e-474d-8cd4-1df58550cbf5",
"metadata": {},
"source": [
"## Run some training steps\n",
"Now that we have our data in place, let's try to run some training steps."
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "cfd7c20b-1509-4b02-91e5-91984154ba1a",
"metadata": {},
"outputs": [],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"import time\n",
"import max_utils\n",
"from train import get_first_step\n",
"\n",
"# https://cloud.google.com/tpu/docs/v5e - 197 for v5e\n",
"TPU_V5e_PEAK_TFLOPS = 197.0\n",
"\n",
"def train(config, init_rng, data_iterator, state, p_train_step, mesh):\n",
" num_model_parameters = max_utils.calculate_num_params_from_pytree(\n",
" state.params\n",
" )\n",
" # print(f'number parameters: {num_model_parameters/1e9:.3f} billion')\n",
" per_device_tflops, _, _ = maxtext_utils.calculate_tflops_training_per_device(config)\n",
" example_batch = None\n",
" last_step_finish = time.time()\n",
" tflops_per_devices = []\n",
" start_step = get_first_step(state)\n",
" num_steps = 20\n",
" for step in range(start_step, start_step + num_steps):\n",
" with jax.profiler.StepTraceAnnotation(\"train\", step_num=step):\n",
" nextrng = jax.jit(jax.random.fold_in)(init_rng, step)\n",
" example_batch = load_next_batch(data_iterator, example_batch, config)\n",
" with mesh, nn_partitioning.axis_rules(config.logical_axis_rules):\n",
" state, metrics = p_train_step(state, example_batch, nextrng)\n",
" step_finish = time.time()\n",
" step_time = step_finish - last_step_finish\n",
" tflops_per_devices.append(per_device_tflops / step_time)\n",
" if step==start_step:\n",
" print(f\" step={step: 02d} loss={metrics['scalar']['learning/loss']:.5f} step_time={step_time:.2f}s\") \n",
" else:\n",
" print(\n",
" f\" step={step: 02d} loss={metrics['scalar']['learning/loss']:.5f} step_time={step_time:.2f}s\"\n",
" f\" TFLOP/s/device:{per_device_tflops/step_time:.3f}, eMFU:\"\n",
" f\" {per_device_tflops/step_time/TPU_V5e_PEAK_TFLOPS*100:.2f}%\")\n",
" last_step_finish = step_finish\n",
" print(f'Parallelism (fsdp={config.ici_fsdp_parallelism}, '\n",
" f'transpose={config.ici_fsdp_transpose_parallelism}, '\n",
" f'tensor={config.ici_tensor_parallelism}); {num_steps} steps, '\n",
" f\"loss={metrics['scalar']['learning/loss']:.5f}, \"\n",
" f'step_time={step_time:.2f}s,',\n",
" f'eMFU={per_device_tflops/step_time/TPU_V5e_PEAK_TFLOPS*100:.2f}%')\n",
"\n",
" return sum(tflops_per_devices[-3:]) / len(tflops_per_devices[-3:]), state"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "c3ae6b27-c69d-4d52-b6fe-ffa449d54c65",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:3] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82477 step_time=9.10s\n",
" step= 1 loss=10.74619 step_time=4.26s TFLOP/s/device:44.318, eMFU: 22.50%\n",
" step= 2 loss=11.10764 step_time=3.18s TFLOP/s/device:59.306, eMFU: 30.10%\n",
" step= 3 loss=10.73281 step_time=3.17s TFLOP/s/device:59.572, eMFU: 30.24%\n",
" step= 4 loss=10.04965 step_time=3.17s TFLOP/s/device:59.611, eMFU: 30.26%\n",
" step= 5 loss=9.77972 step_time=3.17s TFLOP/s/device:59.584, eMFU: 30.25%\n",
" step= 6 loss=9.58509 step_time=3.17s TFLOP/s/device:59.624, eMFU: 30.27%\n",
" step= 7 loss=9.43253 step_time=3.17s TFLOP/s/device:59.603, eMFU: 30.26%\n",
" step= 8 loss=8.99779 step_time=3.17s TFLOP/s/device:59.603, eMFU: 30.26%\n",
" step= 9 loss=9.25011 step_time=3.17s TFLOP/s/device:59.561, eMFU: 30.23%\n",
" step= 10 loss=12.71937 step_time=3.17s TFLOP/s/device:59.612, eMFU: 30.26%\n",
" step= 11 loss=10.92250 step_time=3.17s TFLOP/s/device:59.609, eMFU: 30.26%\n",
" step= 12 loss=9.34341 step_time=3.17s TFLOP/s/device:59.618, eMFU: 30.26%\n",
" step= 13 loss=8.45162 step_time=3.17s TFLOP/s/device:59.602, eMFU: 30.26%\n",
" step= 14 loss=8.24009 step_time=3.17s TFLOP/s/device:59.625, eMFU: 30.27%\n",
" step= 15 loss=8.13112 step_time=3.17s TFLOP/s/device:59.589, eMFU: 30.25%\n",
" step= 16 loss=8.20177 step_time=3.18s TFLOP/s/device:59.346, eMFU: 30.12%\n",
" step= 17 loss=8.12323 step_time=3.17s TFLOP/s/device:59.611, eMFU: 30.26%\n",
" step= 18 loss=8.03848 step_time=3.17s TFLOP/s/device:59.619, eMFU: 30.26%\n",
" step= 19 loss=8.01624 step_time=3.17s TFLOP/s/device:59.563, eMFU: 30.23%\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.23%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:1] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82477 step_time=8.79s\n",
" step= 1 loss=10.74619 step_time=4.57s TFLOP/s/device:41.275, eMFU: 20.95%\n",
" step= 2 loss=11.10764 step_time=3.18s TFLOP/s/device:59.334, eMFU: 30.12%\n",
" step= 3 loss=10.73281 step_time=3.17s TFLOP/s/device:59.615, eMFU: 30.26%\n",
" step= 4 loss=10.04965 step_time=3.17s TFLOP/s/device:59.603, eMFU: 30.26%\n",
" step= 5 loss=9.77972 step_time=3.17s TFLOP/s/device:59.592, eMFU: 30.25%\n",
" step= 6 loss=9.58509 step_time=3.17s TFLOP/s/device:59.599, eMFU: 30.25%\n",
" step= 7 loss=9.43253 step_time=3.17s TFLOP/s/device:59.607, eMFU: 30.26%\n",
" step= 8 loss=8.99779 step_time=3.17s TFLOP/s/device:59.592, eMFU: 30.25%\n",
" step= 9 loss=9.25011 step_time=3.17s TFLOP/s/device:59.605, eMFU: 30.26%\n",
" step= 10 loss=12.71937 step_time=3.17s TFLOP/s/device:59.586, eMFU: 30.25%\n",
" step= 11 loss=10.92250 step_time=3.17s TFLOP/s/device:59.618, eMFU: 30.26%\n",
" step= 12 loss=9.34341 step_time=3.17s TFLOP/s/device:59.600, eMFU: 30.25%\n",
" step= 13 loss=8.45162 step_time=3.17s TFLOP/s/device:59.609, eMFU: 30.26%\n",
" step= 14 loss=8.24009 step_time=3.17s TFLOP/s/device:59.586, eMFU: 30.25%\n",
" step= 15 loss=8.13112 step_time=3.17s TFLOP/s/device:59.620, eMFU: 30.26%\n",
" step= 16 loss=8.20177 step_time=3.18s TFLOP/s/device:59.354, eMFU: 30.13%\n",
" step= 17 loss=8.12323 step_time=3.17s TFLOP/s/device:59.611, eMFU: 30.26%\n",
" step= 18 loss=8.03848 step_time=3.17s TFLOP/s/device:59.573, eMFU: 30.24%\n",
" step= 19 loss=8.01624 step_time=3.17s TFLOP/s/device:59.575, eMFU: 30.24%\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.24%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:0] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82477 step_time=10.19s\n",
" step= 1 loss=10.74619 step_time=3.17s TFLOP/s/device:59.478, eMFU: 30.19%\n",
" step= 2 loss=11.10764 step_time=3.18s TFLOP/s/device:59.329, eMFU: 30.12%\n",
" step= 3 loss=10.73281 step_time=3.17s TFLOP/s/device:59.582, eMFU: 30.24%\n",
" step= 4 loss=10.04965 step_time=3.17s TFLOP/s/device:59.591, eMFU: 30.25%\n",
" step= 5 loss=9.77972 step_time=3.17s TFLOP/s/device:59.621, eMFU: 30.26%\n",
" step= 6 loss=9.58509 step_time=3.17s TFLOP/s/device:59.582, eMFU: 30.24%\n",
" step= 7 loss=9.43253 step_time=3.17s TFLOP/s/device:59.616, eMFU: 30.26%\n",
" step= 8 loss=8.99779 step_time=3.17s TFLOP/s/device:59.620, eMFU: 30.26%\n",
" step= 9 loss=9.25011 step_time=3.17s TFLOP/s/device:59.558, eMFU: 30.23%\n",
" step= 10 loss=12.71937 step_time=3.17s TFLOP/s/device:59.613, eMFU: 30.26%\n",
" step= 11 loss=10.92250 step_time=3.17s TFLOP/s/device:59.615, eMFU: 30.26%\n",
" step= 12 loss=9.34341 step_time=3.17s TFLOP/s/device:59.581, eMFU: 30.24%\n",
" step= 13 loss=8.45162 step_time=3.17s TFLOP/s/device:59.625, eMFU: 30.27%\n",
" step= 14 loss=8.24009 step_time=3.17s TFLOP/s/device:59.621, eMFU: 30.26%\n",
" step= 15 loss=8.13112 step_time=3.17s TFLOP/s/device:59.590, eMFU: 30.25%\n",
" step= 16 loss=8.20177 step_time=3.18s TFLOP/s/device:59.353, eMFU: 30.13%\n",
" step= 17 loss=8.12323 step_time=3.17s TFLOP/s/device:59.595, eMFU: 30.25%\n",
" step= 18 loss=8.03848 step_time=3.17s TFLOP/s/device:59.604, eMFU: 30.26%\n",
" step= 19 loss=8.01624 step_time=3.17s TFLOP/s/device:59.606, eMFU: 30.26%\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.26%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82477 step_time=9.15s\n",
" step= 1 loss=10.74619 step_time=4.21s TFLOP/s/device:44.872, eMFU: 22.78%\n",
" step= 2 loss=11.10764 step_time=3.18s TFLOP/s/device:59.369, eMFU: 30.14%\n",
" step= 3 loss=10.73281 step_time=3.17s TFLOP/s/device:59.592, eMFU: 30.25%\n",
" step= 4 loss=10.04965 step_time=3.17s TFLOP/s/device:59.599, eMFU: 30.25%\n",
" step= 5 loss=9.77972 step_time=3.17s TFLOP/s/device:59.601, eMFU: 30.25%\n",
" step= 6 loss=9.58509 step_time=3.17s TFLOP/s/device:59.589, eMFU: 30.25%\n",
" step= 7 loss=9.43253 step_time=3.17s TFLOP/s/device:59.608, eMFU: 30.26%\n",
" step= 8 loss=8.99779 step_time=3.17s TFLOP/s/device:59.584, eMFU: 30.25%\n",
" step= 9 loss=9.25011 step_time=3.17s TFLOP/s/device:59.610, eMFU: 30.26%\n",
" step= 10 loss=12.71937 step_time=3.17s TFLOP/s/device:59.602, eMFU: 30.25%\n",
" step= 11 loss=10.92250 step_time=3.17s TFLOP/s/device:59.597, eMFU: 30.25%\n",
" step= 12 loss=9.34341 step_time=3.17s TFLOP/s/device:59.622, eMFU: 30.26%\n",
" step= 13 loss=8.45162 step_time=3.17s TFLOP/s/device:59.600, eMFU: 30.25%\n",
" step= 14 loss=8.24009 step_time=3.17s TFLOP/s/device:59.620, eMFU: 30.26%\n",
" step= 15 loss=8.13112 step_time=3.18s TFLOP/s/device:59.295, eMFU: 30.10%\n",
" step= 16 loss=8.20177 step_time=3.16s TFLOP/s/device:59.647, eMFU: 30.28%\n",
" step= 17 loss=8.12323 step_time=3.17s TFLOP/s/device:59.617, eMFU: 30.26%\n",
" step= 18 loss=8.03848 step_time=3.17s TFLOP/s/device:59.590, eMFU: 30.25%\n",
" step= 19 loss=8.01624 step_time=3.17s TFLOP/s/device:59.605, eMFU: 30.26%\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.26%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:05<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:1] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:05<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:3] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:05<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:2] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:06<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:0] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 100%|██████████| 4/4 [01:11<00:00, 17.89s/tasks]\n"
]
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"avg_tflops_per_devices, state = train(\n",
" config, init_rng, data_iterator, state, p_train_step, mesh\n",
")\n",
"# jax.profiler.stop_trace()"
]
},
{
"cell_type": "markdown",
"id": "87df7bd2-0135-442f-abe8-f328e7758636",
"metadata": {},
"source": [
"As shown in this output, MaxText estimates the total TFLOPs required per device, per training step ([code](https://github.com/google/maxtext/blob/b314957fcfc0410aa0cafb734706f6f27020a67c/MaxText/maxtext_utils.py#L99)).\n",
"```\n",
"Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
"```\n",
"We also see that our approach leads to a typical step time of ``3.17s`` and an effective MFU of (approximately) ``30%``.\n",
"```\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.25%\n",
"```\n"
]
},
{
"cell_type": "markdown",
"id": "bdabf641-a2e5-4438-af34-2214d1e6e14d",
"metadata": {},
"source": [
"## Change parallelism strategy\n",
"So what if we changed from 4-way data/4-way tensor to just 16-way data parallelism? "
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "d756894c-11de-4db8-9be0-b9eee2553b81",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:0] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 16\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 1\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 16, 1, 1, 1, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 16\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 1\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 16, 1, 1, 1, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:1] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 16\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 1\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 16, 1, 1, 1, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:3] Updating keys from env and command line: ['run_name', 'model_name', 'enable_checkpointing', 'remat_policy', 'attention', 'base_output_directory', 'ici_fsdp_parallelism', 'ici_fsdp_transpose_parallelism', 'ici_tensor_parallelism', 'per_device_batch_size', 'dataset_type', 'dataset_path', 'steps', 'max_target_length']\n",
"Running Model: llama2-7b\n",
"Updating following parameters in config\n",
"\n",
"base_emb_dim: 4096\n",
"base_num_query_heads: 32\n",
"base_num_kv_heads: 32\n",
"base_mlp_dim: 11008\n",
"base_num_decoder_layers: 32\n",
"head_dim: 128\n",
"mlp_activations: ['silu', 'linear']\n",
"vocab_size: 32000\n",
"enable_dropout: False\n",
"logits_via_embedding: False\n",
"normalization_layer_epsilon: 1e-05\n",
"decoder_block: llama2\n",
"logical_axis_rules: [['norm', 'fsdp']]\n",
"Updating keys from model: ['base_emb_dim', 'base_num_query_heads', 'base_num_kv_heads', 'base_mlp_dim', 'base_num_decoder_layers', 'head_dim', 'mlp_activations', 'vocab_size', 'enable_dropout', 'logits_via_embedding', 'normalization_layer_epsilon', 'decoder_block', 'logical_axis_rules']\n",
"System Information: Jax Version: 0.4.30\n",
"System Information: Jaxlib Version: 0.4.30\n",
"System Information: Jax Backend: PJRT C API\n",
"TFRT TPU v5 lite\n",
"Built on Jun 17 2024 03:03:47 (1718618627) cl/643897370\n",
"Not using emergency checkpoint, ignoring local_checkpoint_directory and local_checkpoint_period\n",
"dataset_type set to tfds, will use keys['dataset_path']='gs://maxtext-dataset' and keys['dataset_name']='c4/en:3.0.1'\n",
"Config param adam_b1: 0.9\n",
"Config param adam_b2: 0.95\n",
"Config param adam_eps: 1e-08\n",
"Config param adam_eps_root: 0.0\n",
"Config param adam_weight_decay: 0.1\n",
"Config param allow_split_physical_axes: False\n",
"Config param ar_cache_axis_order: 1,2,0,3\n",
"Config param async_checkpointing: True\n",
"Config param attention: dot_product\n",
"Config param autoregressive_decode_assert: \n",
"Config param base_emb_dim: 4096\n",
"Config param base_mlp_dim: 11008\n",
"Config param base_num_decoder_layers: 32\n",
"Config param base_num_kv_heads: 32\n",
"Config param base_num_query_heads: 32\n",
"Config param base_output_directory: gs://opmusw4/ipp/maxtext/llama2-7b/\n",
"Config param checkpoint_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/checkpoints/\n",
"Config param checkpoint_is_quantized: False\n",
"Config param checkpoint_period: 10000\n",
"Config param collect_stack_trace: False\n",
"Config param compile_topology: \n",
"Config param compile_topology_num_slices: -1\n",
"Config param compiled_trainstep_file: \n",
"Config param compute_axis_order: 0,1,2,3\n",
"Config param cosine_learning_rate_final_fraction: 0.1\n",
"Config param data_sharding: (('data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive'),)\n",
"Config param data_shuffle_seed: 0\n",
"Config param dataset_name: c4/en:3.0.1\n",
"Config param dataset_path: gs://maxtext-dataset\n",
"Config param dataset_type: tfds\n",
"Config param dcn_autoregressive_parallelism: 1\n",
"Config param dcn_data_parallelism: -1\n",
"Config param dcn_fsdp_parallelism: 1\n",
"Config param dcn_fsdp_transpose_parallelism: 1\n",
"Config param dcn_pipeline_parallelism: 1\n",
"Config param dcn_sequence_parallelism: 1\n",
"Config param dcn_tensor_parallelism: 1\n",
"Config param decode_sampling_nucleus_p: -1\n",
"Config param decode_sampling_strategy: greedy\n",
"Config param decode_sampling_temperature: 1.0\n",
"Config param decode_sampling_top_k: 0\n",
"Config param decoder_block: llama2\n",
"Config param dropout_rate: 0\n",
"Config param dtype: bfloat16\n",
"Config param emb_dim: 4096\n",
"Config param enable_checkpoint_cloud_logger: False\n",
"Config param enable_checkpoint_standard_logger: False\n",
"Config param enable_checkpointing: False\n",
"Config param enable_data_shuffling: True\n",
"Config param enable_dropout: False\n",
"Config param enable_emergency_checkpoint: False\n",
"Config param enable_goodput_recording: False\n",
"Config param enable_jax_profiler: False\n",
"Config param enable_single_controller: False\n",
"Config param enable_single_replica_ckpt_restoring: False\n",
"Config param eval_batch_num: -1\n",
"Config param eval_dataset_name: c4/en:3.0.1\n",
"Config param eval_interval: -1\n",
"Config param eval_per_device_batch_size: 0\n",
"Config param eval_split: validation\n",
"Config param expansion_factor_real_data: -1\n",
"Config param force_unroll: False\n",
"Config param fused_mlp: False\n",
"Config param fused_qkv: False\n",
"Config param gcs_metrics: False\n",
"Config param global_batch_size_to_load: 16\n",
"Config param global_batch_size_to_train_on: 16\n",
"Config param global_parameter_scale: 1\n",
"Config param goodput_upload_interval_seconds: 60\n",
"Config param gradient_clipping_threshold: 1.0\n",
"Config param grain_eval_files: \n",
"Config param grain_train_files: \n",
"Config param grain_worker_count: 1\n",
"Config param hardware: tpu\n",
"Config param head_dim: 128\n",
"Config param hf_access_token: \n",
"Config param hf_data_dir: \n",
"Config param hf_eval_files: \n",
"Config param hf_eval_split: \n",
"Config param hf_path: \n",
"Config param hf_train_files: \n",
"Config param ici_autoregressive_parallelism: 1\n",
"Config param ici_data_parallelism: 1\n",
"Config param ici_fsdp_parallelism: 16\n",
"Config param ici_fsdp_transpose_parallelism: 1\n",
"Config param ici_pipeline_parallelism: 1\n",
"Config param ici_sequence_parallelism: 1\n",
"Config param ici_tensor_parallelism: 1\n",
"Config param inference_metadata_file: \n",
"Config param inference_microbenchmark_log_file_path: \n",
"Config param inference_microbenchmark_loop_iters: 10\n",
"Config param inference_microbenchmark_prefill_lengths: 64,128,256,512,1024\n",
"Config param inference_microbenchmark_stages: prefill,generate\n",
"Config param init_weights_seed: 0\n",
"Config param jax_cache_dir: ~/jax_cache\n",
"Config param jax_profiler_port: 9999\n",
"Config param kv_quant_axis: heads_and_dkv\n",
"Config param kv_quant_dtype: int8\n",
"Config param learning_rate: 3e-05\n",
"Config param learning_rate_schedule_steps: 5\n",
"Config param load_from_prefill_dir: False\n",
"Config param load_full_state_path: \n",
"Config param load_parameters_path: \n",
"Config param local_checkpoint_directory: \n",
"Config param local_checkpoint_period: 0\n",
"Config param log_period: 100\n",
"Config param logical_axis_rules: (('activation_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_embed_and_logits_batch', ('stage', 'data', 'fsdp', 'fsdp_transpose')), ('activation_heads', ('tensor', 'sequence')), ('activation_kv_heads', ('tensor', 'sequence')), ('activation_length', 'sequence'), ('activation_embed', 'tensor'), ('activation_mlp', 'tensor'), ('activation_kv', 'tensor'), ('activation_kv_batch', ('data', 'fsdp', 'fsdp_transpose')), ('activation_kv_head_dim', 'tensor'), ('activation_vocab', ('tensor', 'sequence')), ('activation_vocab', 'tensor'), ('activation_vocab', 'sequence'), ('activation_stage', 'stage'), ('mlp', ('fsdp_transpose', 'tensor', 'autoregressive')), ('vocab', ('tensor', 'autoregressive')), ('embed', ('fsdp', 'fsdp_transpose', 'sequence')), ('embed', ('fsdp', 'sequence')), ('heads', ('tensor', 'autoregressive')), ('layers', 'stage'), ('kv', ()), ('kv_heads', ('tensor', 'autoregressive')), ('kv_head_dim', ()), ('cache_batch', ()), ('cache_heads', ('autoregressive', 'tensor')), ('cache_kv', ()), ('cache_sequence', ()), ('norm', 'fsdp'))\n",
"Config param logits_dot_in_fp32: True\n",
"Config param logits_via_embedding: False\n",
"Config param max_checkify: False\n",
"Config param max_corpus_chars: 10000000\n",
"Config param max_prefill_predict_length: 64\n",
"Config param max_target_length: 4096\n",
"Config param megablox: True\n",
"Config param mesh_axes: ['data', 'stage', 'fsdp', 'fsdp_transpose', 'sequence', 'tensor', 'autoregressive']\n",
"Config param metrics_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/metrics/\n",
"Config param metrics_file: \n",
"Config param mlp_activations: ['silu', 'linear']\n",
"Config param mlp_dim: 11008\n",
"Config param model_name: llama2-7b\n",
"Config param monitor_goodput: False\n",
"Config param normalization_layer_epsilon: 1e-05\n",
"Config param normalize_embedding_logits: True\n",
"Config param num_decoder_layers: 32\n",
"Config param num_experts: 1\n",
"Config param num_experts_per_tok: 1\n",
"Config param num_kv_heads: 32\n",
"Config param num_layers_per_pipeline_stage: 1\n",
"Config param num_pipeline_microbatches: -1\n",
"Config param num_pipeline_repeats: -1\n",
"Config param num_query_heads: 32\n",
"Config param num_slices: 1\n",
"Config param opt_type: adamw\n",
"Config param param_scan_axis: 1\n",
"Config param per_device_batch_size: 1.0\n",
"Config param prefill_cache_axis_order: 1,2,0,3\n",
"Config param prefill_cache_dir: \n",
"Config param profiler: \n",
"Config param profiler_steps: 5\n",
"Config param prometheus_port: 0\n",
"Config param prompt: I love to\n",
"Config param quant_cfg_path: \n",
"Config param quantization: \n",
"Config param quantization_local_shard_count: 1\n",
"Config param quantize_kvcache: False\n",
"Config param record_internal_nn_metrics: 0\n",
"Config param remat_policy: full\n",
"Config param reshape_q: False\n",
"Config param reuse_example_batch: 0\n",
"Config param rope_max_timescale: 10000\n",
"Config param rope_min_timescale: 1\n",
"Config param run_name: demo-test\n",
"Config param save_config_to_gcs: False\n",
"Config param save_quantized_params_path: \n",
"Config param scan_layers: True\n",
"Config param scan_pipeline_iterations: True\n",
"Config param skip_first_n_steps_for_profiler: 1\n",
"Config param stack_trace_interval_seconds: 600\n",
"Config param stack_trace_to_cloud: False\n",
"Config param steps: 5\n",
"Config param target_eval_loss: 0.0\n",
"Config param tensorboard_dir: gs://opmusw4/ipp/maxtext/llama2-7b/demo-test/tensorboard/\n",
"Config param tokenizer_path: assets/tokenizer.llama2\n",
"Config param trainable_position_size: -1\n",
"Config param upload_all_profiler_results: False\n",
"Config param use_iota_embed: False\n",
"Config param use_untrainable_positional_embedding: False\n",
"Config param use_vertex_tensorboard: False\n",
"Config param using_pipeline_parallelism: False\n",
"Config param vertex_tensorboard_project: \n",
"Config param vertex_tensorboard_region: \n",
"Config param vocab_size: 32000\n",
"Config param warmup_steps_fraction: 0.1\n",
"Config param weight_dtype: float32\n",
"Num_devices: 16, shape (1, 1, 16, 1, 1, 1, 1)\n",
"Setting up checkpoint logger...\n",
"Checkpointing disabled, not creating checkpoint manager.\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"Tokenizer path: assets/tokenizer.llama2\n",
"No existing checkpoints found, not restoring checkpoint.\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:0] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:1] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:3] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:2] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 100%|██████████| 4/4 [00:01<00:00, 2.82tasks/s]\n"
]
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"config, init_rng, data_iterator, state, p_train_step, mesh = (\n",
" config_llama7b_model(\n",
" ici_fsdp_parallelism=16,\n",
" ici_fsdp_transpose_parallelism=1,\n",
" ici_tensor_parallelism=1,\n",
" per_device_batch_size=1\n",
" )\n",
")"
]
},
{
"cell_type": "markdown",
"id": "ecf5ea9f-9606-4592-9cf3-65e592998d36",
"metadata": {},
"source": [
"Ideally, we'd see our step time go down and our loss stay substantially similar."
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "f04ea0ff-62ea-48a8-9e87-64b06ad874cf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[stdout:1] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82464 step_time=4.40s\n",
" step= 1 loss=10.74638 step_time=2.94s TFLOP/s/device:64.161, eMFU: 32.57%\n",
" step= 2 loss=11.10725 step_time=2.11s TFLOP/s/device:89.570, eMFU: 45.47%\n",
" step= 3 loss=10.73088 step_time=2.10s TFLOP/s/device:89.728, eMFU: 45.55%\n",
" step= 4 loss=10.04863 step_time=2.11s TFLOP/s/device:89.486, eMFU: 45.42%\n",
" step= 5 loss=9.77938 step_time=2.10s TFLOP/s/device:89.793, eMFU: 45.58%\n",
" step= 6 loss=9.58473 step_time=2.10s TFLOP/s/device:89.756, eMFU: 45.56%\n",
" step= 7 loss=9.43211 step_time=2.10s TFLOP/s/device:89.774, eMFU: 45.57%\n",
" step= 8 loss=8.99658 step_time=2.10s TFLOP/s/device:89.742, eMFU: 45.55%\n",
" step= 9 loss=9.29634 step_time=2.10s TFLOP/s/device:89.747, eMFU: 45.56%\n",
" step= 10 loss=12.73707 step_time=2.10s TFLOP/s/device:89.712, eMFU: 45.54%\n",
" step= 11 loss=10.97237 step_time=2.10s TFLOP/s/device:89.750, eMFU: 45.56%\n",
" step= 12 loss=9.27653 step_time=2.10s TFLOP/s/device:89.800, eMFU: 45.58%\n",
" step= 13 loss=8.43188 step_time=2.10s TFLOP/s/device:89.797, eMFU: 45.58%\n",
" step= 14 loss=8.23481 step_time=2.10s TFLOP/s/device:89.808, eMFU: 45.59%\n",
" step= 15 loss=8.13170 step_time=2.10s TFLOP/s/device:89.746, eMFU: 45.56%\n",
" step= 16 loss=8.20371 step_time=2.10s TFLOP/s/device:89.736, eMFU: 45.55%\n",
" step= 17 loss=8.12382 step_time=2.11s TFLOP/s/device:89.624, eMFU: 45.49%\n",
" step= 18 loss=8.03367 step_time=2.10s TFLOP/s/device:89.809, eMFU: 45.59%\n",
" step= 19 loss=8.01734 step_time=2.10s TFLOP/s/device:89.730, eMFU: 45.55%\n",
"Parallelism (fsdp=16, transpose=1, tensor=1); 20 steps, loss=8.01734, step_time=2.10s, eMFU=45.55%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:2] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82464 step_time=5.23s\n",
" step= 1 loss=10.74638 step_time=2.11s TFLOP/s/device:89.355, eMFU: 45.36%\n",
" step= 2 loss=11.10725 step_time=2.11s TFLOP/s/device:89.633, eMFU: 45.50%\n",
" step= 3 loss=10.73088 step_time=2.10s TFLOP/s/device:89.774, eMFU: 45.57%\n",
" step= 4 loss=10.04863 step_time=2.10s TFLOP/s/device:89.723, eMFU: 45.54%\n",
" step= 5 loss=9.77938 step_time=2.11s TFLOP/s/device:89.447, eMFU: 45.40%\n",
" step= 6 loss=9.58473 step_time=2.10s TFLOP/s/device:89.821, eMFU: 45.59%\n",
" step= 7 loss=9.43211 step_time=2.10s TFLOP/s/device:89.701, eMFU: 45.53%\n",
" step= 8 loss=8.99658 step_time=2.10s TFLOP/s/device:89.750, eMFU: 45.56%\n",
" step= 9 loss=9.29634 step_time=2.10s TFLOP/s/device:89.744, eMFU: 45.56%\n",
" step= 10 loss=12.73707 step_time=2.10s TFLOP/s/device:89.786, eMFU: 45.58%\n",
" step= 11 loss=10.97237 step_time=2.10s TFLOP/s/device:89.776, eMFU: 45.57%\n",
" step= 12 loss=9.27653 step_time=2.10s TFLOP/s/device:89.769, eMFU: 45.57%\n",
" step= 13 loss=8.43188 step_time=2.10s TFLOP/s/device:89.786, eMFU: 45.58%\n",
" step= 14 loss=8.23481 step_time=2.10s TFLOP/s/device:89.805, eMFU: 45.59%\n",
" step= 15 loss=8.13170 step_time=2.10s TFLOP/s/device:89.793, eMFU: 45.58%\n",
" step= 16 loss=8.20371 step_time=2.10s TFLOP/s/device:89.768, eMFU: 45.57%\n",
" step= 17 loss=8.12382 step_time=2.11s TFLOP/s/device:89.578, eMFU: 45.47%\n",
" step= 18 loss=8.03367 step_time=2.10s TFLOP/s/device:89.723, eMFU: 45.54%\n",
" step= 19 loss=8.01734 step_time=2.10s TFLOP/s/device:89.769, eMFU: 45.57%\n",
"Parallelism (fsdp=16, transpose=1, tensor=1); 20 steps, loss=8.01734, step_time=2.10s, eMFU=45.57%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:3] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82464 step_time=4.88s\n",
" step= 1 loss=10.74638 step_time=2.46s TFLOP/s/device:76.796, eMFU: 38.98%\n",
" step= 2 loss=11.10725 step_time=2.11s TFLOP/s/device:89.405, eMFU: 45.38%\n",
" step= 3 loss=10.73088 step_time=2.10s TFLOP/s/device:89.779, eMFU: 45.57%\n",
" step= 4 loss=10.04863 step_time=2.10s TFLOP/s/device:89.769, eMFU: 45.57%\n",
" step= 5 loss=9.77938 step_time=2.11s TFLOP/s/device:89.423, eMFU: 45.39%\n",
" step= 6 loss=9.58473 step_time=2.10s TFLOP/s/device:89.775, eMFU: 45.57%\n",
" step= 7 loss=9.43211 step_time=2.10s TFLOP/s/device:89.827, eMFU: 45.60%\n",
" step= 8 loss=8.99658 step_time=2.10s TFLOP/s/device:89.734, eMFU: 45.55%\n",
" step= 9 loss=9.29634 step_time=2.10s TFLOP/s/device:89.738, eMFU: 45.55%\n",
" step= 10 loss=12.73707 step_time=2.10s TFLOP/s/device:89.720, eMFU: 45.54%\n",
" step= 11 loss=10.97237 step_time=2.10s TFLOP/s/device:89.778, eMFU: 45.57%\n",
" step= 12 loss=9.27653 step_time=2.10s TFLOP/s/device:89.788, eMFU: 45.58%\n",
" step= 13 loss=8.43188 step_time=2.10s TFLOP/s/device:89.776, eMFU: 45.57%\n",
" step= 14 loss=8.23481 step_time=2.10s TFLOP/s/device:89.808, eMFU: 45.59%\n",
" step= 15 loss=8.13170 step_time=2.10s TFLOP/s/device:89.740, eMFU: 45.55%\n",
" step= 16 loss=8.20371 step_time=2.11s TFLOP/s/device:89.565, eMFU: 45.46%\n",
" step= 17 loss=8.12382 step_time=2.10s TFLOP/s/device:89.822, eMFU: 45.60%\n",
" step= 18 loss=8.03367 step_time=2.10s TFLOP/s/device:89.797, eMFU: 45.58%\n",
" step= 19 loss=8.01734 step_time=2.10s TFLOP/s/device:89.759, eMFU: 45.56%\n",
"Parallelism (fsdp=16, transpose=1, tensor=1); 20 steps, loss=8.01734, step_time=2.10s, eMFU=45.56%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stdout:0] Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
" step= 0 loss=10.82464 step_time=4.53s\n",
" step= 1 loss=10.74638 step_time=2.81s TFLOP/s/device:67.263, eMFU: 34.14%\n",
" step= 2 loss=11.10725 step_time=2.11s TFLOP/s/device:89.558, eMFU: 45.46%\n",
" step= 3 loss=10.73088 step_time=2.10s TFLOP/s/device:89.721, eMFU: 45.54%\n",
" step= 4 loss=10.04863 step_time=2.10s TFLOP/s/device:89.794, eMFU: 45.58%\n",
" step= 5 loss=9.77938 step_time=2.11s TFLOP/s/device:89.477, eMFU: 45.42%\n",
" step= 6 loss=9.58473 step_time=2.10s TFLOP/s/device:89.753, eMFU: 45.56%\n",
" step= 7 loss=9.43211 step_time=2.10s TFLOP/s/device:89.766, eMFU: 45.57%\n",
" step= 8 loss=8.99658 step_time=2.10s TFLOP/s/device:89.755, eMFU: 45.56%\n",
" step= 9 loss=9.29634 step_time=2.10s TFLOP/s/device:89.749, eMFU: 45.56%\n",
" step= 10 loss=12.73707 step_time=2.10s TFLOP/s/device:89.715, eMFU: 45.54%\n",
" step= 11 loss=10.97237 step_time=2.10s TFLOP/s/device:89.787, eMFU: 45.58%\n",
" step= 12 loss=9.27653 step_time=2.10s TFLOP/s/device:89.732, eMFU: 45.55%\n",
" step= 13 loss=8.43188 step_time=2.10s TFLOP/s/device:89.830, eMFU: 45.60%\n",
" step= 14 loss=8.23481 step_time=2.10s TFLOP/s/device:89.760, eMFU: 45.56%\n",
" step= 15 loss=8.13170 step_time=2.10s TFLOP/s/device:89.787, eMFU: 45.58%\n",
" step= 16 loss=8.20371 step_time=2.10s TFLOP/s/device:89.810, eMFU: 45.59%\n",
" step= 17 loss=8.12382 step_time=2.11s TFLOP/s/device:89.561, eMFU: 45.46%\n",
" step= 18 loss=8.03367 step_time=2.10s TFLOP/s/device:89.811, eMFU: 45.59%\n",
" step= 19 loss=8.01734 step_time=2.10s TFLOP/s/device:89.753, eMFU: 45.56%\n",
"Parallelism (fsdp=16, transpose=1, tensor=1); 20 steps, loss=8.01734, step_time=2.10s, eMFU=45.56%\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:00<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:1] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"[stderr:0] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:01<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:3] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 0%| | 0/4 [00:01<?, ?tasks/s]"
]
},
{
"data": {
"text/plain": [
"[stderr:2] /usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n",
"/usr/local/lib/python3.10/site-packages/jax/_src/core.py:678: FutureWarning: unhashable type: <class 'jax._src.interpreters.partial_eval.DynamicJaxprTracer'>. Attempting to hash a tracer will lead to an error in a future JAX release.\n",
" warnings.warn(\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"%px: 100%|██████████| 4/4 [00:45<00:00, 11.33s/tasks]\n"
]
}
],
"source": [
"%%px --block --group-outputs=engine\n",
"\n",
"avg_tflops_per_devices, state = train(\n",
" config, init_rng, data_iterator, state, p_train_step, mesh\n",
")"
]
},
{
"cell_type": "markdown",
"id": "363c61c8-97ef-49ab-9611-b7ecd055b016",
"metadata": {},
"source": [
"MaxText (naively) estimates a similar effort as the last time:\n",
"```\n",
"Per train step:\n",
" Total TFLOPs: 188.76 \n",
" split as 86.02% learnable weight flops and 13.98% attention flops\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "7a6e4f71-4a0b-478c-8b7d-749583ae65d0",
"metadata": {},
"source": [
"## Comparing the two approaches \n",
"So let's look at these two together. We see that our machine utilization has risen and our step time has reduced by 33.76%.\n",
"```\n",
"Parallelism (fsdp=4, transpose=1, tensor=4); 20 steps, loss=8.01624, step_time=3.17s, eMFU=30.25%\n",
"Parallelism (fsdp=16, transpose=1, tensor=1); 20 steps, loss=8.01734, step_time=2.10s, eMFU=45.57%\n",
"```\n",
"\n",
"To put this in context, if we needed 20,000 steps for training, the first strategy would take approximately (20,000 * 3.17s) or 63,400s (17.61h).\n",
"\n",
"The intuitively attractive approach would take approximately (20,000 * 2.10s) or 42,000s (11.67h)."
]
},
{
"cell_type": "markdown",
"id": "5384f1d1-5754-4e30-8425-13289002850c",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"We tried a couple of different approaches for parallelism while training LLama2-7b on TPU v5e-16. MaxText makes it practical to loop over a selected set of parallelism strategies and compare results. \n",
"\n",
"Most importantly, we saw how we can quickly iterate with a notebook and use some of the same code to scale up."
]
},
{
"cell_type": "markdown",
"id": "29345521-0d31-49cc-8886-6d725b51d482",
"metadata": {},
"source": [
"### Additional references\n",
"Selected JAX resources:\n",
"1. The [JAX tutorials](https://jax.readthedocs.io/en/latest/tutorials.html) that cover important concepts like just-in-time compilation and sharded computation\n",
"2. The [GSPMD paper](https://arxiv.org/pdf/2105.04663) that inspired some of the sharding efforts in MaxText\n",
"3. Rafi Witten's [High Performance LLMs](https://github.com/rwitten/HighPerfLLMs2024/tree/main) course\n",
"\n",
"While this example focused on JAX, it would be interesting to try something similar with [PyTorch/XLA](https://github.com/pytorch/xla)."
]
}
],
"metadata": {
"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.11.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment