{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":19018,"databundleVersionId":2703900,"sourceType":"competition"}],"dockerImageVersionId":31154,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\ndata = pd.read_csv(\"/kaggle/input/jigsaw-multilingual-toxic-comment-classification/jigsaw-toxic-comment-train.csv\")\nprint(data.head())","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:22:12.723194Z","iopub.execute_input":"2025-10-13T03:22:12.723348Z","iopub.status.idle":"2025-10-13T03:22:17.234568Z","shell.execute_reply.started":"2025-10-13T03:22:12.723333Z","shell.execute_reply":"2025-10-13T03:22:17.233702Z"}},"outputs":[{"name":"stdout","text":"                 id                                       comment_text  toxic  \\\n0  0000997932d777bf  Explanation\\nWhy the edits made under my usern...      0   \n1  000103f0d9cfb60f  D'aww! He matches this background colour I'm s...      0   \n2  000113f07ec002fd  Hey man, I'm really not trying to edit war. It...      0   \n3  0001b41b1c6bb37e  \"\\nMore\\nI can't make any real suggestions on ...      0   \n4  0001d958c54c6e35  You, sir, are my hero. Any chance you remember...      0   \n\n   severe_toxic  obscene  threat  insult  identity_hate  \n0             0        0       0       0              0  \n1             0        0       0       0              0  \n2             0        0       0       0              0  \n3             0        0       0       0              0  \n4             0        0       0       0              0  \n","output_type":"stream"}],"execution_count":1},{"cell_type":"code","source":"x_train = data[\"comment_text\"]\ny_train = data.iloc[:,2]\nprint(x_train)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:22:20.433393Z","iopub.execute_input":"2025-10-13T03:22:20.433652Z","iopub.status.idle":"2025-10-13T03:22:20.440615Z","shell.execute_reply.started":"2025-10-13T03:22:20.433634Z","shell.execute_reply":"2025-10-13T03:22:20.439884Z"}},"outputs":[{"name":"stdout","text":"0         Explanation\\nWhy the edits made under my usern...\n1         D'aww! He matches this background colour I'm s...\n2         Hey man, I'm really not trying to edit war. It...\n3         \"\\nMore\\nI can't make any real suggestions on ...\n4         You, sir, are my hero. Any chance you remember...\n                                ...                        \n223544    :Jerome, I see you never got around to this…! ...\n223545    ==Lucky bastard== \\n http://wikimediafoundatio...\n223546    ==shame on you all!!!== \\n\\n You want to speak...\n223547    MEL GIBSON IS A NAZI BITCH WHO MAKES SHITTY MO...\n223548    \" \\n\\n == Unicorn lair discovery == \\n\\n Suppo...\nName: comment_text, Length: 223549, dtype: object\n","output_type":"stream"}],"execution_count":2},{"cell_type":"code","source":"!pip install nltk","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:22:22.760583Z","iopub.execute_input":"2025-10-13T03:22:22.760884Z","iopub.status.idle":"2025-10-13T03:22:26.648875Z","shell.execute_reply.started":"2025-10-13T03:22:22.760863Z","shell.execute_reply":"2025-10-13T03:22:26.648059Z"}},"outputs":[{"name":"stdout","text":"Requirement already satisfied: nltk in /usr/local/lib/python3.11/dist-packages (3.9.1)\nRequirement already satisfied: click in /usr/local/lib/python3.11/dist-packages (from nltk) (8.3.0)\nRequirement already satisfied: joblib in /usr/local/lib/python3.11/dist-packages (from nltk) (1.5.2)\nRequirement already satisfied: regex>=2021.8.3 in /usr/local/lib/python3.11/dist-packages (from nltk) (2025.9.18)\nRequirement already satisfied: tqdm in /usr/local/lib/python3.11/dist-packages (from nltk) (4.67.1)\n","output_type":"stream"}],"execution_count":3},{"cell_type":"code","source":"import pandas as pd\nimport re\nimport nltk\nfrom nltk.corpus import stopwords\nfrom nltk.stem import WordNetLemmatizer\nfrom sklearn.feature_extraction.text import TfidfVectorizer\n\n# Tải dữ liệu NLTK cần thiết (chạy 1 lần)\nnltk.download('punkt')\nnltk.download('stopwords')\nnltk.download('wordnet')\n\n# Ví dụ: giả sử bạn có train data dạng pandas DataFrame\n# df = pd.read_csv(\"train.csv\") \n# Ở đây mình giả lập dữ liệu\n\n\n# Hàm tiền xử lý\ndef preprocess_text(text):\n    # Chuyển chữ thường\n    text = text.lower()\n    # Loại bỏ ký tự đặc biệt, số\n    text = re.sub(r'[^a-z\\s]', '', text)\n    # Tokenize\n    tokens = nltk.word_tokenize(text)\n    # Loại bỏ stopwords\n    stop_words = set(stopwords.words('english'))\n    tokens = [w for w in tokens if w not in stop_words]\n    # Lemmatization\n    lemmatizer = WordNetLemmatizer()\n    tokens = [lemmatizer.lemmatize(w) for w in tokens]\n    return \" \".join(tokens)\n\n# Áp dụng tiền xử lý\nx_train = x_train.apply(preprocess_text)\n\n# Vector hóa bằng TF-IDF\nvectorizer = TfidfVectorizer()\nx_train = vectorizer.fit_transform(x_train)\n\nprint(\"Kích thước ma trận vector:\", x_train.shape)\nprint(\"Ví dụ feature names:\", vectorizer.get_feature_names_out()[:20])\nprint(\"Vector hóa mẫu 1:\", x_train[0].toarray())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:22:26.852664Z","iopub.execute_input":"2025-10-13T03:22:26.85298Z","iopub.status.idle":"2025-10-13T03:24:19.493539Z","shell.execute_reply.started":"2025-10-13T03:22:26.852954Z","shell.execute_reply":"2025-10-13T03:24:19.492663Z"}},"outputs":[{"name":"stderr","text":"[nltk_data] Downloading package punkt to /usr/share/nltk_data...\n[nltk_data]   Package punkt is already up-to-date!\n[nltk_data] Downloading package stopwords to /usr/share/nltk_data...\n[nltk_data]   Package stopwords is already up-to-date!\n[nltk_data] Downloading package wordnet to /usr/share/nltk_data...\n[nltk_data]   Package wordnet is already up-to-date!\n","output_type":"stream"},{"name":"stdout","text":"Kích thước ma trận vector: (223549, 284976)\nVí dụ feature names: ['aa' 'aaa' 'aaaa' 'aaaaaaaa' 'aaaaaaaaaaaaaaaaaaaaaaaaa'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaany'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccdddddddddddddddddddddddddeeeeeeeeeeeeeeeeffffffffffffffffffgggggggggggggggggggghhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkklllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnooooooooooooooooooooppppppppppppppppppppqjkok'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'\n 'aaaaaaaaaaaaaaaaaaaaaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhh'\n 'aaaaaaaaaaaaaaaaaaaalllllllllllllllllllllll'\n 'aaaaaaaaaaaaaaaaaaggggggggggggggggggggggggggggggggggggggggggggggg'\n 'aaaaaaaaaaaahahahahahahaaaaaaaaaaaaaahahahahahaaaaaaaaaaaaaaahahahahaaaaaaaaaaaaaaaaaaaaaaa'\n 'aaaaaaaaaaarrrrrrrrrggggggg' 'aaaaaaaaaah' 'aaaaaaaaaahhhhhhhhhhhhhh'\n 'aaaaaaaaaannnnnnnnnnnnnnnnaaaaaaaaaaaaaaaaaaalllllllllll'\n 'aaaaaaaahhhhhhhhhhhhhhhhhhhhhhh'\n 'aaaaaaaahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh']\nVector hóa mẫu 1: [[0. 0. 0. ... 0. 0. 0.]]\n","output_type":"stream"}],"execution_count":4},{"cell_type":"code","source":"# label = pd.read_csv(\"/kaggle/input/jigsaw-multilingual-toxic-comment-classification/test_labels.csv\")\n# print(label.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:10:24.058894Z","iopub.execute_input":"2025-10-13T03:10:24.059411Z","iopub.status.idle":"2025-10-13T03:10:24.086186Z","shell.execute_reply.started":"2025-10-13T03:10:24.059389Z","shell.execute_reply":"2025-10-13T03:10:24.085322Z"}},"outputs":[{"name":"stdout","text":"   id  toxic\n0   0      0\n1   1      0\n2   2      1\n3   3      0\n4   4      0\n","output_type":"stream"}],"execution_count":14},{"cell_type":"code","source":"from sklearn.decomposition import TruncatedSVD\n\n# Giảm chiều xuống 100 (có thể điều chỉnh)\nsvd = TruncatedSVD(n_components=1000, random_state=42)\nx_reduced = svd.fit_transform(x_train)\n\nprint(\"Kích thước sau khi giảm chiều:\", x_reduced.shape)\nprint(\"Ví dụ vector sau giảm chiều:\", x_reduced[0])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:28:29.154641Z","iopub.execute_input":"2025-10-13T03:28:29.155524Z","iopub.status.idle":"2025-10-13T03:29:21.522405Z","shell.execute_reply.started":"2025-10-13T03:28:29.155498Z","shell.execute_reply":"2025-10-13T03:29:21.521645Z"}},"outputs":[{"name":"stdout","text":"Kích thước sau khi giảm chiều: (223549, 200)\nVí dụ vector sau giảm chiều: [ 0.15851509  0.05199788 -0.01301066 -0.04614013  0.00453644  0.06928044\n  0.00759507 -0.07765001 -0.02925003 -0.03467124  0.04742831 -0.02477627\n -0.01194014 -0.06671846  0.01888521 -0.05339344  0.01709358  0.01129192\n  0.09811647  0.00363831 -0.04241073 -0.04761632 -0.06522102 -0.02913491\n  0.06498989 -0.01793604 -0.00257117  0.02109313 -0.00334627  0.0188524\n -0.02064316 -0.03510692 -0.03027747  0.01246093 -0.05997156  0.02223501\n  0.02604959 -0.01791601  0.00032409 -0.07751861  0.00667252  0.02980052\n -0.02066691  0.02218128  0.0378349  -0.00043431 -0.02314748 -0.02303343\n  0.00616258  0.02111826 -0.0103197   0.00637117  0.02779238  0.02269795\n  0.03776332  0.02847438  0.04819915 -0.01300612  0.02106961 -0.03610875\n  0.0096835   0.00245676  0.02378194 -0.00885462  0.04941026  0.00229434\n  0.05193088  0.05720689  0.00141334  0.03885817  0.0160062  -0.04882749\n  0.02146584  0.00554928  0.03094216 -0.01995231 -0.0269664  -0.01536066\n  0.09733564  0.03426533 -0.01353473  0.00384046 -0.008006   -0.03245271\n -0.01059407 -0.01446716  0.02848969 -0.01154706 -0.01702381  0.03628057\n -0.05915007 -0.00867203 -0.0411249  -0.05379114  0.00428254  0.04416644\n  0.00153559  0.02792743 -0.02579695 -0.03905488  0.05107621 -0.03656867\n  0.04085014 -0.0712563  -0.05324504  0.0046959   0.00904256  0.01044947\n -0.00189772  0.03346183 -0.02303155  0.01695885 -0.01822723 -0.01965889\n -0.00494051  0.01373199 -0.04818929 -0.02086927 -0.00763417 -0.00612521\n -0.0084624  -0.0010577   0.0424061  -0.00849589  0.0181059   0.00950455\n -0.00887593 -0.0108735  -0.04347388 -0.00722044 -0.03094149 -0.03898498\n -0.01180321 -0.00972059  0.04695327  0.00315893  0.00128272  0.00112615\n  0.03467822 -0.01889227 -0.00803636 -0.01423198 -0.01751185  0.01208524\n  0.01160613  0.0152758  -0.00336518  0.00528864  0.06592251 -0.04248202\n  0.02159965 -0.02881549 -0.00039246  0.04586552 -0.03555384  0.00536787\n  0.01727063 -0.028037    0.00180508 -0.01083335 -0.0238252  -0.0293395\n -0.00487231  0.00037202  0.02515328 -0.04430617 -0.01361391 -0.03119047\n  0.01577173 -0.03084286  0.03332629  0.01246438 -0.01806838 -0.00754593\n  0.0291055  -0.01414457 -0.01100476  0.00462369  0.04029168  0.01475509\n  0.02000789 -0.0159117   0.01691858 -0.02050586  0.01175786 -0.02053722\n  0.03538972 -0.01927435  0.02727864  0.02070065  0.01115127 -0.01413061\n -0.00154654  0.00408787  0.00607517 -0.01585135  0.00023644  0.00787706\n  0.00758399  0.0005767 ]\n","output_type":"stream"}],"execution_count":5},{"cell_type":"code","source":"import torch.nn as nn\nmodel = nn.RNN(input_size=200, hidden_size=10)\nparams = dict(rnn.named_parameters())\ndef forward(x, hx=None, batch_first=False):\n    if batch_first:\n        x = x.transpose(0, 1)\n    seq_len, batch_size, _ = x.size()\n    if hx is None:\n        hx = torch.zeros(model.num_layers, batch_size, model.hidden_size)\n    h_t_minus_1 = hx.clone()\n    h_t = hx.clone()\n    output = []\n    for t in range(seq_len):\n        for layer in range(model.num_layers):\n            input_t = x[t] if layer == 0 else h_t[layer - 1]\n            h_t[layer] = torch.tanh(\n                input_t @ params[f\"weight_ih_l{layer}\"].T\n                + h_t_minus_1[layer] @ params[f\"weight_hh_l{layer}\"].T\n                + params[f\"bias_hh_l{layer}\"]\n                + params[f\"bias_ih_l{layer}\"]\n            )\n        output.append(h_t[-1].clone())\n        h_t_minus_1 = h_t.clone()\n    output = torch.stack(output)\n    if batch_first:\n        output = output.transpose(0, 1)\n    return output, h_t\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:36:38.539912Z","iopub.execute_input":"2025-10-13T03:36:38.540167Z","iopub.status.idle":"2025-10-13T03:36:38.560678Z","shell.execute_reply.started":"2025-10-13T03:36:38.540152Z","shell.execute_reply":"2025-10-13T03:36:38.559728Z"}},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mSystemError\u001b[0m                               Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_37/2251133357.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRNN\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mparams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnamed_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_first\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mbatch_first\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m    403\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mUSE_GLOBAL_DEPS\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    404\u001b[0m         \u001b[0m_load_global_deps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 405\u001b[0;31m     \u001b[0;32mfrom\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m  \u001b[0;31m# noqa: F403\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    406\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    407\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mSystemError\u001b[0m: 1b000-79\u0001�() method: bad call flags"],"ename":"SystemError","evalue":"1b000-79\u0001�() method: bad call flags","output_type":"error"}],"execution_count":7},{"cell_type":"code","source":"!pip install torch","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:38:22.995281Z","iopub.execute_input":"2025-10-13T03:38:22.995572Z","iopub.status.idle":"2025-10-13T03:39:30.083285Z","shell.execute_reply.started":"2025-10-13T03:38:22.995553Z","shell.execute_reply":"2025-10-13T03:39:30.082451Z"}},"outputs":[{"name":"stdout","text":"Requirement already satisfied: torch in /usr/local/lib/python3.11/dist-packages (2.6.0+cu124)\nRequirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from torch) (3.19.1)\nRequirement already satisfied: typing-extensions>=4.10.0 in /usr/local/lib/python3.11/dist-packages (from torch) (4.15.0)\nRequirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch) (3.5)\nRequirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch) (3.1.6)\nRequirement already satisfied: fsspec in /usr/local/lib/python3.11/dist-packages (from torch) (2025.9.0)\nCollecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch)\n  Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cuda-runtime-cu12==12.4.127 (from torch)\n  Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cuda-cupti-cu12==12.4.127 (from torch)\n  Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nCollecting nvidia-cudnn-cu12==9.1.0.70 (from torch)\n  Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nCollecting nvidia-cublas-cu12==12.4.5.8 (from torch)\n  Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cufft-cu12==11.2.1.3 (from torch)\n  Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-curand-cu12==10.3.5.147 (from torch)\n  Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nCollecting nvidia-cusolver-cu12==11.6.1.9 (from torch)\n  Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nCollecting nvidia-cusparse-cu12==12.3.1.170 (from torch)\n  Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\nRequirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch) (0.6.2)\nRequirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch) (2.21.5)\nRequirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch) (12.4.127)\nCollecting nvidia-nvjitlink-cu12==12.4.127 (from torch)\n  Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\nRequirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch) (3.2.0)\nRequirement already satisfied: sympy==1.13.1 in /usr/local/lib/python3.11/dist-packages (from torch) (1.13.1)\nRequirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy==1.13.1->torch) (1.3.0)\nRequirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch) (3.0.2)\nDownloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m4.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m93.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m0:01\u001b[0m\n\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m64.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m49.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m2.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m17.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m13.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m8.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m61.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hInstalling collected packages: nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12\n  Attempting uninstall: nvidia-nvjitlink-cu12\n    Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n    Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n      Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n  Attempting uninstall: nvidia-curand-cu12\n    Found existing installation: nvidia-curand-cu12 10.3.6.82\n    Uninstalling nvidia-curand-cu12-10.3.6.82:\n      Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n  Attempting uninstall: nvidia-cufft-cu12\n    Found existing installation: nvidia-cufft-cu12 11.2.3.61\n    Uninstalling nvidia-cufft-cu12-11.2.3.61:\n      Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n  Attempting uninstall: nvidia-cuda-runtime-cu12\n    Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n    Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n      Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n  Attempting uninstall: nvidia-cuda-nvrtc-cu12\n    Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n    Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n      Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n  Attempting uninstall: nvidia-cuda-cupti-cu12\n    Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n    Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n      Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n  Attempting uninstall: nvidia-cublas-cu12\n    Found existing installation: nvidia-cublas-cu12 12.5.3.2\n    Uninstalling nvidia-cublas-cu12-12.5.3.2:\n      Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n  Attempting uninstall: nvidia-cusparse-cu12\n    Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n    Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n      Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n  Attempting uninstall: nvidia-cudnn-cu12\n    Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n    Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n      Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n  Attempting uninstall: nvidia-cusolver-cu12\n    Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n    Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n      Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\nlibcugraph-cu12 25.6.0 requires libraft-cu12==25.6.*, but you have libraft-cu12 25.2.0 which is incompatible.\npylibcugraph-cu12 25.6.0 requires pylibraft-cu12==25.6.*, but you have pylibraft-cu12 25.2.0 which is incompatible.\npylibcugraph-cu12 25.6.0 requires rmm-cu12==25.6.*, but you have rmm-cu12 25.2.0 which is incompatible.\u001b[0m\u001b[31m\n\u001b[0mSuccessfully installed nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127\n","output_type":"stream"}],"execution_count":11},{"cell_type":"code","source":"import torch","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:42:35.278793Z","iopub.execute_input":"2025-10-13T03:42:35.279365Z","iopub.status.idle":"2025-10-13T03:42:35.282878Z","shell.execute_reply.started":"2025-10-13T03:42:35.279341Z","shell.execute_reply":"2025-10-13T03:42:35.28204Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"import torch.nn as nn\n# Efficient implementation equivalent to the following with bidirectional=False\nrnn = nn.RNN(input_size = 200, hidden_size = 10, num_layers = 1000)\nparams = dict(rnn.named_parameters())\ndef forward(x, hx=None, batch_first=False):\n    if batch_first:\n        x = x.transpose(0, 1)\n    seq_len, batch_size, _ = x.size()\n    if hx is None:\n        hx = torch.zeros(rnn.num_layers, batch_size, rnn.hidden_size)\n    h_t_minus_1 = hx.clone()\n    h_t = hx.clone()\n    output = []\n    for t in range(seq_len):\n        for layer in range(rnn.num_layers):\n            input_t = x[t] if layer == 0 else h_t[layer - 1]\n            h_t[layer] = torch.tanh(\n                input_t @ params[f\"weight_ih_l{layer}\"].T\n                + h_t_minus_1[layer] @ params[f\"weight_hh_l{layer}\"].T\n                + params[f\"bias_hh_l{layer}\"]\n                + params[f\"bias_ih_l{layer}\"]\n            )\n        output.append(h_t[-1].clone())\n        h_t_minus_1 = h_t.clone()\n    output = torch.stack(output)\n    if batch_first:\n        output = output.transpose(0, 1)\n    return output, h_t","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-10-13T03:39:52.874666Z","iopub.execute_input":"2025-10-13T03:39:52.874984Z","iopub.status.idle":"2025-10-13T03:39:53.32882Z","shell.execute_reply.started":"2025-10-13T03:39:52.874966Z","shell.execute_reply":"2025-10-13T03:39:53.327815Z"}},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_37/914415593.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0;31m# Efficient implementation equivalent to the following with bidirectional=False\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0mrnn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRNN\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m200\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhidden_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnum_layers\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mparams\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnamed_parameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mforward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_first\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/torch/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m    403\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mUSE_GLOBAL_DEPS\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    404\u001b[0m         \u001b[0m_load_global_deps\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 405\u001b[0;31m     \u001b[0;32mfrom\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_C\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m  \u001b[0;31m# noqa: F403\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    406\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    407\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mValueError\u001b[0m: module functions cannot set METH_CLASS or METH_STATIC"],"ename":"ValueError","evalue":"module functions cannot set METH_CLASS or METH_STATIC","output_type":"error"}],"execution_count":13},{"cell_type":"code","source":"output, h_t = forward(x_reduced)","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}