After fixing the code, you can see that the model is changing as the loss and accuracy are moving.
Epoch 0/24
----------
train Loss: 4.0923 Acc: 0.1649
val Loss: 4.2621 Acc: 0.1667

Epoch 1/24
----------
train Loss: 4.0785 Acc: 0.1646
val Loss: 4.1317 Acc: 0.1667

Epoch 2/24
----------
train Loss: 4.0882 Acc: 0.1650
val Loss: 4.1552 Acc: 0.1667

Epoch 3/24
----------
train Loss: 4.0823 Acc: 0.1675
val Loss: 4.3270 Acc: 0.1667

Epoch 4/24
----------
train Loss: 4.0952 Acc: 0.1669
val Loss: 4.0157 Acc: 0.1667

However, most likely due to the high learning rate the loss is not decreasing.
Using a standard Adam optimizer setup, such as:
optimizer = torch.optim.Adam(cifar_model.parameters(), lr=1e-3)

yields better results right from the start:
Epoch 0/24
----------
train Loss: 2.6817 Acc: 0.6387
val Loss: 2.1259 Acc: 0.8903

Epoch 1/24
----------
train Loss: 1.9875 Acc: 0.9448
val Loss: 1.7324 Acc: 1.0461

Epoch 2/24
----------
train Loss: 1.7088 Acc: 1.0580
val Loss: 1.5539 Acc: 1.1126

Epoch 3/24
----------
train Loss: 1.5190 Acc: 1.1288
val Loss: 1.3736 Acc: 1.1824

Epoch 4/24
----------
train Loss: 1.3708 Acc: 1.1851
val Loss: 1.1912 Acc: 1.2527

However, as you can see, your accuracy calculation is wrong, since you are dividing the accuracy by 30000 instead of the number of samples of the dataset (50000 for the training and 10000 for the validation split) in:
epoch_acc = running_corrects.double() / 30000

Also, you are using the training_loader only while the print assumes that a validation loss is also calculated.